diff options
author | Michael Wright <michaelwr@google.com> | 2016-10-11 11:51:19 -0400 |
---|---|---|
committer | Michael Wright <michaelwr@google.com> | 2016-10-11 16:00:06 +0000 |
commit | 59db07aeb98f376914619b99c442d6acac8adb54 (patch) | |
tree | c8248195fe71aa461acf3da4c789d559270cbb70 | |
parent | ea9f789cb0fe030a624a853ff1b5eaec41590886 (diff) | |
download | doclava-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.java | 10 |
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()))); + } } } |