Resolve whether parameter types are actually type variables.
Parameters can either be a declaration of a generic type, or a
statement about the concrete type the parameter is taking for a
particular instance. These are difficult to determine at initial
parse, so resolve whether the class exists once parsing is finished
and assume that the parameter is a type variable if it does not.
Bug: 31858628
Test: run update-api, android.signature.cts.SignatureTest#testSignature
Change-Id: I88d316cece8640fd5d356482ebbe0426d918d8f4
diff --git a/src/com/google/doclava/TypeInfo.java b/src/com/google/doclava/TypeInfo.java
index ad26def..689ff88 100644
--- a/src/com/google/doclava/TypeInfo.java
+++ b/src/com/google/doclava/TypeInfo.java
@@ -54,7 +54,6 @@
if (c == ',' && bracketNesting == 0) {
String entry = typeString.substring(entryStartPos, i).trim();
TypeInfo info = new TypeInfo(entry);
- info.setIsTypeVariable(true);
generics.add(info);
entryStartPos = i + 1;
} else if (c == '<') {
@@ -70,8 +69,8 @@
}
TypeInfo info = new TypeInfo(typeString.substring(entryStartPos, paramEndPos).trim());
- info.setIsTypeVariable(true);
generics.add(info);
+ addResolution(new Resolution("variability", "", null));
mTypeArguments = generics;
@@ -483,6 +482,13 @@
} else {
mClass = InfoBuilder.Caches.obtainClass(qualifiedClassName.toString());
}
+ } else if ("variability".equals(resolution.getVariable())) {
+ StringBuilder qualifiedClassName = new StringBuilder();
+ for (TypeInfo arg : mTypeArguments) {
+ InfoBuilder.resolveQualifiedName(arg.simpleTypeName(), qualifiedClassName,
+ resolution.getInfoBuilder());
+ arg.setIsTypeVariable(!("".equals(qualifiedClassName.toString())));
+ }
}
}