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 7bcdba07f721dbf54398ef7e580da4647bd8406a..295b7a70acbf5a2ddb6bca8c50ff8ff664e61dab 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 java.util.Objects; 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 class OverrideMethodVisitor extends AbstractVisitor { 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 @@ public class OverrideMethodVisitor extends AbstractVisitor { 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 0000000000000000000000000000000000000000..88c588d5851cea6c8fbc4b5d8186a95f59b71919 --- /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"); + } +}