diff --git a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java index 4843d7b83..834e8300a 100644 --- a/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java +++ b/jadx-core/src/main/java/jadx/core/dex/instructions/args/ArgType.java @@ -174,7 +174,7 @@ public abstract class ArgType { private final int bounds; public WildcardType(ArgType obj, int bound) { - super(obj.getObject()); + super(ArgType.OBJECT.getObject()); this.type = obj; this.bounds = bound; } @@ -205,7 +205,8 @@ public abstract class ArgType { @Override boolean internalEquals(Object obj) { return super.internalEquals(obj) - && bounds == ((WildcardType) obj).bounds; + && bounds == ((WildcardType) obj).bounds + && type.equals(((WildcardType) obj).type); } @Override @@ -213,7 +214,7 @@ public abstract class ArgType { if (bounds == 0) { return "?"; } - return "? " + (bounds == -1 ? "super" : "extends") + " " + super.toString(); + return "? " + (bounds == -1 ? "super" : "extends") + " " + type.toString(); } } diff --git a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java index 88bd4939e..00097e364 100644 --- a/jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java +++ b/jadx-core/src/main/java/jadx/core/dex/nodes/parser/SignatureParser.java @@ -23,9 +23,9 @@ public class SignatureParser { public SignatureParser(String signature) { sign = signature; + end = sign.length(); pos = -1; mark = 0; - end = sign.length(); } @SuppressWarnings("unchecked") diff --git a/jadx-core/src/test/java/jadx/api/InternalJadxTest.java b/jadx-core/src/test/java/jadx/api/InternalJadxTest.java index 6e6d4a4b6..2c794e79d 100644 --- a/jadx-core/src/test/java/jadx/api/InternalJadxTest.java +++ b/jadx-core/src/test/java/jadx/api/InternalJadxTest.java @@ -71,6 +71,7 @@ public abstract class InternalJadxTest { assertFalse(cls.getAttributes().contains(AttributeFlag.INCONSISTENT_CODE)); return cls; } catch (Exception e) { + e.printStackTrace(); fail(e.getMessage()); return null; } diff --git a/jadx-core/src/test/java/jadx/tests/internal/generics/TestGenerics3.java b/jadx-core/src/test/java/jadx/tests/internal/generics/TestGenerics3.java new file mode 100644 index 000000000..fe9ff50a9 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/internal/generics/TestGenerics3.java @@ -0,0 +1,41 @@ +package jadx.tests.internal.generics; + +import jadx.api.InternalJadxTest; +import jadx.core.dex.nodes.ClassNode; + +import java.util.List; + +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; + +public class TestGenerics3 extends InternalJadxTest { + + public static class TestCls { + + public static void mthExtendsArray(List list) { + } + + public static void mthSuperArray(List list) { + } + + public static void mthSuperInteger(List list) { + } + + public static void mthExtendsString(List list) { + } + } + + @Test + public void test() { + ClassNode cls = getClassNode(TestCls.class); + String code = cls.getCode().toString(); + System.out.println(code); + + assertThat(code, containsString("mthExtendsArray(List list)")); + assertThat(code, containsString("mthSuperArray(List list)")); + assertThat(code, containsString("mthSuperInteger(List list)")); + assertThat(code, containsString("mthExtendsString(List list)")); + } +}