Moved the checkExceptions method so that instead of a static method, it becomes
an instance method of ApiAbstractMethod class.
Review by: scottb (TBR)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@3373 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiAbstractMethod.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiAbstractMethod.java
index 7089ef5..6164817 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiAbstractMethod.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiAbstractMethod.java
@@ -19,7 +19,10 @@
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JParameter;
import com.google.gwt.core.ext.typeinfo.JType;
+import com.google.gwt.core.ext.typeinfo.TypeOracle;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -142,6 +145,39 @@
return computeApiSignature(method);
}
+ List<ApiChange> checkExceptions(ApiAbstractMethod newMethod) {
+ ArrayList<JType> legalTypes = new ArrayList<JType>();
+
+ // A throw declaration for an unchecked exception does not change the API.
+ TypeOracle newTypeOracle = newMethod.getMethod().getEnclosingType().getOracle();
+ JClassType errorType = newTypeOracle.findType(Error.class.getName());
+ if (errorType != null) {
+ legalTypes.add(errorType);
+ }
+ JClassType rteType = newTypeOracle.findType(RuntimeException.class.getName());
+ if (rteType != null) {
+ legalTypes.add(rteType);
+ }
+
+ legalTypes.addAll(Arrays.asList(getMethod().getThrows()));
+ List<ApiChange> ret = new ArrayList<ApiChange>();
+ for (JType newException : newMethod.getMethod().getThrows()) {
+ boolean isSubclass = false;
+ for (JType legalType : legalTypes) {
+ if (ApiDiffGenerator.isFirstTypeAssignableToSecond(newException,
+ legalType)) {
+ isSubclass = true;
+ break;
+ }
+ }
+ if (!isSubclass) {
+ ret.add(new ApiChange(this, ApiChange.Status.EXCEPTION_TYPE_ERROR,
+ "unhandled exception in new code " + newException));
+ }
+ }
+ return ret;
+ }
+
abstract ApiChange checkReturnTypeCompatibility(ApiAbstractMethod newMethod);
String getApiSignature() {
@@ -172,7 +208,7 @@
*
*/
abstract List<ApiChange.Status> getModifierChanges(ApiAbstractMethod newMethod);
-
+
private String computeRelativeSignature() {
String signature = computeInternalSignature(method);
if (ApiCompatibilityChecker.DEBUG) {
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiClassDiffGenerator.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiClassDiffGenerator.java
index 2eb26e5..334e134 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiClassDiffGenerator.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiClassDiffGenerator.java
@@ -17,12 +17,9 @@
package com.google.gwt.tools.apichecker;
import com.google.gwt.core.ext.typeinfo.JClassType;
-import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.NotFoundException;
-import com.google.gwt.core.ext.typeinfo.TypeOracle;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumMap;
@@ -49,42 +46,7 @@
sb.append("\n");
return sb.toString();
}
-
- private static List<ApiChange> checkExceptions(ApiAbstractMethod newMethod,
- ApiAbstractMethod oldMethod) {
-
- ArrayList<JType> legalTypes = new ArrayList<JType>();
-
- // A throw declaration for an unchecked exception does not change the API.
- TypeOracle newTypeOracle = newMethod.getMethod().getEnclosingType().getOracle();
- JClassType errorType = newTypeOracle.findType(Error.class.getName());
- if (errorType != null) {
- legalTypes.add(errorType);
- }
- JClassType rteType = newTypeOracle.findType(RuntimeException.class.getName());
- if (rteType != null) {
- legalTypes.add(rteType);
- }
-
- legalTypes.addAll(Arrays.asList(oldMethod.getMethod().getThrows()));
- List<ApiChange> ret = new ArrayList<ApiChange>();
- for (JType newException : newMethod.getMethod().getThrows()) {
- boolean isSubclass = false;
- for (JType legalType : legalTypes) {
- if (ApiDiffGenerator.isFirstTypeAssignableToSecond(newException,
- legalType)) {
- isSubclass = true;
- break;
- }
- }
- if (!isSubclass) {
- ret.add(new ApiChange(oldMethod, ApiChange.Status.EXCEPTION_TYPE_ERROR,
- "unhandled exception in new code " + newException));
- }
- }
- return ret;
- }
-
+
private Set<ApiField> allIntersectingFields = new HashSet<ApiField>();
/**
* Find all constructors, methods, fields that are present in either
@@ -380,8 +342,7 @@
if (returnType != null) {
addProperty(intersectingElements, methodInExisting, returnType);
}
- for (ApiChange apiChange : checkExceptions(methodInNew,
- methodInExisting)) {
+ for (ApiChange apiChange : methodInExisting.checkExceptions(methodInNew)) {
addProperty(intersectingElements, methodInExisting, apiChange);
}
for (ApiChange.Status status : methodInExisting.getModifierChanges(methodInNew)) {