diff --git a/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java b/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
index eed88f9..b80127a 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsChecker.java
@@ -15,9 +15,6 @@
  */
 package com.google.gwt.dev.jdt;
 
-import org.eclipse.jdt.core.compiler.IProblem;
-import org.eclipse.jdt.internal.compiler.CompilationResult;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.Expression;
 import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation;
@@ -26,9 +23,6 @@
 import org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding;
 import org.eclipse.jdt.internal.compiler.lookup.BlockScope;
 import org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding;
-import org.eclipse.jdt.internal.compiler.problem.DefaultProblem;
-import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
-import org.eclipse.jdt.internal.compiler.util.Util;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -127,7 +121,7 @@
       String qualifiedTypeName = binaryTypeBinding.debugName();
       String error = formatBinaryTypeRefErrorMessage(qualifiedTypeName);
 
-      recordError(cud, binaryTypeReferenceSite.getExpression(), error);
+      Shared.recordError(binaryTypeReferenceSite.getExpression(), cud, error);
     }
   }
 
@@ -145,20 +139,6 @@
         + "; did you forget to inherit a required module?";
   }
 
-  static void recordError(CompilationUnitDeclaration cud, ASTNode node,
-      String error) {
-    CompilationResult compResult = cud.compilationResult();
-    int[] lineEnds = compResult.getLineSeparatorPositions();
-    int startLine = Util.getLineNumber(node.sourceStart(), lineEnds, 0,
-        lineEnds.length - 1);
-    int startColumn = Util.searchColumnNumber(lineEnds, startLine,
-        node.sourceStart());
-    DefaultProblem problem = new DefaultProblem(compResult.fileName, error,
-        IProblem.ExternalProblemNotFixable, null, ProblemSeverities.Error,
-        node.sourceStart(), node.sourceEnd(), startLine, startColumn);
-    compResult.record(problem, cud);
-  }
-
   private BinaryTypeReferenceRestrictionsChecker() {
     // Not instantiable
   }
diff --git a/dev/core/src/com/google/gwt/dev/jdt/Shared.java b/dev/core/src/com/google/gwt/dev/jdt/Shared.java
index b7de772..dc6187e 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/Shared.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/Shared.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006 Google Inc.
+ * Copyright 2008 Google Inc.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  * use this file except in compliance with the License. You may obtain a copy of
@@ -23,9 +23,16 @@
 import com.google.gwt.core.ext.typeinfo.JParameter;
 import com.google.gwt.core.ext.typeinfo.JType;
 
+import org.eclipse.jdt.core.compiler.IProblem;
+import org.eclipse.jdt.internal.compiler.CompilationResult;
+import org.eclipse.jdt.internal.compiler.ast.ASTNode;
+import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
 import org.eclipse.jdt.internal.compiler.lookup.FieldBinding;
 import org.eclipse.jdt.internal.compiler.lookup.MethodBinding;
 import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
+import org.eclipse.jdt.internal.compiler.problem.DefaultProblem;
+import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
+import org.eclipse.jdt.internal.compiler.util.Util;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -89,7 +96,7 @@
   }
 
   static String[] modifierBitsToNames(int bits) {
-    List strings = new ArrayList();
+    List<String> strings = new ArrayList<String>();
 
     // The order is based on the order in which we want them to appear.
     //
@@ -129,7 +136,20 @@
       strings.add("volatile");
     }
 
-    return (String[]) strings.toArray(NO_STRINGS);
+    return strings.toArray(NO_STRINGS);
   }
 
+  static void recordError(ASTNode node, CompilationUnitDeclaration cud,
+      String error) {
+    CompilationResult compResult = cud.compilationResult();
+    int[] lineEnds = compResult.getLineSeparatorPositions();
+    int startLine = Util.getLineNumber(node.sourceStart(), lineEnds, 0,
+        lineEnds.length - 1);
+    int startColumn = Util.searchColumnNumber(lineEnds, startLine,
+        node.sourceStart());
+    DefaultProblem problem = new DefaultProblem(compResult.fileName, error,
+        IProblem.ExternalProblemNotFixable, null, ProblemSeverities.Error,
+        node.sourceStart(), node.sourceEnd(), startLine, startColumn);
+    compResult.record(problem, cud);
+  }
 }
