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);