From eada4b0fc3047dfe01516b9a56889ab6066baafe Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 21 Nov 2020 15:31:50 +0000 Subject: [PATCH] fix: don't add 'default' for static methods in interfaces --- .../java/jadx/core/codegen/MethodGen.java | 2 +- .../others/TestInterfaceDefaultMethod.java | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/others/TestInterfaceDefaultMethod.java diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index 8aed8616a..e6b63a2d3 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -110,7 +110,7 @@ public class MethodGen { if (Consts.DEBUG) { code.add(mth.isVirtual() ? "/* virtual */ " : "/* direct */ "); } - if (clsAccFlags.isInterface() && !mth.isNoCode()) { + if (clsAccFlags.isInterface() && !mth.isNoCode() && !mth.getAccessFlags().isStatic()) { // add 'default' for method with code in interface code.add("default "); } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestInterfaceDefaultMethod.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestInterfaceDefaultMethod.java new file mode 100644 index 000000000..52fa950a0 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestInterfaceDefaultMethod.java @@ -0,0 +1,37 @@ +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 TestInterfaceDefaultMethod extends IntegrationTest { + + public static class TestCls { + + @SuppressWarnings("UnnecessaryInterfaceModifier") + public interface ITest { + void test1(); + + default void test2() { + } + + static void test3() { + } + + abstract void test4(); + } + } + + @Test + public void test() { + assertThat(getClassNode(TestCls.class)) + .code() + .doesNotContain("static default") + .doesNotContain("abstract") + .containsOne("void test1();") + .containsOne("default void test2() {") + .containsOne("static void test3() {"); + } +}