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 9477a0b..ed607e0 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
@@ -224,16 +224,16 @@
   public void computeApiDiff() {
     HashSet<String> newFieldNames = newClass.getApiFieldNames();
     HashSet<String> oldFieldNames = oldClass.getApiFieldNames();
-    HashSet<String> intersection = ApiDiffGenerator.findCommonElements(
-        newFieldNames, oldFieldNames, className);
+    HashSet<String> intersection = ApiDiffGenerator.extractCommonElements(
+        newFieldNames, oldFieldNames);
     missingFields = oldClass.getApiFieldsBySet(oldFieldNames);
     processFieldsInIntersection(intersection);
 
     for (ApiClass.MethodType methodType : ApiClass.MethodType.values()) {
       HashSet<String> newMethodNames = newClass.getApiMemberNames(methodType);
       HashSet<String> oldMethodNames = oldClass.getApiMemberNames(methodType);
-      intersection = ApiDiffGenerator.findCommonElements(newMethodNames,
-          oldMethodNames, className);
+      intersection = ApiDiffGenerator.extractCommonElements(newMethodNames,
+          oldMethodNames);
       missingMethods.add(methodType.getId(),
           getAbstractMethodObjects(oldClass.getApiMembersBySet(oldMethodNames,
               methodType)));
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiDiffGenerator.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiDiffGenerator.java
index 3405fb4..d108370 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiDiffGenerator.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiDiffGenerator.java
@@ -33,8 +33,8 @@
   public static final String DELIMITER = " ";
 
   @SuppressWarnings("unchecked")
-  public static HashSet<String> findCommonElements(HashSet<String> s1,
-      HashSet<String> s2, String name) {
+  public static HashSet<String> extractCommonElements(HashSet<String> s1,
+      HashSet<String> s2) {
     HashSet<String> intersection = (HashSet<String>) s1.clone();
     intersection.retainAll(s2);
     s1.removeAll(intersection);
@@ -96,8 +96,8 @@
   public void computeApiDiff() throws NotFoundException {
     HashSet<String> newApiPackageNames = newApi.getApiPackageNames();
     missingPackageNames = oldApi.getApiPackageNames();
-    HashSet<String> intersection = findCommonElements(newApiPackageNames,
-        missingPackageNames, "ROOT");
+    HashSet<String> intersection = extractCommonElements(newApiPackageNames,
+        missingPackageNames);
     // Inspect each of the classes in each of the packages in the intersection
     Iterator<String> tempIterator = intersection.iterator();
     while (tempIterator.hasNext()) {
diff --git a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackageDiffGenerator.java b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackageDiffGenerator.java
index 4d43d08..964bcab 100644
--- a/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackageDiffGenerator.java
+++ b/tools/api-checker/src/com/google/gwt/tools/apichecker/ApiPackageDiffGenerator.java
@@ -57,8 +57,8 @@
   public void computeApiDiff() throws NotFoundException {
     HashSet<String> newClassNames = newPackage.getApiClassNames();
     missingClassNames = oldPackage.getApiClassNames();
-    HashSet<String> intersection = ApiDiffGenerator.findCommonElements(
-        newClassNames, missingClassNames, name);
+    HashSet<String> intersection = ApiDiffGenerator.extractCommonElements(
+        newClassNames, missingClassNames);
 
     /* Inspect each of the classes in each of the packages in the intersection */
     Iterator<String> tempIterator = intersection.iterator();
diff --git a/tools/api-checker/test/com/google/gwt/tools/apichecker/ApiContainerTest.java b/tools/api-checker/test/com/google/gwt/tools/apichecker/ApiContainerTest.java
index 5b02e02..d3dc300 100644
--- a/tools/api-checker/test/com/google/gwt/tools/apichecker/ApiContainerTest.java
+++ b/tools/api-checker/test/com/google/gwt/tools/apichecker/ApiContainerTest.java
@@ -31,6 +31,7 @@
  * Test ApiContainer.
  */
 public class ApiContainerTest extends TestCase {
+  @SuppressWarnings("unused")
   class TestA {
     public TestA(String args) {
     }
