diff --git a/user/test/com/google/gwt/precompress/linker/PrecompressLinkerTest.java b/user/test/com/google/gwt/precompress/linker/PrecompressLinkerTest.java
index f4f435c..2c96f21 100644
--- a/user/test/com/google/gwt/precompress/linker/PrecompressLinkerTest.java
+++ b/user/test/com/google/gwt/precompress/linker/PrecompressLinkerTest.java
@@ -54,28 +54,23 @@
       this.hasMultipleValues = hasMultipleValues;
     }
 
-    @Override
     public int compareTo(MockConfigurationProperty o) {
       return getName().compareTo(o.getName());
     }
 
-    @Override
     public String getName() {
       return name;
     }
 
-    @Override
     @Deprecated
     public String getValue() {
       return values.get(0);
     }
 
-    @Override
     public List<String> getValues() {
       return values;
     }
 
-    @Override
     public boolean hasMultipleValues() {
       return hasMultipleValues;
     }
@@ -87,38 +82,31 @@
   }
 
   private class MockLinkerContext implements LinkerContext {
-    @Override
     public SortedSet<ConfigurationProperty> getConfigurationProperties() {
       return new TreeSet<ConfigurationProperty>(Arrays.asList(
           propLeaveOriginals, propPathRegexes));
     }
 
-    @Override
     public String getModuleFunctionName() {
       return "MockModule";
     }
 
-    @Override
     public long getModuleLastModified() {
       return 0;
     }
 
-    @Override
     public String getModuleName() {
       return "MockModule";
     }
 
-    @Override
     public SortedSet<SelectionProperty> getProperties() {
       return new TreeSet<SelectionProperty>();
     }
 
-    @Override
     public boolean isOutputCompact() {
       return true;
     }
 
-    @Override
     public String optimizeJavaScript(TreeLogger logger, String jsProgram) {
       return jsProgram;
     }
diff --git a/user/test/com/google/gwt/user/rebind/rpc/BlacklistTypeFilterTest.java b/user/test/com/google/gwt/user/rebind/rpc/BlacklistTypeFilterTest.java
index 80c54cd..56197d1 100644
--- a/user/test/com/google/gwt/user/rebind/rpc/BlacklistTypeFilterTest.java
+++ b/user/test/com/google/gwt/user/rebind/rpc/BlacklistTypeFilterTest.java
@@ -50,19 +50,16 @@
       this.name = name;
     }
 
-    @Override
     public String getName() {
       return name;
     }
 
-    @Override
     public List<String> getValues() {
       return values;
     }
   }
 
   private class MockPropertyOracle implements PropertyOracle {
-    @Override
     public ConfigurationProperty getConfigurationProperty(String propertyName)
         throws BadPropertyValueException {
       if (propertyName.equals(propRpcBlacklist.getName())) {
@@ -71,14 +68,12 @@
       throw new BadPropertyValueException("No property named " + propertyName);
     }
 
-    @Override
     @Deprecated
     public String getPropertyValue(TreeLogger logger, String propertyName)
         throws BadPropertyValueException {
       return getConfigurationProperty(propertyName).getValues().get(0);
     }
 
-    @Override
     @Deprecated
     public String[] getPropertyValueSet(TreeLogger logger, String propertyName)
         throws BadPropertyValueException {
@@ -86,7 +81,6 @@
           new String[0]);
     }
 
-    @Override
     public SelectionProperty getSelectionProperty(TreeLogger logger,
         String propertyName) throws BadPropertyValueException {
       throw new BadPropertyValueException("No property named " + propertyName);
