From 6428f293731ef6ea9b411212598f96e1417acf92 Mon Sep 17 00:00:00 2001 From: Skylot Date: Thu, 17 Sep 2020 16:47:44 +0300 Subject: [PATCH] fix: don't add @Override for static methods (#976) --- .../dex/visitors/OverrideMethodVisitor.java | 7 ++-- .../others/TestOverrideStaticMethod.java | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/others/TestOverrideStaticMethod.java diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/OverrideMethodVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/OverrideMethodVisitor.java index 7bcdba07f72..295b7a70acb 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/OverrideMethodVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/OverrideMethodVisitor.java @@ -9,6 +9,7 @@ import jadx.core.clsp.ClspClass; import jadx.core.clsp.ClspMethod; import jadx.core.dex.attributes.nodes.MethodOverrideAttr; +import jadx.core.dex.info.AccessInfo; import jadx.core.dex.instructions.args.ArgType; import jadx.core.dex.nodes.ClassNode; import jadx.core.dex.nodes.IMethodDetails; @@ -33,7 +34,7 @@ public boolean visit(ClassNode cls) throws JadxException { RootNode root = cls.root(); List superTypes = collectSuperTypes(cls); for (MethodNode mth : cls.getMethods()) { - if (mth.isConstructor()) { + if (mth.isConstructor() || mth.getAccessFlags().isStatic()) { continue; } String signature = mth.getMethodInfo().makeSignature(false); @@ -53,7 +54,9 @@ private List collectOverrideMethods(RootNode root, List ClassNode classNode = root.resolveClass(superType); if (classNode != null) { for (MethodNode mth : classNode.getMethods()) { - if (!mth.getAccessFlags().isPrivate()) { + AccessInfo accessFlags = mth.getAccessFlags(); + if (!accessFlags.isPrivate() + && !accessFlags.isStatic()) { String mthShortId = mth.getMethodInfo().getShortId(); if (mthShortId.startsWith(signature)) { overrideList.add(mth); diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestOverrideStaticMethod.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestOverrideStaticMethod.java new file mode 100644 index 00000000000..88c588d5851 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestOverrideStaticMethod.java @@ -0,0 +1,36 @@ +package jadx.tests.integration.others; + +import org.junit.jupiter.api.Test; + +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; + +public class TestOverrideStaticMethod extends IntegrationTest { + + public static class TestCls { + public static class BaseClass { + public static int a() { + return 1; + } + } + + public static class MyClass extends BaseClass { + public static int a() { + return 2; + } + } + + public void check() { + assertThat(BaseClass.a()).isEqualTo(1); + assertThat(MyClass.a()).isEqualTo(2); + } + } + + @Test + public void test() { + assertThat(getClassNode(TestCls.class)) + .code() + .doesNotContain("@Override"); + } +}