Revision: 10399
Author:   [email protected]
Date:     Fri Jun 24 16:03:25 2011
Log:      Fix bug resolving multiple-nested types.

http://gwt-code-reviews.appspot.com/1466808/

Review by: [email protected]
http://code.google.com/p/google-web-toolkit/source/detail?r=10399

Modified:
 /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java

=======================================
--- /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java Thu Apr 28 06:57:23 2011 +++ /trunk/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java Fri Jun 24 16:03:25 2011
@@ -423,8 +423,10 @@
       // resolve an outer type before trying to get the cached inner
       String cupName = typeName.substring(0, p);
       char[][] chars = CharOperation.splitOn('.', cupName.toCharArray());
-      if (lookupEnvironment.getType(chars) != null) {
+      ReferenceBinding outerType = lookupEnvironment.getType(chars);
+      if (outerType != null) {
         // outer class was found
+        resolveRecursive(outerType);
         chars = CharOperation.splitOn('.', typeName.toCharArray());
         type = lookupEnvironment.getCachedType(chars);
         if (type == null) {
@@ -471,6 +473,16 @@
     }
     return false;
   }
+
+  /**
+ * Recursively invoking {@link ReferenceBinding#memberTypes()} causes JDT to
+   * resolve and cache all nested types at arbitrary depth.
+   */
+  private static void resolveRecursive(ReferenceBinding outerType) {
+    for (ReferenceBinding memberType : outerType.memberTypes()) {
+      resolveRecursive(memberType);
+    }
+  }

   private AdditionalTypeProviderDelegate additionalTypeProviderDelegate;

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to