Fixed 2 issues with the api-checker.
(1) Api checker now propagates the errors that TypeOracle encounters.
(2) Only the translatable version of LinkedHashMap_CustomFieldSerializer is now
checked for api compatibility. 


Patch by: amitmanjhi
Review by: spoon (desk review) 



git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.6@4269 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/api-checker/config/gwt15_16userApi.conf b/tools/api-checker/config/gwt15_16userApi.conf
index 512204b..e8da6bf 100644
--- a/tools/api-checker/config/gwt15_16userApi.conf
+++ b/tools/api-checker/config/gwt15_16userApi.conf
@@ -1,18 +1,19 @@
 #existing API
 
+dirRoot_old @OLDROOT@/
 name_old gwt15userApi
 #sourceFiles and excludedFiles are specified as colon-separated list of files
-sourceFiles_old @OLDROOT@/dev/core/super:@OLDROOT@/user/super:@OLDROOT@/user/src
-excludedFiles_old @OLDROOT@/user/src/com/google/gwt/benchmarks:@OLDROOT@/user/src/com/google/gwt/junit:@OLDROOT@/user/src/com/google/gwt/i18n/rebind:@OLDROOT@/user/src/com/google/gwt/i18n/tools:@OLDROOT@/user/src/com/google/gwt/json:@OLDROOT@/user/src/com/google/gwt/user/rebind:@OLDROOT@/user/src/com/google/gwt/user/server:@OLDROOT@/user/src/com/google/gwt/user/tools:@OLDROOT@/user/super/com/google/gwt/benchmarks:@OLDROOT@/user/super/com/google/gwt/junit
+sourceFiles_old dev/core/super:user/src:user/super
+excludedFiles_old user/src/com/google/gwt/benchmarks:user/src/com/google/gwt/i18n/rebind:user/src/com/google/gwt/i18n/tools:user/src/com/google/gwt/json:user/src/com/google/gwt/junit:user/src/com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java:user/src/com/google/gwt/user/rebind:user/src/com/google/gwt/user/server:user/src/com/google/gwt/user/tools:user/super/com/google/gwt/benchmarks:user/super/com/google/gwt/junit
 
 ##############################################
 #new Api
 
+dirRoot_new ./
 name_new gwt16userApi
 #sourceFiles and excludedFiles are specified as colon-separated list of files
-sourceFiles_new ./dev/core/super:./user/super:./user/src
-#:dev/core/src
-excludedFiles_new ./user/src/com/google/gwt/benchmarks:./user/src/com/google/gwt/junit:./user/src/com/google/gwt/i18n/rebind:./user/src/com/google/gwt/i18n/tools:./user/src/com/google/gwt/json:./user/src/com/google/gwt/user/rebind:./user/src/com/google/gwt/user/server:./user/src/com/google/gwt/user/tools:./user/super/com/google/gwt/benchmarks:./user/super/com/google/gwt/junit
+sourceFiles_new dev/core/super:user/src:user/super
+excludedFiles_new user/src/com/google/gwt/benchmarks:user/src/com/google/gwt/i18n/rebind:user/src/com/google/gwt/i18n/tools:user/src/com/google/gwt/json:user/src/com/google/gwt/junit:user/src/com/google/gwt/user/client/rpc/core/java/util/LinkedHashMap_CustomFieldSerializer.java:user/src/com/google/gwt/user/rebind:user/src/com/google/gwt/user/server:user/src/com/google/gwt/user/tools:user/super/com/google/gwt/benchmarks:user/super/com/google/gwt/junit
 
 ##############################################
 #excluded packages
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
index 84a5235..8aeb887 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiContainer.java
@@ -24,6 +24,7 @@
 import com.google.gwt.core.ext.typeinfo.NotFoundException;
 import com.google.gwt.core.ext.typeinfo.TypeOracle;
 import com.google.gwt.dev.javac.CompilationUnit;
+import com.google.gwt.dev.javac.CompilationUnitInvalidator;
 import com.google.gwt.dev.javac.JdtCompiler;
 import com.google.gwt.dev.javac.TypeOracleMediator;
 import com.google.gwt.dev.javac.impl.FileCompilationUnit;
@@ -171,11 +172,11 @@
    */
   public String getApiAsString() {
     StringBuffer sb = new StringBuffer();
-    sb.append("Api: " + name + "\n\n");
+    sb.append("Api: " + name + ", size = " + apiPackages.size() + "\n\n");
     List<ApiPackage> sortedApiPackages = new ArrayList<ApiPackage>(
         apiPackages.values());
     Collections.sort(sortedApiPackages);
-    for (ApiPackage apiPackage : apiPackages.values()) {
+    for (ApiPackage apiPackage : sortedApiPackages) {
       sb.append(apiPackage.getApiAsString());
     }
     return sb.toString();
@@ -204,7 +205,7 @@
   String getName() {
     return name;
   }
-  
+
   boolean isApiClass(JClassType classType) {
     Boolean ret = apiClassCache.get(classType);
     if (ret != null) {
@@ -269,8 +270,8 @@
         if (file.getName().endsWith("java")) {
           pkgName = extractPackageNameFromFile(file);
           if (pkgName == null) {
-            logger.log(TreeLogger.WARN, "Not adding file = "
-                + file.toString() + ", because packageName = null", null);
+            logger.log(TreeLogger.WARN, "Not adding file = " + file.toString()
+                + ", because packageName = null", null);
           } else {
             logger.log(TreeLogger.DEBUG, "adding pkgName = " + pkgName
                 + ", file = " + file.toString(), null);
@@ -332,12 +333,18 @@
   private TypeOracle createTypeOracleFromSources() throws NotFoundException,
       IOException, UnableToCompleteException {
     numFilesCount = 0;
-    TypeOracleMediator mediator = new TypeOracleMediator();
     Set<CompilationUnit> units = new HashSet<CompilationUnit>();
     for (File tempFile : sourceTrees) {
       addCompilationUnitsInPath(units, tempFile);
     }
     JdtCompiler.compile(units);
+    if (CompilationUnitInvalidator.invalidateUnitsWithErrors(logger, units)) {
+      logger.log(TreeLogger.ERROR, "Unable to build typeOracle for "
+          + getName());
+      throw new UnableToCompleteException();
+    }
+
+    TypeOracleMediator mediator = new TypeOracleMediator();
     mediator.refresh(logger, units);
     logger.log(TreeLogger.INFO, "API " + name
         + ", Finished with building typeOracle, added " + numFilesCount
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
index b67dbc5..99309c5 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackage.java
@@ -79,7 +79,7 @@
 
   String getApiAsString() {
     StringBuffer sb = new StringBuffer();
-    sb.append(name + "\n");
+    sb.append(name + ", size = " + apiClasses.size() + "\n");
     ArrayList<ApiClass> apiClassesList = new ArrayList<ApiClass>(
         apiClasses.values());
     Collections.sort(apiClassesList);