summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2016-10-11 11:51:19 -0400
committerMichael Wright <michaelwr@google.com>2016-10-11 16:00:06 +0000
commit59db07aeb98f376914619b99c442d6acac8adb54 (patch)
treec8248195fe71aa461acf3da4c789d559270cbb70
parentea9f789cb0fe030a624a853ff1b5eaec41590886 (diff)
downloaddoclava-59db07aeb98f376914619b99c442d6acac8adb54.tar.gz
Resolve whether parameter types are actually type variables.nougat-mr1-dev
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
-rw-r--r--src/com/google/doclava/TypeInfo.java10
1 files changed, 8 insertions, 2 deletions
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 @@ public class TypeInfo implements Resolvable {
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 @@ public class TypeInfo implements Resolvable {
}
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 @@ public class TypeInfo implements Resolvable {
} 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())));
+ }
}
}