Fix arrays parsing in signature
This commit is contained in:
@@ -53,7 +53,7 @@ public final class ClassInfo {
|
||||
this.type = type;
|
||||
|
||||
String fullObjectName = type.getObject();
|
||||
assert fullObjectName.indexOf('/') == -1;
|
||||
assert fullObjectName.indexOf('/') == -1 : "Raw type: " + type;
|
||||
|
||||
boolean notObfuscated = dex.root().getJadxArgs().isNotObfuscated();
|
||||
String name;
|
||||
|
||||
@@ -399,13 +399,16 @@ public abstract class ArgType {
|
||||
if (b == -1)
|
||||
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);
|
||||
List<ArgType> generics = parseSignatureList(genericsStr);
|
||||
if (generics != null)
|
||||
return generic(obj + ";", generics.toArray(new ArgType[generics.size()]));
|
||||
return generic(obj, generics.toArray(new ArgType[generics.size()]));
|
||||
else
|
||||
return object(obj + ";");
|
||||
return object(obj);
|
||||
}
|
||||
|
||||
public static List<ArgType> parseSignatureList(String str) {
|
||||
@@ -418,12 +421,11 @@ public abstract class ArgType {
|
||||
}
|
||||
|
||||
private static List<ArgType> parseSignatureListInner(String str, boolean parsePrimitives) {
|
||||
List<ArgType> signs = new ArrayList<ArgType>(3);
|
||||
if (str.equals("*")) {
|
||||
signs.add(UNKNOWN);
|
||||
return signs;
|
||||
return Arrays.asList(UNKNOWN);
|
||||
}
|
||||
|
||||
List<ArgType> signs = new ArrayList<ArgType>(3);
|
||||
int obj = 0;
|
||||
int objStart = 0;
|
||||
int gen = 0;
|
||||
|
||||
@@ -9,6 +9,8 @@ public class TestGenerics extends AbstractTest {
|
||||
|
||||
public List<String> strings;
|
||||
|
||||
public Class<?>[] classes;
|
||||
|
||||
public static class GenericClass implements Comparable<String> {
|
||||
@Override
|
||||
public int compareTo(String o) {
|
||||
|
||||
Reference in New Issue
Block a user