diff --git a/dev/core/test/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsCheckerTest.java b/dev/core/test/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsCheckerTest.java
index bfca795..5d60966 100644
--- a/dev/core/test/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsCheckerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jdt/BinaryTypeReferenceRestrictionsCheckerTest.java
@@ -19,7 +19,6 @@
 
 import junit.framework.TestCase;
 
-import org.eclipse.jdt.core.compiler.CategorizedProblem;
 import org.eclipse.jdt.internal.compiler.CompilationResult;
 import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.Annotation;
@@ -32,7 +31,6 @@
 import org.eclipse.jdt.internal.compiler.ast.Statement;
 import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.TypeReference;
-import org.eclipse.jdt.internal.compiler.ast.Wildcard;
 import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
 import org.eclipse.jdt.internal.compiler.env.IBinaryField;
 import org.eclipse.jdt.internal.compiler.env.IBinaryMethod;
@@ -217,24 +215,4 @@
     String actualMessage = BinaryTypeReferenceRestrictionsChecker.formatBinaryTypeRefErrorMessage("MyClass");
     assertEquals(expectedMessage, actualMessage);
   }
-
-  public void testRecordError() {
-    String fileName = "TestCompilationUnit.java";
-    String errorMessage = "Unit has errors";
-    CompilationResult compilationResult = new CompilationResult(
-        fileName.toCharArray(), 0, 0, 0);
-    CompilationUnitDeclaration cud = new CompilationUnitDeclaration(null,
-        compilationResult, 0);
-
-    // Pick an Expression subtype to pass in
-    BinaryTypeReferenceRestrictionsChecker.recordError(cud, new Wildcard(
-        Wildcard.EXTENDS), errorMessage);
-
-    CategorizedProblem[] errors = compilationResult.getErrors();
-    assertEquals(1, errors.length);
-    CategorizedProblem problem = errors[0];
-    assertTrue(problem.isError());
-    assertEquals(1, problem.getSourceLineNumber());
-    assertEquals(errorMessage, problem.getMessage());
-  }
 }
diff --git a/dev/core/test/com/google/gwt/dev/jdt/SharedTest.java b/dev/core/test/com/google/gwt/dev/jdt/SharedTest.java
new file mode 100644
index 0000000..1e64bda
--- /dev/null
+++ b/dev/core/test/com/google/gwt/dev/jdt/SharedTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2008 Google Inc.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.google.gwt.dev.jdt;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jdt.core.compiler.CategorizedProblem;
+import org.eclipse.jdt.internal.compiler.CompilationResult;
+import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration;
+import org.eclipse.jdt.internal.compiler.ast.Wildcard;
+
+/**
+ * 
+ */
+public class SharedTest extends TestCase {
+  public void testRecordError() {
+    String fileName = "TestCompilationUnit.java";
+    String errorMessage = "Unit has errors";
+    CompilationResult compilationResult = new CompilationResult(
+        fileName.toCharArray(), 0, 0, 0);
+    CompilationUnitDeclaration cud = new CompilationUnitDeclaration(null,
+        compilationResult, 0);
+
+    // Pick an Expression subtype to pass in
+    Shared.recordError(new Wildcard(Wildcard.EXTENDS), cud, errorMessage);
+
+    CategorizedProblem[] errors = compilationResult.getErrors();
+    assertEquals(1, errors.length);
+    CategorizedProblem problem = errors[0];
+    assertTrue(problem.isError());
+    assertEquals(1, problem.getSourceLineNumber());
+    assertEquals(errorMessage, problem.getMessage());
+  }
+}
