Commit ba1524dc authored by Skylot's avatar Skylot

Fix arrays parsing in signature

parent 0ee499c5
...@@ -53,7 +53,7 @@ public final class ClassInfo { ...@@ -53,7 +53,7 @@ public final class ClassInfo {
this.type = type; this.type = type;
String fullObjectName = type.getObject(); String fullObjectName = type.getObject();
assert fullObjectName.indexOf('/') == -1; assert fullObjectName.indexOf('/') == -1 : "Raw type: " + type;
boolean notObfuscated = dex.root().getJadxArgs().isNotObfuscated(); boolean notObfuscated = dex.root().getJadxArgs().isNotObfuscated();
String name; String name;
......
...@@ -399,13 +399,16 @@ public abstract class ArgType { ...@@ -399,13 +399,16 @@ public abstract class ArgType {
if (b == -1) if (b == -1)
return parse(sign); return parse(sign);
String obj = sign.substring(0, b); if (sign.charAt(0) == '[')
return array(parseSignature(sign.substring(1)));
String obj = sign.substring(0, b) + ";";
String genericsStr = sign.substring(b + 1, sign.length() - 2); String genericsStr = sign.substring(b + 1, sign.length() - 2);
List<ArgType> generics = parseSignatureList(genericsStr); List<ArgType> generics = parseSignatureList(genericsStr);
if (generics != null) if (generics != null)
return generic(obj + ";", generics.toArray(new ArgType[generics.size()])); return generic(obj, generics.toArray(new ArgType[generics.size()]));
else else
return object(obj + ";"); return object(obj);
} }
public static List<ArgType> parseSignatureList(String str) { public static List<ArgType> parseSignatureList(String str) {
...@@ -418,12 +421,11 @@ public abstract class ArgType { ...@@ -418,12 +421,11 @@ public abstract class ArgType {
} }
private static List<ArgType> parseSignatureListInner(String str, boolean parsePrimitives) { private static List<ArgType> parseSignatureListInner(String str, boolean parsePrimitives) {
List<ArgType> signs = new ArrayList<ArgType>(3);
if (str.equals("*")) { if (str.equals("*")) {
signs.add(UNKNOWN); return Arrays.asList(UNKNOWN);
return signs;
} }
List<ArgType> signs = new ArrayList<ArgType>(3);
int obj = 0; int obj = 0;
int objStart = 0; int objStart = 0;
int gen = 0; int gen = 0;
......
...@@ -9,6 +9,8 @@ public class TestGenerics extends AbstractTest { ...@@ -9,6 +9,8 @@ public class TestGenerics extends AbstractTest {
public List<String> strings; public List<String> strings;
public Class<?>[] classes;
public static class GenericClass implements Comparable<String> { public static class GenericClass implements Comparable<String> {
@Override @Override
public int compareTo(String o) { public int compareTo(String o) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment