Parsing entire tree and resolving all conflicts.
Unfortunately, this takes 3 passes (1 parse and 2 resolve passes)
due to one corner case (where you refer to something that is inside a superclass
that is in a different package). Fortunately, there are only
3 or 4 resolutions on the third pass.
Change-Id: I14dc6e61e002058132b8065a7b31abb87ac8f2a1
diff --git a/src/com/google/doclava/TypeInfo.java b/src/com/google/doclava/TypeInfo.java
index 6b821cc..ad50bb5 100644
--- a/src/com/google/doclava/TypeInfo.java
+++ b/src/com/google/doclava/TypeInfo.java
@@ -110,6 +110,10 @@
return mDimension;
}
+ public void setDimension(String dimension) {
+ mDimension = dimension;
+ }
+
public String simpleTypeName() {
return mSimpleTypeName;
}
@@ -288,6 +292,10 @@
mIsWildcard = b;
}
+ public boolean isWildcard() {
+ return mIsWildcard;
+ }
+
static HashSet<String> typeVariables(ArrayList<TypeInfo> params) {
return typeVariables(params, new HashSet<String>());
}
@@ -358,12 +366,40 @@
}
public void printResolutions() {
+ if (mResolutions == null || mResolutions.isEmpty()) {
+ return;
+ }
+
System.out.println("Resolutions for Type " + mSimpleTypeName + ":");
for (Resolution r : mResolutions) {
System.out.println(r);
}
}
+ public boolean resolveResolutions() {
+ ArrayList<Resolution> resolutions = mResolutions;
+ mResolutions = new ArrayList<Resolution>();
+
+ boolean allResolved = true;
+ for (Resolution resolution : resolutions) {
+ if ("class".equals(resolution.getVariable())) {
+ StringBuilder qualifiedClassName = new StringBuilder();
+ InfoBuilder.resolveQualifiedName(resolution.getValue(), qualifiedClassName,
+ resolution.getInfoBuilder());
+
+ // if we still couldn't resolve it, save it for the next pass
+ if ("".equals(qualifiedClassName.toString())) {
+ mResolutions.add(resolution);
+ allResolved = false;
+ } else {
+ mClass = InfoBuilder.Caches.obtainClass(qualifiedClassName.toString());
+ }
+ }
+ }
+
+ return allResolved;
+ }
+
private ArrayList<Resolution> mResolutions;
private boolean mIsPrimitive;