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;