diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldDetailsActivities.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldDetailsActivities.java
index b2add58..b24e264 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldDetailsActivities.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ScaffoldDetailsActivities.java
@@ -46,10 +46,12 @@
 
   public Activity getActivity(ScaffoldPlace place) {
     return place.acceptFilter(new BaseScaffoldPlaceFilter<Activity>(null) {
+      @Override
       public Activity filter(EmployeeScaffoldPlace place) {
         return employeeActivities.getActivity(place);
       }
 
+      @Override
       public Activity filter(ReportScaffoldPlace place) {
         return reportActivities.getActivity(place);
       }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
index 1040a72..6cb007c 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeDetailsActivity.java
@@ -98,10 +98,12 @@
         Operation.EDIT));
   }
 
+  @Override
   public void onCancel() {
     onStop();
   }
-
+  
+  @Override
   public void onStop() {
     display = null;
   }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
index 118afe7..a69c594 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditActivity.java
@@ -79,6 +79,7 @@
     return EmployeeRecord.class;
   }
 
+  @Override
   protected void setRequestObject(EmployeeRecord record) {
     requestObject = requests.employeeRequest().persist(record);
   }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
index 42650f3..ab7061d 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeListActivity.java
@@ -81,6 +81,7 @@
     registration.removeHandler();
   }
 
+  @Override
   public void showDetails(EmployeeRecord record) {
     placeController.goTo(new EmployeeScaffoldPlace(record, Operation.DETAILS));
   }
@@ -96,6 +97,7 @@
     super.start(display);
   }
 
+  @Override
   protected RecordListRequest<EmployeeRecord> createRangeRequest(Range range) {
     return requests.employeeRequest().findEmployeeEntries(range.getStart(),
         range.getLength());
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
index 9e761e2..a7c1163 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsActivity.java
@@ -98,10 +98,12 @@
         Operation.EDIT));
   }
 
+  @Override
   public void onCancel() {
     onStop();
   }
 
+  @Override
   public void onStop() {
     display = null;
   }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
index 0e12ef8..8099282 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditActivity.java
@@ -63,6 +63,7 @@
     this.placeController = placeController;
   }
 
+  @Override
   protected void exit() {
     placeController.goTo(new ReportScaffoldPlace(getId(), Operation.DETAILS));
   }
@@ -72,12 +73,13 @@
       Receiver<ReportRecord> callback) {
     requests.reportRequest().findReport(id).fire(callback);
   }
-  
+
   @Override
   protected Class getRecordClass() {
     return ReportRecord.class;
   }
 
+  @Override
   protected void setRequestObject(ReportRecord record) {
     requestObject = requests.reportRequest().persist(record);
   }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
index 37e857b..c3a0d1e 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportListActivity.java
@@ -81,6 +81,7 @@
     registration.removeHandler();
   }
 
+  @Override
   public void showDetails(ReportRecord record) {
     placeController.goTo(new ReportScaffoldPlace(record, Operation.DETAILS));
   }
@@ -95,6 +96,7 @@
     super.start(display);
   }
 
+  @Override
   protected RecordListRequest<ReportRecord> createRangeRequest(Range range) {
     return requests.reportRequest().findReportEntries(range.getStart(),
         range.getLength());
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/server/AppCacheWarmer.java b/bikeshed/src/com/google/gwt/sample/expenses/server/AppCacheWarmer.java
index fbd9666..9b59ba0 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/server/AppCacheWarmer.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/server/AppCacheWarmer.java
@@ -145,6 +145,7 @@
       this.parameters = parameters;
     }
 
+    @Override
     public String toString() {
       String returnStr = "[" + operation;
       returnStr += "{";
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Employee.java b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Employee.java
index 9b2b61a..28b2cdf 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Employee.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Employee.java
@@ -213,6 +213,7 @@
     this.version = version;
   }
 
+  @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append("Id: ").append(getId()).append(", ");
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Expense.java b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Expense.java
index ae51ed8..d0034a0 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Expense.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Expense.java
@@ -206,6 +206,7 @@
     this.version = version;
   }
 
+  @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append("Id: ").append(getId()).append(", ");
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/GaeUserInformation.java b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/GaeUserInformation.java
index c1d5362..f9d78e1 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/GaeUserInformation.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/GaeUserInformation.java
@@ -36,6 +36,7 @@
     super(redirectUrl);
   }
   
+  @Override
   public String getEmail() {
     User user = userService.getCurrentUser();
     if (user == null) {
@@ -44,6 +45,7 @@
     return user.getEmail();
   }
 
+  @Override
   public Long getId() {
     User user = userService.getCurrentUser();
     if (user == null) {
@@ -52,14 +54,17 @@
     return new Long(user.hashCode());
   }
   
+  @Override
   public String getLoginUrl() {
     return userService.createLoginURL(redirectUrl);
   }
   
+  @Override
   public String getLogoutUrl() {
     return userService.createLogoutURL(redirectUrl);
   }
   
+  @Override
   public String getName() {
     User user = userService.getCurrentUser();
     if (user == null) {
@@ -68,6 +73,7 @@
     return user.getNickname();
   }
   
+  @Override
   public boolean isUserLoggedIn() {
     return userService.isUserLoggedIn();
   }
@@ -76,6 +82,7 @@
    * Does nothing since in GAE authentication, the unique ID is provided by
    * the user service and is based on a hash in the User object.
    */
+  @Override
   public void setId(Long id) {
     // Do nothing
   }
diff --git a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Report.java b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Report.java
index 7314071..7d7378d 100644
--- a/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Report.java
+++ b/bikeshed/src/com/google/gwt/sample/expenses/server/domain/Report.java
@@ -453,6 +453,7 @@
     this.version = version;
   }
 
+  @Override
   public String toString() {
     StringBuilder sb = new StringBuilder();
     sb.append("Id: ").append(getId()).append(", ");
diff --git a/dev/core/src/com/google/gwt/core/ext/TreeLogger.java b/dev/core/src/com/google/gwt/core/ext/TreeLogger.java
index e934823..a57463f 100644
--- a/dev/core/src/com/google/gwt/core/ext/TreeLogger.java
+++ b/dev/core/src/com/google/gwt/core/ext/TreeLogger.java
@@ -192,6 +192,7 @@
       return this;
     }
 
+    @Override
     public boolean isLoggable(Type type) {
       return false;
     }
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
index 5f1a3b4..714aca2 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
@@ -47,6 +47,7 @@
     return enclosingType;
   }
 
+  @Override
   public String getJsniSignature() {
     StringBuilder sb = new StringBuilder("@");
     sb.append(getEnclosingType().getQualifiedSourceName());
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JField.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JField.java
index 943ca7f..6d44e73 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JField.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JField.java
@@ -136,6 +136,7 @@
     this.type = type;
   }
 
+  @Override
   public String toString() {
     String[] names = TypeOracle.modifierBitsToNames(modifierBits);
     StringBuffer sb = new StringBuffer();
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
index 28d3624..387fd74 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
@@ -50,6 +50,7 @@
     return enclosingType;
   }
 
+  @Override
   public String getJsniSignature() {
     StringBuilder sb = new StringBuilder("@");
     sb.append(getEnclosingType().getQualifiedSourceName());
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionAll.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionAll.java
index c53ac97..d0f1964 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionAll.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionAll.java
@@ -29,6 +29,7 @@
   public ConditionAll() {
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query)
       throws UnableToCompleteException {
     for (Iterator<Condition> iter = getConditions().iterator(); iter.hasNext();) {
@@ -40,6 +41,7 @@
     return true;
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes: All subconditions were true";
@@ -48,6 +50,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return "Checking if all subconditions are true (<all>)";
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionAny.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionAny.java
index 2f474c2..8b260ac 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionAny.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionAny.java
@@ -28,6 +28,7 @@
   public ConditionAny() {
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query)
       throws UnableToCompleteException {
     for (Iterator<Condition> iter = getConditions().iterator(); iter.hasNext();) {
@@ -39,6 +40,7 @@
     return false;
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes: One or more subconditions was true";
@@ -47,6 +49,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return "Checking if any subcondition is true (<any>)";
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionNone.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionNone.java
index 3e1b959..dfbb0b4 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionNone.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionNone.java
@@ -29,6 +29,7 @@
   public ConditionNone() {
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query)
       throws UnableToCompleteException {
     for (Iterator<Condition> iter = getConditions().iterator(); iter.hasNext();) {
@@ -40,6 +41,7 @@
     return true;
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes: All subconditions were false";
@@ -48,6 +50,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return "Checking if all subconditions are false (<none>)";
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
index 2148fcd..a03daf9 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenPropertyIs.java
@@ -45,10 +45,12 @@
     return Sets.create(propName);
   }
 
+  @Override
   public String toString() {
     return "<when-property-is name='" + propName + "' value='" + value + "'/>";
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query)
       throws UnableToCompleteException {
     PropertyOracle propertyOracle = query.getPropertyOracle();
@@ -76,6 +78,7 @@
     }
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes, the property value matched";
@@ -84,6 +87,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return toString();
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeAssignableTo.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeAssignableTo.java
index 6bf00b9..116f806 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeAssignableTo.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeAssignableTo.java
@@ -37,10 +37,12 @@
     return assignableToTypeName;
   }
 
+  @Override
   public String toString() {
     return "<when-assignable class='" + assignableToTypeName + "'/>";
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query)
       throws UnableToCompleteException {
     TypeOracle typeOracle = query.getTypeOracle();
@@ -69,6 +71,7 @@
     }
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes, the requested type was assignable";
@@ -77,6 +80,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return toString();
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeIs.java b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeIs.java
index 495b5fc..2e89d36 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeIs.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/ConditionWhenTypeIs.java
@@ -29,14 +29,17 @@
     this.exactTypeName = exactTypeName;
   }
 
+  @Override
   public String toString() {
     return "<when-type-is class='" + exactTypeName + "'/>";
   }
 
+  @Override
   protected boolean doEval(TreeLogger logger, DeferredBindingQuery query) {
     return exactTypeName.equals(query.getTestType());
   }
 
+  @Override
   protected String getEvalAfterMessage(String testType, boolean result) {
     if (result) {
       return "Yes, the requested type was an exact match";
@@ -45,6 +48,7 @@
     }
   }
 
+  @Override
   protected String getEvalBeforeMessage(String testType) {
     return toString();
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java b/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java
index 8b458c2..87636ee 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/RuleFail.java
@@ -24,6 +24,7 @@
  */
 public class RuleFail extends Rule {
 
+  @Override
   public String realize(TreeLogger logger, StandardGeneratorContext context,
       String typeName) throws UnableToCompleteException {
     logger.log(TreeLogger.ERROR, "Deferred binding request failed for type '"
@@ -31,8 +32,8 @@
     throw new UnableToCompleteException();
   }
 
+  @Override
   public String toString() {
     return "<fail>";
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
index 0b6d1ee..f2b4d57 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/RuleGenerateWith.java
@@ -33,11 +33,13 @@
     this.generatorClass = generatorClass;
   }
 
+  @Override
   public String realize(TreeLogger logger, StandardGeneratorContext context,
       String typeName) throws UnableToCompleteException {
     return context.runGenerator(logger, generatorClass, typeName);
   }
 
+  @Override
   public String toString() {
     return "<generate-with class='" + generatorClass.getName() + "'/>";
   }
diff --git a/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java b/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java
index 3fdb360..02766a4 100644
--- a/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java
+++ b/dev/core/src/com/google/gwt/dev/cfg/RuleReplaceWith.java
@@ -34,11 +34,13 @@
     return replacementTypeName;
   }
 
+  @Override
   public String realize(TreeLogger logger, StandardGeneratorContext context,
       String typeName) throws UnableToCompleteException {
     return replacementTypeName;
   }
 
+  @Override
   public String toString() {
     return "<replace-with class='" + replacementTypeName + "'/>";
   }
diff --git a/dev/core/src/com/google/gwt/dev/generator/ast/BaseNode.java b/dev/core/src/com/google/gwt/dev/generator/ast/BaseNode.java
index 7c60eda..becb2e2 100644
--- a/dev/core/src/com/google/gwt/dev/generator/ast/BaseNode.java
+++ b/dev/core/src/com/google/gwt/dev/generator/ast/BaseNode.java
@@ -22,6 +22,7 @@
 
   public abstract String toCode();
 
+  @Override
   public String toString() {
     return toCode();
   }
diff --git a/dev/core/src/com/google/gwt/dev/generator/ast/Expression.java b/dev/core/src/com/google/gwt/dev/generator/ast/Expression.java
index 9c6be9f..b6dd3d3 100644
--- a/dev/core/src/com/google/gwt/dev/generator/ast/Expression.java
+++ b/dev/core/src/com/google/gwt/dev/generator/ast/Expression.java
@@ -35,6 +35,7 @@
     this.code = code;
   }
 
+  @Override
   public String toCode() {
     return code;
   }
diff --git a/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java b/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
index bab3cfc..6156334 100644
--- a/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
+++ b/dev/core/src/com/google/gwt/dev/javac/JsniChecker.java
@@ -100,15 +100,18 @@
       suppressWarningsStack.pop();
     }
 
+    @Override
     public void endVisit(TypeDeclaration typeDeclaration, ClassScope scope) {
       suppressWarningsStack.pop();
     }
 
+    @Override
     public void endVisit(TypeDeclaration typeDeclaration,
         CompilationUnitScope scope) {
       suppressWarningsStack.pop();
     }
 
+    @Override
     public void endVisitValid(TypeDeclaration typeDeclaration, BlockScope scope) {
       suppressWarningsStack.pop();
     }
@@ -125,12 +128,14 @@
       return true;
     }
 
+    @Override
     public boolean visit(TypeDeclaration typeDeclaration,
         CompilationUnitScope scope) {
       suppressWarningsStack.push(getSuppressedWarnings(typeDeclaration.annotations));
       return true;
     }
 
+    @Override
     public boolean visitValid(TypeDeclaration typeDeclaration, BlockScope scope) {
       suppressWarningsStack.push(getSuppressedWarnings(typeDeclaration.annotations));
       return true;
diff --git a/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java b/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
index 2cf676c..aa07aed 100644
--- a/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
+++ b/dev/core/src/com/google/gwt/dev/javac/StandardGeneratorContext.java
@@ -152,6 +152,7 @@
       this.file = file;
     }
 
+    @Override
     public void commit() {
       super.commit();
       FileOutputStream fos = null;
@@ -166,6 +167,7 @@
       }
     }
 
+    @Override
     public String optionalFileLocation() {
       return file.getAbsolutePath();
     }
@@ -197,6 +199,7 @@
       return result;
     }
 
+    @Override
     public void write(byte[] b) throws IOException {
       if (baos == null) {
         throw new IOException("stream closed");
@@ -204,6 +207,7 @@
       baos.write(b);
     }
 
+    @Override
     public void write(byte[] b, int off, int len) throws IOException {
       if (baos == null) {
         throw new IOException("stream closed");
@@ -211,6 +215,7 @@
       baos.write(b, off, len);
     }
 
+    @Override
     public void write(int b) throws IOException {
       if (baos == null) {
         throw new IOException("stream closed");
diff --git a/dev/core/src/com/google/gwt/dev/jdt/FindJsniRefVisitor.java b/dev/core/src/com/google/gwt/dev/jdt/FindJsniRefVisitor.java
index 47dbf41..3e4e654 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/FindJsniRefVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/FindJsniRefVisitor.java
@@ -51,6 +51,7 @@
     return Collections.unmodifiableSet(jsniRefs);
   }
 
+  @Override
   public boolean visit(MethodDeclaration methodDeclaration, ClassScope scope) {
     if (!methodDeclaration.isNative()) {
       return false;
@@ -94,6 +95,7 @@
       List<JsStatement> result = JsParser.parse(SourceOrigin.UNKNOWN,
           jsProgram.getScope(), sr);
       new JsVisitor() {
+        @Override
         public void endVisit(JsNameRef x, JsContext<JsExpression> ctx) {
           String ident = x.getIdent();
           if (ident.charAt(0) == '@') {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
index 3890392..96af818 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JArrayType.java
@@ -56,6 +56,7 @@
     return elementType;
   }
 
+  @Override
   public String getJavahSignatureName() {
     String s = leafType.getJavahSignatureName();
     for (int i = 0; i < dims; ++i) {
@@ -64,6 +65,7 @@
     return s;
   }
 
+  @Override
   public String getJsniSignatureName() {
     String s = leafType.getJsniSignatureName();
     for (int i = 0; i < dims; ++i) {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JBooleanLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JBooleanLiteral.java
index f87ccf9..ed86fbb 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JBooleanLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JBooleanLiteral.java
@@ -53,6 +53,7 @@
     return value;
   }
 
+  @Override
   public Object getValueObj() {
     return Boolean.valueOf(value);
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JDoubleLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JDoubleLiteral.java
index 6519cf2..6d49b1c 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JDoubleLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JDoubleLiteral.java
@@ -67,6 +67,7 @@
     return value;
   }
 
+  @Override
   public Object getValueObj() {
     return new Double(value);
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JFloatLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JFloatLiteral.java
index a60f1aa..1131c1b 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JFloatLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JFloatLiteral.java
@@ -67,6 +67,7 @@
     return value;
   }
 
+  @Override
   public Object getValueObj() {
     return new Float(value);
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JModVisitor.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JModVisitor.java
index 9452e33..6096d46 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JModVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JModVisitor.java
@@ -318,6 +318,7 @@
     }
   }
 
+  @Override
   public JExpression acceptLvalue(JExpression expr) {
     LvalueContext ctx = new LvalueContext();
     try {
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JNode.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JNode.java
index 152b39b..bc8d2c4 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JNode.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JNode.java
@@ -48,6 +48,7 @@
   }
 
   // Causes source generation to delegate to the one visitor
+  @Override
   public final String toString() {
     DefaultTextOutput out = new DefaultTextOutput(false);
     ToStringGenerationVisitor v = new ToStringGenerationVisitor(out);
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JNullLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JNullLiteral.java
index 501b053..07f1526 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JNullLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JNullLiteral.java
@@ -40,6 +40,7 @@
     return JNullType.INSTANCE;
   }
 
+  @Override
   public Object getValueObj() {
     return null;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JPostfixOperation.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JPostfixOperation.java
index 4a0955e..b33fa42 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JPostfixOperation.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JPostfixOperation.java
@@ -26,11 +26,11 @@
     super(info, op, arg);
   }
 
+  @Override
   public void traverse(JVisitor visitor, Context ctx) {
     if (visitor.visit(this, ctx)) {
       super.traverse(visitor, ctx);
     }
     visitor.endVisit(this, ctx);
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrefixOperation.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrefixOperation.java
index ecb7719..40185ab 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrefixOperation.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrefixOperation.java
@@ -26,11 +26,11 @@
     super(info, op, arg);
   }
 
+  @Override
   public void traverse(JVisitor visitor, Context ctx) {
     if (visitor.visit(this, ctx)) {
       super.traverse(visitor, ctx);
     }
     visitor.endVisit(this, ctx);
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
index bc97551..432764e 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JPrimitiveType.java
@@ -86,10 +86,12 @@
     return "Class.createForPrimitive";
   }
 
+  @Override
   public String getJavahSignatureName() {
     return signatureName;
   }
 
+  @Override
   public String getJsniSignatureName() {
     return signatureName;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
index 984ff0a..894b765 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java
@@ -47,6 +47,7 @@
     return value;
   }
 
+  @Override
   public Object getValueObj() {
     return value;
   }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/JUnaryOperator.java b/dev/core/src/com/google/gwt/dev/jjs/ast/JUnaryOperator.java
index 49b865a..8e36fc1 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/JUnaryOperator.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/JUnaryOperator.java
@@ -36,8 +36,8 @@
     return this == INC || this == DEC;
   }
 
+  @Override
   public String toString() {
     return new String(getSymbol());
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniMethodRef.java b/dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniMethodRef.java
index ab004da..ef11525 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniMethodRef.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniMethodRef.java
@@ -54,6 +54,7 @@
     return false;
   }
 
+  @Override
   public void traverse(JVisitor visitor, Context ctx) {
     if (visitor.visit(this, ctx)) {
     }
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/AssertionNormalizer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/AssertionNormalizer.java
index c354397..3e0e241 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/AssertionNormalizer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/AssertionNormalizer.java
@@ -41,6 +41,7 @@
    */
   private class AssertNormalizeVisitor extends JModVisitor {
 
+    @Override
     public void endVisit(JAssertStatement x, Context ctx) {
       JExpression lhs = x.getTestExpr();
       String methodName = "Exceptions.throwAssertionError"
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index b195458..e1d1910 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -1343,6 +1343,7 @@
          */
         private JsNameRef dontReplaceCtor;
 
+        @Override
         public void endVisit(JsInvocation x, JsContext<JsExpression> ctx) {
           // Replace invocation to ctor with a new op.
           if (x.getQualifier() instanceof JsNameRef) {
@@ -1424,6 +1425,7 @@
           }
         }
 
+        @Override
         public boolean visit(JsInvocation x, JsContext<JsExpression> ctx) {
           if (x.getQualifier() instanceof JsNameRef) {
             dontReplaceCtor = (JsNameRef) x.getQualifier();
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JsFunctionClusterer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JsFunctionClusterer.java
index 4bdaff8..8f86eec 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JsFunctionClusterer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JsFunctionClusterer.java
@@ -55,6 +55,7 @@
     super(js, statementRanges);
   }
 
+  @Override
   public void exec() {
     functionIndices = new LinkedList<Integer>();
 
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JsIEBlockTextTransformer.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JsIEBlockTextTransformer.java
index 1088cff..fd29391 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JsIEBlockTextTransformer.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JsIEBlockTextTransformer.java
@@ -44,6 +44,7 @@
   /**
    * Do not perform clustering, only fix up IE7 block issue.
    */
+  @Override
   public void exec() {
     doSplits = statementRanges.numStatements() > MAX_BLOCK_SIZE;
     if (doSplits) {
@@ -58,6 +59,7 @@
   /**
    * Record start of statement, and optionally inject new open block.
    */
+  @Override
   protected void beginStatement(StringBuilder newJs,
       ArrayList<Integer> starts) {
     if (doSplits && currentStatementCount == 0) {
@@ -79,6 +81,7 @@
    * Record end of statement, and optionally inject close block, if block is
    * full.
    */
+  @Override
   protected void endStatement(StringBuilder newJs, ArrayList<Integer> ends) {
     currentStatementCount++;
     if (doSplits && currentStatementCount == MAX_BLOCK_SIZE) {
diff --git a/dev/core/src/com/google/gwt/dev/js/JsConstructExpressionVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsConstructExpressionVisitor.java
index d31b1d2..5cd7e73 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsConstructExpressionVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsConstructExpressionVisitor.java
@@ -106,6 +106,7 @@
    * We only look at nodes that would not normally be surrounded by parentheses.
    */
   @SuppressWarnings("cast")
+    @Override
   protected <T extends JsVisitable<T>> T doAccept(T node) {
     /*
      * Extra casts to Object to prevent 'inconvertible types' compile errors due
diff --git a/dev/core/src/com/google/gwt/dev/js/JsFirstExpressionVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsFirstExpressionVisitor.java
index 683fcc6..04e6860 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsFirstExpressionVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsFirstExpressionVisitor.java
@@ -73,35 +73,42 @@
   private JsFirstExpressionVisitor() {
   }
 
+  @Override
   public boolean visit(JsArrayAccess x, JsContext<JsExpression> ctx) {
     accept(x.getArrayExpr());
     return false;
   }
 
+  @Override
   public boolean visit(JsArrayLiteral x, JsContext<JsExpression> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsBinaryOperation x, JsContext<JsExpression> ctx) {
     accept(x.getArg1());
     return false;
   }
 
+  @Override
   public boolean visit(JsConditional x, JsContext<JsExpression> ctx) {
     accept(x.getTestExpression());
     return false;
   }
 
+  @Override
   public boolean visit(JsFunction x, JsContext<JsExpression> ctx) {
     needsParentheses = true;
     return false;
   }
 
+  @Override
   public boolean visit(JsInvocation x, JsContext<JsExpression> ctx) {
     accept(x.getQualifier());
     return false;
   }
 
+  @Override
   public boolean visit(JsNameRef x, JsContext<JsExpression> ctx) {
     if (!x.isLeaf()) {
       accept(x.getQualifier());
@@ -109,26 +116,30 @@
     return false;
   }
 
+  @Override
   public boolean visit(JsNew x, JsContext<JsExpression> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsObjectLiteral x, JsContext<JsExpression> ctx) {
     needsParentheses = true;
     return false;
   }
 
+  @Override
   public boolean visit(JsPostfixOperation x, JsContext<JsExpression> ctx) {
     accept(x.getArg());
     return false;
   }
 
+  @Override
   public boolean visit(JsPrefixOperation x, JsContext<JsExpression> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsRegExp x, JsContext<JsExpression> ctx) {
     return false;
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/js/JsHoister.java b/dev/core/src/com/google/gwt/dev/js/JsHoister.java
index 9666276..28cefe8 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsHoister.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsHoister.java
@@ -130,6 +130,7 @@
       stack.push(toReturn);
     }
 
+    @Override
     public void endVisit(JsNameOf x, JsContext<JsExpression> ctx) {
       JsNameOf toReturn = new JsNameOf(x.getSourceInfo(), x.getName());
       stack.push(toReturn);
diff --git a/dev/core/src/com/google/gwt/dev/js/JsRequiresSemiVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsRequiresSemiVisitor.java
index 2ae8d24..4db0c3c 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsRequiresSemiVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsRequiresSemiVisitor.java
@@ -63,30 +63,37 @@
   private JsRequiresSemiVisitor() {
   }
 
+  @Override
   public boolean visit(JsBlock x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsBreak x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsDebugger x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsDoWhile x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsEmpty x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsExprStmt x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsFor x, JsContext<JsStatement> ctx) {
     if (x.getBody() instanceof JsEmpty) {
       needsSemicolon = true;
@@ -94,6 +101,7 @@
     return false;
   }
 
+  @Override
   public boolean visit(JsForIn x, JsContext<JsStatement> ctx) {
     if (x.getBody() instanceof JsEmpty) {
       needsSemicolon = true;
@@ -101,6 +109,7 @@
     return false;
   }
 
+  @Override
   public boolean visit(JsIf x, JsContext<JsStatement> ctx) {
     JsStatement thenStmt = x.getThenStmt();
     JsStatement elseStmt = x.getElseStmt();
@@ -117,6 +126,7 @@
     return false;
   }
 
+  @Override
   public boolean visit(JsLabel x, JsContext<JsStatement> ctx) {
     if (x.getStmt() instanceof JsEmpty) {
       needsSemicolon = true;
@@ -124,26 +134,32 @@
     return false;
   }
 
+  @Override
   public boolean visit(JsReturn x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsSwitch x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsThrow x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsTry x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsVars x, JsContext<JsStatement> ctx) {
     return false;
   }
 
+  @Override
   public boolean visit(JsWhile x, JsContext<JsStatement> ctx) {
     if (x.getBody() instanceof JsEmpty) {
       needsSemicolon = true;
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsArrayLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsArrayLiteral.java
index 8bcaeb9..6e32762 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsArrayLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsArrayLiteral.java
@@ -53,10 +53,12 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsBooleanLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsBooleanLiteral.java
index 06d6a0f..51a613d 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsBooleanLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsBooleanLiteral.java
@@ -42,10 +42,12 @@
     return value == true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsBreak.java b/dev/core/src/com/google/gwt/dev/js/ast/JsBreak.java
index e175598..5c2fb73 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsBreak.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsBreak.java
@@ -46,6 +46,7 @@
     v.endVisit(this, ctx);
   }
 
+  @Override
   public boolean unconditionalControlBreak() {
     return true;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsConditional.java b/dev/core/src/com/google/gwt/dev/js/ast/JsConditional.java
index abd9d43..74c2967 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsConditional.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsConditional.java
@@ -58,10 +58,12 @@
         || elseExpr.hasSideEffects();
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return thenExpr.isDefinitelyNotNull() && elseExpr.isDefinitelyNotNull();
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return thenExpr.isDefinitelyNull() && elseExpr.isDefinitelyNull();
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsContinue.java b/dev/core/src/com/google/gwt/dev/js/ast/JsContinue.java
index 5f5be05..a88b60d 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsContinue.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsContinue.java
@@ -46,6 +46,7 @@
     v.endVisit(this, ctx);
   }
 
+  @Override
   public boolean unconditionalControlBreak() {
     return true;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsFunction.java b/dev/core/src/com/google/gwt/dev/js/ast/JsFunction.java
index 6399514..3aa90e0 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsFunction.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsFunction.java
@@ -118,10 +118,12 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsModVisitor.java b/dev/core/src/com/google/gwt/dev/js/ast/JsModVisitor.java
index 80a3f56..bcb2dbc 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsModVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsModVisitor.java
@@ -175,6 +175,7 @@
     }
   }
 
+  @Override
   protected JsExpression doAcceptLvalue(JsExpression expr) {
     return new LvalueContext().traverse(expr);
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsNullLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsNullLiteral.java
index f960539..bc2a9e0 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsNullLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsNullLiteral.java
@@ -35,10 +35,12 @@
     return false;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return false;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return true;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsNumberLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsNumberLiteral.java
index cef02c6..f91969d 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsNumberLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsNumberLiteral.java
@@ -42,10 +42,12 @@
     return value != 0.0;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsObjectLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsObjectLiteral.java
index a81377a..2e94511 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsObjectLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsObjectLiteral.java
@@ -53,10 +53,12 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsRegExp.java b/dev/core/src/com/google/gwt/dev/js/ast/JsRegExp.java
index c367597..1c5c376 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsRegExp.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsRegExp.java
@@ -46,10 +46,12 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsReturn.java b/dev/core/src/com/google/gwt/dev/js/ast/JsReturn.java
index 0176340..615178c 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsReturn.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsReturn.java
@@ -50,6 +50,7 @@
     v.endVisit(this, ctx);
   }
 
+  @Override
   public boolean unconditionalControlBreak() {
     return true;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsStringLiteral.java b/dev/core/src/com/google/gwt/dev/js/ast/JsStringLiteral.java
index c553f2c..1d2ea51 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsStringLiteral.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsStringLiteral.java
@@ -42,10 +42,12 @@
     return value.length() != 0;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsThisRef.java b/dev/core/src/com/google/gwt/dev/js/ast/JsThisRef.java
index c67af2e..356bec3 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsThisRef.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsThisRef.java
@@ -34,6 +34,7 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNotNull() {
     /*
      * You'd think that you could get a null this via function.call/apply, but
@@ -43,6 +44,7 @@
     return true;
   }
 
+  @Override
   public boolean isDefinitelyNull() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsThrow.java b/dev/core/src/com/google/gwt/dev/js/ast/JsThrow.java
index 2f25bd2..17f98ce 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsThrow.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsThrow.java
@@ -48,6 +48,7 @@
     v.endVisit(this, ctx);
   }
 
+  @Override
   public boolean unconditionalControlBreak() {
     return true;
   }
diff --git a/dev/core/src/com/google/gwt/dev/shell/EmmaStrategy.java b/dev/core/src/com/google/gwt/dev/shell/EmmaStrategy.java
index 5cc8fc5..72ebadc 100644
--- a/dev/core/src/com/google/gwt/dev/shell/EmmaStrategy.java
+++ b/dev/core/src/com/google/gwt/dev/shell/EmmaStrategy.java
@@ -27,6 +27,7 @@
 abstract class EmmaStrategy {
 
   private static class NoEmmaStrategy extends EmmaStrategy {
+    @Override
     public byte[] getEmmaClassBytes(byte[] classBytes, String slashedName,
         long unitLastModified) {
       return classBytes;
@@ -34,6 +35,7 @@
   }
 
   private static class PreinstrumentedEmmaStrategy extends EmmaStrategy {
+    @Override
     public byte[] getEmmaClassBytes(byte[] classBytes, String slashedName,
         long unitLastModified) {
       // Check for an existing class on the classpath.
diff --git a/dev/core/src/com/google/gwt/dev/shell/GWTBridgeImpl.java b/dev/core/src/com/google/gwt/dev/shell/GWTBridgeImpl.java
index 516b353..78002f6 100644
--- a/dev/core/src/com/google/gwt/dev/shell/GWTBridgeImpl.java
+++ b/dev/core/src/com/google/gwt/dev/shell/GWTBridgeImpl.java
@@ -27,6 +27,7 @@
     new ThreadLocal<String>() {
     private int counter = 0;
         
+    @Override
     public String initialValue() {
       return "DevModeThread" + ++counter;
     }
diff --git a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
index ceac009..97b44e2 100644
--- a/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
+++ b/dev/core/src/com/google/gwt/dev/shell/HtmlUnitSessionHandler.java
@@ -139,6 +139,7 @@
     return javaObject;
   }
 
+  @Override
   public HtmlPage getSynchronizationObject() {
     return htmlPage;
   }
diff --git a/dev/core/src/com/google/gwt/dev/shell/log/ServletContextTreeLogger.java b/dev/core/src/com/google/gwt/dev/shell/log/ServletContextTreeLogger.java
index d5b0181..712fc86 100644
--- a/dev/core/src/com/google/gwt/dev/shell/log/ServletContextTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/shell/log/ServletContextTreeLogger.java
@@ -30,15 +30,18 @@
     this.ctx = ctx;
   }
 
+  @Override
   protected AbstractTreeLogger doBranch() {
     return new ServletContextTreeLogger(ctx);
   }
 
+  @Override
   protected void doCommitBranch(AbstractTreeLogger childBeingCommitted,
       Type type, String msg, Throwable caught, HelpInfo helpInfo) {
     doLog(childBeingCommitted.getBranchedIndex(), type, msg, caught, helpInfo);
   }
 
+  @Override
   protected void doLog(int indexOfLogEntryWithinParentLogger, Type type,
       String msg, Throwable caught, HelpInfo helpInfo) {
     if (caught != null) {
diff --git a/dev/core/src/com/google/gwt/dev/shell/remoteui/MessageTransport.java b/dev/core/src/com/google/gwt/dev/shell/remoteui/MessageTransport.java
index 093ad21..903511d 100644
--- a/dev/core/src/com/google/gwt/dev/shell/remoteui/MessageTransport.java
+++ b/dev/core/src/com/google/gwt/dev/shell/remoteui/MessageTransport.java
@@ -242,10 +242,12 @@
         super(DUMMY_CALLABLE);
       }
 
+      @Override
       public void set(Response v) {
         super.set(v);
       }
 
+      @Override
       public void setException(Throwable t) {
         super.setException(t);
       }
diff --git a/dev/core/src/com/google/gwt/dev/shell/remoteui/ViewerServiceTreeLogger.java b/dev/core/src/com/google/gwt/dev/shell/remoteui/ViewerServiceTreeLogger.java
index ea00347..898bc37 100644
--- a/dev/core/src/com/google/gwt/dev/shell/remoteui/ViewerServiceTreeLogger.java
+++ b/dev/core/src/com/google/gwt/dev/shell/remoteui/ViewerServiceTreeLogger.java
@@ -67,6 +67,7 @@
       this.indexOfLogEntry = indexOfLogEntry;
     }
 
+    @Override
     public void send() {
       sendEntry(indexOfLogEntry, type, msg, caught, helpInfo);
     }
diff --git a/dev/core/src/com/google/gwt/dev/shell/tomcat/CatalinaLoggerAdapter.java b/dev/core/src/com/google/gwt/dev/shell/tomcat/CatalinaLoggerAdapter.java
index acb0e47..9cf2d95 100644
--- a/dev/core/src/com/google/gwt/dev/shell/tomcat/CatalinaLoggerAdapter.java
+++ b/dev/core/src/com/google/gwt/dev/shell/tomcat/CatalinaLoggerAdapter.java
@@ -27,23 +27,28 @@
     this.logger = logger;
   }
 
+  @Override
   public void log(Exception exception, String msg) {
     logger.log(TreeLogger.WARN, msg, exception);
   }
 
+  @Override
   public void log(String msg) {
     logger.log(TreeLogger.INFO, msg, null);
   }
 
+  @Override
   public void log(String message, int verbosity) {
     TreeLogger.Type type = mapVerbosityToLogType(verbosity);
     logger.log(type, message, null);
   }
 
+  @Override
   public void log(String msg, Throwable throwable) {
     logger.log(TreeLogger.WARN, msg, throwable);
   }
 
+  @Override
   public void log(String message, Throwable throwable, int verbosity) {
     TreeLogger.Type type = mapVerbosityToLogType(verbosity);
     logger.log(type, message, throwable);
diff --git a/dev/core/src/com/google/gwt/dev/util/DefaultTextOutput.java b/dev/core/src/com/google/gwt/dev/util/DefaultTextOutput.java
index f57a123..65e8d76 100644
--- a/dev/core/src/com/google/gwt/dev/util/DefaultTextOutput.java
+++ b/dev/core/src/com/google/gwt/dev/util/DefaultTextOutput.java
@@ -31,6 +31,7 @@
     setPrintWriter(out = new PrintWriter(sw));
   }
 
+  @Override
   public String toString() {
     out.flush();
     if (sw != null) {
diff --git a/dev/core/src/com/google/gwt/dev/util/NetProxy.java b/dev/core/src/com/google/gwt/dev/util/NetProxy.java
index 79a5096..f03cb35 100644
--- a/dev/core/src/com/google/gwt/dev/util/NetProxy.java
+++ b/dev/core/src/com/google/gwt/dev/util/NetProxy.java
@@ -33,6 +33,7 @@
       setName(fromPort + " => " + toPort + " #" + connections);
     }
 
+    @Override
     protected void recordBytesTransferred(byte[] bytes, int avail) {
       addBytesSent(avail, bytes);
     }
@@ -47,6 +48,7 @@
       this.toSocket = toSocket;
     }
 
+    @Override
     public void run() {
       try {
         InputStream fromSideInput = fromSocket.getInputStream();
@@ -88,6 +90,7 @@
       setName(fromPort + " <= " + toPort + " #" + connections);
     }
 
+    @Override
     protected void recordBytesTransferred(byte[] bytes, int avail) {
       addBytesReceived(avail, bytes);
     }
diff --git a/dev/core/src/com/google/gwt/dev/util/StringKey.java b/dev/core/src/com/google/gwt/dev/util/StringKey.java
index f599f2e..9e6ea38 100644
--- a/dev/core/src/com/google/gwt/dev/util/StringKey.java
+++ b/dev/core/src/com/google/gwt/dev/util/StringKey.java
@@ -59,6 +59,7 @@
   /**
    * Delegates to {@link #compareTo}.
    */
+  @Override
   public final boolean equals(Object o) {
     if (o == null) {
       return false;
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerExtraDir.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerExtraDir.java
index f897e18..5e0e707 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerExtraDir.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerExtraDir.java
@@ -32,10 +32,12 @@
     this.option = option;
   }
 
+  @Override
   public String getPurpose() {
     return "The directory into which extra files, not intended for deployment, will be written";
   }
 
+  @Override
   public String getTag() {
     return "-extra";
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerGenDir.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerGenDir.java
index 2c7a966..0ca36e5 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerGenDir.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerGenDir.java
@@ -30,10 +30,12 @@
     this.option = option;
   }
 
+  @Override
   public String getPurpose() {
     return "Debugging: causes normally-transient generated types to be saved in the specified directory";
   }
 
+  @Override
   public String getTag() {
     return "-gen";
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
index a87e8ca..9e4cd37 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerLogLevel.java
@@ -46,22 +46,27 @@
     this.options = options;
   }
 
+  @Override
   public String[] getDefaultArgs() {
     return new String[] {getTag(), getDefaultLogLevel().name()};
   }
 
+  @Override
   public String getPurpose() {
     return "The level of logging detail: " + OPTIONS_STRING;
   }
 
+  @Override
   public String getTag() {
     return "-logLevel";
   }
 
+  @Override
   public String[] getTagArgs() {
     return new String[] {"level"};
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
       try {
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
index a318409..26cd3b7 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerOutDir.java
@@ -30,14 +30,17 @@
     this.option = option;
   }
 
+  @Override
   public String[] getDefaultArgs() {
     return new String[] {getTag(), System.getProperty("user.dir")};
   }
 
+  @Override
   public String getPurpose() {
     return "The directory to write output files into (defaults to current)";
   }
 
+  @Override
   public String getTag() {
     return "-out";
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerScriptStyle.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerScriptStyle.java
index e45ce49..b8495fd 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerScriptStyle.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerScriptStyle.java
@@ -31,22 +31,27 @@
     this.option = option;
   }
 
+  @Override
   public String[] getDefaultArgs() {
     return new String[] {getTag(), "obfuscate"};
   }
 
+  @Override
   public String getPurpose() {
     return "Script output style: OBF[USCATED], PRETTY, or DETAILED (defaults to OBF)";
   }
 
+  @Override
   public String getTag() {
     return "-style";
   }
 
+  @Override
   public String[] getTagArgs() {
     return new String[] {"style"};
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
       String style = args[startIndex + 1].toLowerCase(Locale.ENGLISH);
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerTreeLoggerFlag.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerTreeLoggerFlag.java
index 276d197..a0bd680 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerTreeLoggerFlag.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerTreeLoggerFlag.java
@@ -28,9 +28,11 @@
     this.option = option;
   }
 
+  @Override
   public String getPurpose() {
     return "Logs output in a graphical tree view";
   }
+  @Override
 
   public String getTag() {
     return "-treeLogger";
@@ -41,6 +43,7 @@
     return true;
   }
 
+  @Override
   public boolean setFlag() {
     option.setUseGuiLogger(true);
     return true;
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerValidateOnlyFlag.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerValidateOnlyFlag.java
index 7740786..b3ea8ac 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerValidateOnlyFlag.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerValidateOnlyFlag.java
@@ -28,14 +28,17 @@
     this.option = option;
   }
 
+  @Override
   public String getPurpose() {
     return "Validate all source code, but do not compile";
   }
 
+  @Override
   public String getTag() {
     return "-validateOnly";
   }
 
+  @Override
   public boolean setFlag() {
     option.setValidateOnly(true);
     return true;
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWarDir.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWarDir.java
index 1f14f90..6c0eb9e 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWarDir.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWarDir.java
@@ -30,14 +30,17 @@
     this.option = option;
   }
 
+  @Override
   public String[] getDefaultArgs() {
     return new String[]{getTag(), "war"};
   }
 
+  @Override
   public String getPurpose() {
     return "The directory into which deployable output files will be written (defaults to 'war')";
   }
 
+  @Override
   public String getTag() {
     return "-war";
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirOptional.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirOptional.java
index ca3cf49..ecb2d38 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirOptional.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirOptional.java
@@ -30,10 +30,12 @@
     this.option = option;
   }
 
+  @Override
   public String getPurpose() {
     return "The compiler's working directory for internal use (must be writeable; defaults to a system temp dir)";
   }
 
+  @Override
   public String getTag() {
     return "-workDir";
   }
@@ -42,5 +44,4 @@
   public void setDir(File dir) {
     option.setWorkDir(dir);
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirRequired.java b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirRequired.java
index 0f86683..a72938c 100644
--- a/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirRequired.java
+++ b/dev/core/src/com/google/gwt/dev/util/arg/ArgHandlerWorkDirRequired.java
@@ -24,6 +24,7 @@
     super(option);
   }
 
+  @Override
   public String getPurpose() {
     return "The compiler work directory (must be writeable)";
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/collect/IdentitySets.java b/dev/core/src/com/google/gwt/dev/util/collect/IdentitySets.java
index 0985ee3..9edccb5 100644
--- a/dev/core/src/com/google/gwt/dev/util/collect/IdentitySets.java
+++ b/dev/core/src/com/google/gwt/dev/util/collect/IdentitySets.java
@@ -39,14 +39,17 @@
       this.item = item;
     }
 
+    @Override
     public boolean contains(Object o) {
       return o == item;
     }
 
+    @Override
     public Iterator<E> iterator() {
       return new SingletonIterator<E>(item);
     }
 
+    @Override
     public int size() {
       return 1;
     }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
index 162fd24..195d2b8 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForClass.java
@@ -20,6 +20,7 @@
  */
 public final class FormatterForClass extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return getNiceTypeName((Class<?>) toFormat);
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
index beeb142..9965191 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForFile.java
@@ -22,8 +22,8 @@
  */
 public final class FormatterForFile extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return ((File) toFormat).getAbsolutePath();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
index 73e2d77..335d158 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForInteger.java
@@ -20,8 +20,8 @@
  */
 public final class FormatterForInteger extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return ((Integer) toFormat).toString();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
index 9508253..544ca47 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForLong.java
@@ -20,8 +20,8 @@
  */
 public final class FormatterForLong extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return ((Long) toFormat).toString();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
index 01bcf17..945af66 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForMethod.java
@@ -22,8 +22,8 @@
  */
 public final class FormatterForMethod extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return ((Method) toFormat).getName();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
index 59bbd90..10af145 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForString.java
@@ -20,8 +20,8 @@
  */
 public final class FormatterForString extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return (String) toFormat;
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
index f6efeba..d4cb25a 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForStringArray.java
@@ -20,6 +20,7 @@
  */
 public final class FormatterForStringArray extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     StringBuffer sb = new StringBuffer();
     String[] ss = (String[]) toFormat;
@@ -31,5 +32,4 @@
     }
     return sb.toString();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
index 10a20b7..6a53bcd 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterForURL.java
@@ -22,8 +22,8 @@
  */
 public class FormatterForURL extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return ((URL) toFormat).toString();
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java b/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
index e0e9405..9999cc4 100644
--- a/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
+++ b/dev/core/src/com/google/gwt/dev/util/msg/FormatterToString.java
@@ -20,6 +20,7 @@
  */
 public final class FormatterToString extends Formatter {
 
+  @Override
   public String format(Object toFormat) {
     return toFormat.toString();
   }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForBoolean.java b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForBoolean.java
index a54f1db..84fd269 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForBoolean.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForBoolean.java
@@ -21,6 +21,8 @@
  * Subclass for converting strings into Integer.
  */
 public class AttributeConverterForBoolean extends AttributeConverter {
+
+  @Override
   public Object convertToArg(Schema schema, int line, String elem,
       String attr, String value) throws UnableToCompleteException {
     if (value.equals("true")) {
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForInteger.java b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForInteger.java
index 562f3d5..1f40859 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForInteger.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForInteger.java
@@ -21,6 +21,8 @@
  * Subclass for converting strings into Integer.
  */
 public class AttributeConverterForInteger extends AttributeConverter {
+
+  @Override
   public Object convertToArg(Schema schema, int lineNumber, String elemName,
       String attrName, String attrValue) throws UnableToCompleteException {
     try {
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForString.java b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForString.java
index 936e449..d6444f3 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForString.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/AttributeConverterForString.java
@@ -19,6 +19,8 @@
  * Subclass for converting strings into String.
  */
 public class AttributeConverterForString extends AttributeConverter {
+
+  @Override
   public Object convertToArg(Schema schema, int lineNumber,
       String elemName, String attrName, String attrValue) {
     return attrValue;
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java b/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
index 145d451..2e9ce4c 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/DefaultSchema.java
@@ -43,6 +43,7 @@
         new AttributeConverterForBoolean());
   }
 
+  @Override
   public void onBadAttributeValue(int line, String elem, String attr,
       String value, Class<?> paramType) throws UnableToCompleteException {
     Messages.XML_ATTRIBUTE_CONVERSION_ERROR.log(logger, line, attr, paramType,
@@ -50,30 +51,35 @@
     throw new UnableToCompleteException();
   }
 
+  @Override
   public void onHandlerException(int line, String elem, Method method,
       Throwable e) throws UnableToCompleteException {
     Messages.XML_ELEMENT_HANDLER_EXCEPTION.log(logger, line, elem, e);
     throw new UnableToCompleteException();
   }
 
+  @Override
   public void onMissingAttribute(int line, String elem, String attr)
       throws UnableToCompleteException {
     Messages.XML_REQUIRED_ATTRIBUTE_MISSING.log(logger, elem, line, attr, null);
     throw new UnableToCompleteException();
   }
 
+  @Override
   public void onUnexpectedAttribute(int line, String elem, String attr,
       String value) throws UnableToCompleteException {
     Messages.XML_ATTRIBUTE_UNEXPECTED.log(logger, elem, line, attr, null);
     throw new UnableToCompleteException();
   }
 
+  @Override
   public void onUnexpectedChild(int line, String childElem)
       throws UnableToCompleteException {
     Messages.XML_CHILDREN_NOT_ALLOWED.log(logger, childElem, line, null);
     throw new UnableToCompleteException();
   }
 
+  @Override
   public void onUnexpectedElement(int line, String elem)
       throws UnableToCompleteException {
     Messages.XML_ELEMENT_UNEXPECTED.log(logger, line, elem, null);
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java b/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
index 40c8082..a68e23a 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/HandlerMethod.java
@@ -32,30 +32,36 @@
   // A schema level that ignores everything.
   private static final Schema sArbitraryChildHandler = new Schema() {
 
+    @Override
     public void onBadAttributeValue(int lineNumber, String elemName,
         String attrName, String attrValue, Class<?> paramType) {
       // Ignore
     }
 
+    @Override
     public void onHandlerException(int lineNumber, String elemLocalName,
         Method method, Throwable e) {
       // Ignore
     }
 
+    @Override
     public void onMissingAttribute(int lineNumber, String elemName,
         String argName) {
       // Ignore
     }
 
+    @Override
     public void onUnexpectedAttribute(int lineNumber, String elemName,
         String attrName, String attrValue) {
       // Ignore
     }
 
+    @Override
     public void onUnexpectedChild(int lineNumber, String elemName) {
       // Ignore
     }
 
+    @Override
     public void onUnexpectedElement(int lineNumber, String elemName) {
       // Ignore
     }
diff --git a/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java b/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
index 224d1ee..db07218 100644
--- a/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
+++ b/dev/core/src/com/google/gwt/dev/util/xml/ReflectiveParser.java
@@ -57,6 +57,7 @@
 
     private Schema defaultSchema;
 
+    @Override
     public void characters(char[] ch, int start, int length)
         throws SAXException {
       int lineNumber = locator.getLineNumber();
@@ -115,6 +116,7 @@
       }
     }
 
+    @Override
     public void endElement(String namespaceURI, String localName, String elem)
         throws SAXException {
       int lineNumber = locator.getLineNumber();
@@ -154,10 +156,12 @@
       }
     }
 
+    @Override
     public void setDocumentLocator(Locator locator) {
       this.locator = locator;
     }
 
+    @Override
     public void startElement(String namespaceURI, String localName,
         String elemName, Attributes atts) throws SAXException {
       int lineNumber = locator.getLineNumber();
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerDir.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerDir.java
index 5123cb9..f40866d 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerDir.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerDir.java
@@ -22,14 +22,12 @@
  */
 public abstract class ArgHandlerDir extends ArgHandler {
 
-  public abstract String getPurpose();
-
-  public abstract String getTag();
-
+  @Override
   public String[] getTagArgs() {
     return new String[]{"dir"};
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
       setDir(new File(args[startIndex + 1]));
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
index 65e7587..eaca29d 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerExtra.java
@@ -22,10 +22,12 @@
 
   public abstract boolean addExtraArg(String arg);
 
+  @Override
   public final String getTag() {
     return null;
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (addExtraArg(args[startIndex])) {
       return 0;
@@ -34,6 +36,7 @@
     }
   }
 
+  @Override
   public boolean isRequired() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerFile.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerFile.java
index 7aad819..88cc744 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerFile.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerFile.java
@@ -22,18 +22,17 @@
  */
 public abstract class ArgHandlerFile extends ArgHandler {
 
+  @Override
   public String[] getDefaultArgs() {
     return null;
   }
 
-  public abstract String getPurpose();
-
-  public abstract String getTag();
-
+  @Override
   public String[] getTagArgs() {
     return new String[]{"file"};
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
       setFile(new File(args[startIndex + 1]));
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerFlag.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerFlag.java
index 10dcdb2..887652a 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerFlag.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerFlag.java
@@ -22,14 +22,12 @@
  */
 public abstract class ArgHandlerFlag extends ArgHandler {
 
-  public abstract String getPurpose();
-
-  public abstract String getTag();
-
+  @Override
   public String[] getTagArgs() {
     return Empty.STRINGS;
   }
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (setFlag()) {
       return 0;
@@ -38,10 +36,10 @@
     }
   }
 
+  @Override
   public boolean isRequired() {
     return false;
   }
 
   public abstract boolean setFlag();
-
 }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerInt.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerInt.java
index 89f069a..61e76ca 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerInt.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerInt.java
@@ -20,12 +20,7 @@
  */
 public abstract class ArgHandlerInt extends ArgHandler {
 
-  public abstract String getPurpose();
-
-  public abstract String getTag();
-
-  public abstract String[] getTagArgs();
-
+  @Override
   public int handle(String[] args, int startIndex) {
     int value;
     if (startIndex + 1 < args.length) {
@@ -44,6 +39,7 @@
     return -1;
   }
 
+  @Override
   public boolean isRequired() {
     return false;
   }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
index 2a57c0c..a27e494 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerOutDir.java
@@ -20,16 +20,18 @@
  */
 public abstract class ArgHandlerOutDir extends ArgHandlerDir {
 
+  @Override
   public String[] getDefaultArgs() {
     return new String[] {getTag(), System.getProperty("user.dir")};
   }
 
+  @Override
   public String getPurpose() {
     return "The directory to write output files into (defaults to current)";
   }
 
+  @Override
   public String getTag() {
     return "-out";
   }
-
 }
diff --git a/dev/core/src/com/google/gwt/util/tools/ArgHandlerString.java b/dev/core/src/com/google/gwt/util/tools/ArgHandlerString.java
index f947e21..bc71458 100644
--- a/dev/core/src/com/google/gwt/util/tools/ArgHandlerString.java
+++ b/dev/core/src/com/google/gwt/util/tools/ArgHandlerString.java
@@ -20,6 +20,7 @@
  */
 public abstract class ArgHandlerString extends ArgHandler {
 
+  @Override
   public int handle(String[] args, int startIndex) {
     if (startIndex + 1 < args.length) {
       if (!setString(args[startIndex + 1])) {
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/JWildcardTypeTest.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/JWildcardTypeTest.java
index d91a1d3..08c665a 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/JWildcardTypeTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/JWildcardTypeTest.java
@@ -74,6 +74,7 @@
     assertEquals(oracle.getJavaLangObject(), lowerBoundWildcard.getErasedType());
   }
 
+  @Override
   public void testGetMethods() throws NotFoundException {
     super.testGetMethods();
   }
diff --git a/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java b/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
index 26e6c6b..af155dc 100644
--- a/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
+++ b/user/src/com/google/gwt/benchmarks/client/impl/BenchmarkResults.java
@@ -66,6 +66,7 @@
     return "BenchmarkResults {" + toStringInner() + "}";
   }
 
+  @Override
   protected String toStringInner() {
     return super.toStringInner() + ", trials: " + trials + ", sourceRef: "
         + sourceRef;
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java
index 44c3874..8ec75af 100644
--- a/user/src/com/google/gwt/cell/client/EditTextCell.java
+++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -126,6 +126,7 @@
     super("click", "keyup", "keydown", "blur");
   }
 
+  @Override
   public boolean isEditing(Element element, String value, Object key) {
     ViewData viewData = getViewData(key);
     return viewData == null ? false : viewData.isEditing();
diff --git a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
index 6555d8c..646f5ed 100644
--- a/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
+++ b/user/src/com/google/gwt/core/client/impl/StackTraceCreator.java
@@ -137,6 +137,7 @@
       // No-op, relying on initializer call to collect()
     }
 
+    @Override
     public void fillInStackTrace(Throwable t) {
       JsArrayString stack = collect();
       JsArrayString locations = getLocation();
diff --git a/user/src/com/google/gwt/dom/client/Style.java b/user/src/com/google/gwt/dom/client/Style.java
index e2c3b84..2e79e61 100644
--- a/user/src/com/google/gwt/dom/client/Style.java
+++ b/user/src/com/google/gwt/dom/client/Style.java
@@ -100,26 +100,31 @@
    */
   public enum BorderStyle implements HasCssName {
     NONE {
+      @Override
       public String getCssName() {
         return BORDER_STYLE_NONE;
       }
     },
     DOTTED {
+      @Override
       public String getCssName() {
         return BORDER_STYLE_DOTTED;
       }
     },
     DASHED {
+      @Override
       public String getCssName() {
         return BORDER_STYLE_DASHED;
       }
     },
     HIDDEN {
+      @Override
       public String getCssName() {
         return BORDER_STYLE_HIDDEN;
       }
     },
     SOLID {
+      @Override
       public String getCssName() {
         return BORDER_STYLE_SOLID;
       }
@@ -132,91 +137,109 @@
    */
   public enum Cursor implements HasCssName {
     DEFAULT {
+      @Override
       public String getCssName() {
         return CURSOR_DEFAULT;
       }
     },
     AUTO {
+      @Override
       public String getCssName() {
         return CURSOR_AUTO;
       }
     },
     CROSSHAIR {
+      @Override
       public String getCssName() {
         return CURSOR_CROSSHAIR;
       }
     },
     POINTER {
+      @Override
       public String getCssName() {
         return CURSOR_POINTER;
       }
     },
     MOVE {
+      @Override
       public String getCssName() {
         return CURSOR_MOVE;
       }
     },
     E_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_E_RESIZE;
       }
     },
     NE_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_NE_RESIZE;
       }
     },
     NW_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_NW_RESIZE;
       }
     },
     N_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_N_RESIZE;
       }
     },
     SE_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_SE_RESIZE;
       }
     },
     SW_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_SW_RESIZE;
       }
     },
     S_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_S_RESIZE;
       }
     },
     W_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_W_RESIZE;
       }
     },
     TEXT {
+      @Override
       public String getCssName() {
         return CURSOR_TEXT;
       }
     },
     WAIT {
+      @Override
       public String getCssName() {
         return CURSOR_WAIT;
       }
     },
     HELP {
+      @Override
       public String getCssName() {
         return CURSOR_HELP;
       }
     },
     COL_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_COL_RESIZE;
       }
     },
     ROW_RESIZE {
+      @Override
       public String getCssName() {
         return CURSOR_ROW_RESIZE;
       }
@@ -229,21 +252,25 @@
    */
   public enum Display implements HasCssName {
     NONE {
+      @Override
       public String getCssName() {
         return DISPLAY_NONE;
       }
     },
     BLOCK {
+      @Override
       public String getCssName() {
         return DISPLAY_BLOCK;
       }
     },
     INLINE {
+      @Override
       public String getCssName() {
         return DISPLAY_INLINE;
       }
     },
     INLINE_BLOCK {
+      @Override
       public String getCssName() {
         return DISPLAY_INLINE_BLOCK;
       }
@@ -256,16 +283,19 @@
    */
   public enum Float implements HasCssName {
     LEFT {
+      @Override
       public String getCssName() {
         return FLOAT_LEFT;
       }
     },
     RIGHT {
+      @Override
       public String getCssName() {
         return FLOAT_RIGHT;
       }
     },
     NONE {
+      @Override
       public String getCssName() {
         return FLOAT_NONE;
       }
@@ -278,16 +308,19 @@
    */
   public enum FontStyle implements HasCssName {
     NORMAL {
+      @Override
       public String getCssName() {
         return FONT_STYLE_NORMAL;
       }
     },
     ITALIC {
+      @Override
       public String getCssName() {
         return FONT_STYLE_ITALIC;
       }
     },
     OBLIQUE {
+      @Override
       public String getCssName() {
         return FONT_STYLE_OBLIQUE;
       }
@@ -300,21 +333,25 @@
    */
   public enum FontWeight implements HasCssName {
     NORMAL {
+      @Override
       public String getCssName() {
         return FONT_WEIGHT_NORMAL;
       }
     },
     BOLD {
+      @Override
       public String getCssName() {
         return FONT_WEIGHT_BOLD;
       }
     },
     BOLDER {
+      @Override
       public String getCssName() {
         return FONT_WEIGHT_BOLDER;
       }
     },
     LIGHTER {
+      @Override
       public String getCssName() {
         return FONT_WEIGHT_LIGHTER;
       }
@@ -327,46 +364,55 @@
    */
   public enum ListStyleType implements HasCssName {
     NONE {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_NONE;
       }
     },
     DISC {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_DISC;
       }
     },
     CIRCLE {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_CIRCLE;
       }
     },
     SQUARE {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_SQUARE;
       }
     },
     DECIMAL {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_DECIMAL;
       }
     },
     LOWER_ALPHA {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_LOWER_ALPHA;
       }
     },
     UPPER_ALPHA {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_UPPER_ALPHA;
       }
     },
     LOWER_ROMAN {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_LOWER_ROMAN;
       }
     },
     UPPER_ROMAN {
+      @Override
       public String getCssName() {
         return LIST_STYLE_TYPE_UPPER_ROMAN;
       }
@@ -379,21 +425,25 @@
    */
   public enum Overflow implements HasCssName {
     VISIBLE {
+      @Override
       public String getCssName() {
         return OVERFLOW_VISIBLE;
       }
     },
     HIDDEN {
+      @Override
       public String getCssName() {
         return OVERFLOW_HIDDEN;
       }
     },
     SCROLL {
+      @Override
       public String getCssName() {
         return OVERFLOW_SCROLL;
       }
     },
     AUTO {
+      @Override
       public String getCssName() {
         return OVERFLOW_AUTO;
       }
@@ -406,21 +456,25 @@
    */
   public enum Position implements HasCssName {
     STATIC {
+      @Override
       public String getCssName() {
         return POSITION_STATIC;
       }
     },
     RELATIVE {
+      @Override
       public String getCssName() {
         return POSITION_RELATIVE;
       }
     },
     ABSOLUTE {
+      @Override
       public String getCssName() {
         return POSITION_ABSOLUTE;
       }
     },
     FIXED {
+      @Override
       public String getCssName() {
         return POSITION_FIXED;
       }
@@ -433,21 +487,25 @@
    */
   public enum TextDecoration implements HasCssName {
     NONE {
+      @Override
       public String getCssName() {
         return TEXT_DECORATION_NONE;
       }
     },
     UNDERLINE {
+      @Override
       public String getCssName() {
         return TEXT_DECORATION_UNDERLINE;
       }
     },
     OVERLINE {
+      @Override
       public String getCssName() {
         return TEXT_DECORATION_OVERLINE;
       }
     },
     LINE_THROUGH {
+      @Override
       public String getCssName() {
         return TEXT_DECORATION_LINE_THROUGH;
       }
@@ -460,41 +518,49 @@
    */
   public enum VerticalAlign implements HasCssName {
     BASELINE {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_BASELINE;
       }
     },
     SUB {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_SUB;
       }
     },
     SUPER {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_SUPER;
       }
     },
     TOP {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_TOP;
       }
     },
     TEXT_TOP {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_TEXT_TOP;
       }
     },
     MIDDLE {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_MIDDLE;
       }
     },
     BOTTOM {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_BOTTOM;
       }
     },
     TEXT_BOTTOM {
+      @Override
       public String getCssName() {
         return VERTICAL_ALIGN_TEXT_BOTTOM;
       }
@@ -507,11 +573,13 @@
    */
   public enum Visibility implements HasCssName {
     VISIBLE {
+      @Override
       public String getCssName() {
         return VISIBILITY_VISIBLE;
       }
     },
     HIDDEN {
+      @Override
       public String getCssName() {
         return VISIBILITY_HIDDEN;
       }
diff --git a/user/src/com/google/gwt/json/client/JSONNull.java b/user/src/com/google/gwt/json/client/JSONNull.java
index 9873f8a..d9717c5 100644
--- a/user/src/com/google/gwt/json/client/JSONNull.java
+++ b/user/src/com/google/gwt/json/client/JSONNull.java
@@ -61,6 +61,7 @@
     return "null";
   }
 
+  @Override
   native JavaScriptObject getUnwrapper() /*-{
     return @com.google.gwt.json.client.JSONNull::unwrap();
   }-*/;
diff --git a/user/src/com/google/gwt/junit/GWTDummyBridge.java b/user/src/com/google/gwt/junit/GWTDummyBridge.java
index cc23792..f062e22 100644
--- a/user/src/com/google/gwt/junit/GWTDummyBridge.java
+++ b/user/src/com/google/gwt/junit/GWTDummyBridge.java
@@ -32,6 +32,7 @@
   /**
    * @return null
    */
+  @Override
   public <T> T create(Class<?> classLiteral) {
     return null;
   }
@@ -39,6 +40,7 @@
   /**
    * @return the current version of GWT ({@link About#getGwtVersionNum()})
    */
+  @Override
   public String getVersion() {
     return About.getGwtVersionNum();
   }
@@ -46,6 +48,7 @@
   /**
    * @return false
    */
+  @Override
   public boolean isClient() {
     return false;
   }
@@ -54,6 +57,7 @@
    * Logs the message and throwable to the standard logger, with level {@link
    * Level#SEVERE}.
    */
+  @Override
   public void log(String message, Throwable e) {
     logger.log(Level.SEVERE, message, e);
   }
diff --git a/user/src/com/google/gwt/logging/impl/LevelImplRegular.java b/user/src/com/google/gwt/logging/impl/LevelImplRegular.java
index 2ae4e77..ed6cb4a 100644
--- a/user/src/com/google/gwt/logging/impl/LevelImplRegular.java
+++ b/user/src/com/google/gwt/logging/impl/LevelImplRegular.java
@@ -129,6 +129,7 @@
     return LevelImplRegular.SEVERE;
   }
 
+  @Override
   public String toString() {
     return getName();
   }
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
index c803843..42389ee 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RecordKey.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.requestfactory.client.impl;
 
-
 /**
  * <p>
  * <span style="color:red">Experimental API: This class is still under rapid
diff --git a/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java b/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
index d9ab991..5cb63a6 100644
--- a/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
+++ b/user/src/com/google/gwt/requestfactory/server/OperationRegistry.java
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.requestfactory.server;
 
-
 /**
  * <p>
  * <span style="color:red">Experimental API: This class is still under rapid
diff --git a/user/src/com/google/gwt/requestfactory/server/UserInformation.java b/user/src/com/google/gwt/requestfactory/server/UserInformation.java
index dbb9758..15e871d 100644
--- a/user/src/com/google/gwt/requestfactory/server/UserInformation.java
+++ b/user/src/com/google/gwt/requestfactory/server/UserInformation.java
@@ -34,30 +34,37 @@
       super(redirectUrl);
     }
   
+    @Override
     public String getEmail() {
       return "";
     }
 
+    @Override
     public Long getId() {
       return this.id;
     }
 
+    @Override
     public String getLoginUrl() {
       return "";
     }
   
+    @Override
     public String getLogoutUrl() {
       return "";
     }
   
+    @Override
     public String getName() {
       return "";
     }
   
+    @Override
     public boolean isUserLoggedIn() {
       return true;
     }
 
+    @Override
     public void setId(Long id) {
       this.id = id;
     }
diff --git a/user/src/com/google/gwt/resources/css/ClassRenamer.java b/user/src/com/google/gwt/resources/css/ClassRenamer.java
index a78ccbd..f207b1f 100644
--- a/user/src/com/google/gwt/resources/css/ClassRenamer.java
+++ b/user/src/com/google/gwt/resources/css/ClassRenamer.java
@@ -71,6 +71,7 @@
     /**
      * For debugging use only.
      */
+    @Override
     public String toString() {
       if (this == UNREFERENCED_EXTERNAL) {
         return "Unreferenced external class name";
diff --git a/user/src/com/google/gwt/resources/css/ast/CssSprite.java b/user/src/com/google/gwt/resources/css/ast/CssSprite.java
index 57e0640..685c56f 100644
--- a/user/src/com/google/gwt/resources/css/ast/CssSprite.java
+++ b/user/src/com/google/gwt/resources/css/ast/CssSprite.java
@@ -80,6 +80,7 @@
       return source.containsAll(c);
     }
 
+    @Override
     public boolean equals(Object o) {
       return source.equals(o);
     }
@@ -88,6 +89,7 @@
       return source.get(index);
     }
 
+    @Override
     public int hashCode() {
       return source.hashCode();
     }
@@ -172,6 +174,7 @@
     this.resourceFunction = resourceFunction;
   }
 
+  @Override
   public void traverse(CssVisitor visitor, Context context) {
     if (visitor.visit(this, context)) {
       visitor.acceptWithInsertRemove(selectors);
diff --git a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
index d3342eb..633d238 100644
--- a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
@@ -187,6 +187,7 @@
     }
   }
 
+  @Override
   public final String generate(TreeLogger logger,
       GeneratorContext generatorContext, String typeName)
       throws UnableToCompleteException {
diff --git a/user/src/com/google/gwt/resources/rebind/context/InlineClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/InlineClientBundleGenerator.java
index ecbd37d..d5b2649 100644
--- a/user/src/com/google/gwt/resources/rebind/context/InlineClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/InlineClientBundleGenerator.java
@@ -28,6 +28,8 @@
  */
 public final class InlineClientBundleGenerator extends
     AbstractClientBundleGenerator {
+
+  @Override
   protected AbstractResourceContext createResourceContext(TreeLogger logger,
       GeneratorContext context, JClassType resourceBundleType) {
     return new InlineResourceContext(logger.branch(TreeLogger.DEBUG,
diff --git a/user/src/com/google/gwt/resources/rebind/context/StaticClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/StaticClientBundleGenerator.java
index 44f6534..92a2ae2 100644
--- a/user/src/com/google/gwt/resources/rebind/context/StaticClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/StaticClientBundleGenerator.java
@@ -26,6 +26,7 @@
 public final class StaticClientBundleGenerator extends
     AbstractClientBundleGenerator {
 
+  @Override
   protected AbstractResourceContext createResourceContext(TreeLogger logger,
       GeneratorContext context, JClassType resourceBundleType) {
     return new StaticResourceContext(logger.branch(TreeLogger.DEBUG,
diff --git a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java b/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java
index b2028a7..4711981 100644
--- a/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java
+++ b/user/src/com/google/gwt/rpc/client/impl/CommandClientSerializationStreamWriter.java
@@ -69,6 +69,7 @@
   /**
    * Type is passed in to handle primitive types.
    */
+  @Override
   protected ValueCommand makeValue(Class<?> type, Object value)
       throws SerializationException {
     SerializeFunction customSerializer;
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/BooleanAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/BooleanAttributeParser.java
index 56334c7..769b26e 100644
--- a/user/src/com/google/gwt/uibinder/attributeparsers/BooleanAttributeParser.java
+++ b/user/src/com/google/gwt/uibinder/attributeparsers/BooleanAttributeParser.java
@@ -29,6 +29,7 @@
     super(converter, booleanType, logger);
   }
 
+  @Override
   public String parse(String value) throws UnableToCompleteException {
     if (value.equals("true") || value.equals("false")) {
       return value;
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/DoubleAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/DoubleAttributeParser.java
index bac064b..50128e8 100644
--- a/user/src/com/google/gwt/uibinder/attributeparsers/DoubleAttributeParser.java
+++ b/user/src/com/google/gwt/uibinder/attributeparsers/DoubleAttributeParser.java
@@ -29,6 +29,7 @@
     super(converter, doubleType, logger);
   }
 
+  @Override
   public String parse(String value) throws UnableToCompleteException {
     try {
       Double.parseDouble(value);
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/EnumAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/EnumAttributeParser.java
index 35292fe..e08edfd 100644
--- a/user/src/com/google/gwt/uibinder/attributeparsers/EnumAttributeParser.java
+++ b/user/src/com/google/gwt/uibinder/attributeparsers/EnumAttributeParser.java
@@ -38,6 +38,7 @@
     }
   }
 
+  @Override
   public String parse(String value) throws UnableToCompleteException {
     JEnumConstant c = values.get(value);
     if (c != null) {
diff --git a/user/src/com/google/gwt/uibinder/attributeparsers/IntAttributeParser.java b/user/src/com/google/gwt/uibinder/attributeparsers/IntAttributeParser.java
index 37e80ec..2c2d321 100644
--- a/user/src/com/google/gwt/uibinder/attributeparsers/IntAttributeParser.java
+++ b/user/src/com/google/gwt/uibinder/attributeparsers/IntAttributeParser.java
@@ -29,6 +29,7 @@
     super(converter, intType, logger);
   }
 
+  @Override
   public String parse(String value) throws UnableToCompleteException {
     try {
       Integer.parseInt(value);
diff --git a/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java b/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
index 6b88f25..8293a35 100644
--- a/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
+++ b/user/src/com/google/gwt/uibinder/rebind/UiBinderParser.java
@@ -40,24 +40,28 @@
 
   private enum Resource {
     data {
+      @Override
       void create(UiBinderParser parser, XMLElement elem)
           throws UnableToCompleteException {
         parser.createData(elem);
       }
     },
     image {
+      @Override
       void create(UiBinderParser parser, XMLElement elem)
           throws UnableToCompleteException {
         parser.createImage(elem);
       }
     },
     style {
+      @Override
       void create(UiBinderParser parser, XMLElement elem)
           throws UnableToCompleteException {
         parser.createStyle(elem);
       }
     },
     with {
+      @Override
       void create(UiBinderParser parser, XMLElement elem)
           throws UnableToCompleteException {
         parser.createResource(elem);
diff --git a/user/src/com/google/gwt/user/client/ui/LayoutPanel.java b/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
index 711b219..9b918bb 100644
--- a/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/LayoutPanel.java
@@ -129,6 +129,7 @@
    * 
    * @param widget the widget to be added
    */
+  @Override
   public void add(Widget widget) {
     insert(widget, getWidgetCount());
   }
diff --git a/user/src/com/google/gwt/user/client/ui/ScrollPanel.java b/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
index 765ddaf..229c973 100644
--- a/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/ScrollPanel.java
@@ -214,6 +214,7 @@
     super.setWidth(width);
   }
 
+  @Override
   protected Element getContainerElement() {
     return containerElem;
   }
diff --git a/user/src/com/google/gwt/user/client/ui/ValueBox.java b/user/src/com/google/gwt/user/client/ui/ValueBox.java
index 2c0cd63..c420936 100644
--- a/user/src/com/google/gwt/user/client/ui/ValueBox.java
+++ b/user/src/com/google/gwt/user/client/ui/ValueBox.java
@@ -68,6 +68,7 @@
     assert InputElement.as(element).getType().equalsIgnoreCase("text");
   }
 
+  @Override
   public Direction getDirection() {
     return BidiUtils.getDirectionOnElement(getElement());
   }
@@ -90,6 +91,7 @@
     return getInputElement().getSize();
   }
 
+  @Override
   public void setDirection(Direction direction) {
     BidiUtils.setDirectionOnElement(getElement(), direction);
   }
diff --git a/user/src/com/google/gwt/user/rebind/AsyncProxyGenerator.java b/user/src/com/google/gwt/user/rebind/AsyncProxyGenerator.java
index ab6ace3..1ecddb4 100644
--- a/user/src/com/google/gwt/user/rebind/AsyncProxyGenerator.java
+++ b/user/src/com/google/gwt/user/rebind/AsyncProxyGenerator.java
@@ -43,6 +43,7 @@
  */
 public class AsyncProxyGenerator extends Generator {
 
+  @Override
   public String generate(TreeLogger logger, GeneratorContext generatorContext,
       String typeName) throws UnableToCompleteException {
 
diff --git a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
index 355d778..bc4935d 100644
--- a/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
+++ b/user/src/com/google/gwt/view/client/DefaultSelectionModel.java
@@ -24,11 +24,11 @@
  * A convenience {@link SelectionModel} that allows records to be selected
  * according to a subclass-defined rule, plus a list of positive or negative
  * exceptions.
- * 
+ *
  * <p>
  * Note: This class is new and its interface subject to change.
  * </p>
- * 
+ *
  * @param <T> the data type of records in the list
  */
 public abstract class DefaultSelectionModel<T> extends
@@ -53,14 +53,14 @@
    * implement this method in order to define the default selection behavior.
    */
   public abstract boolean isDefaultSelected(T object);
-  
+
   /**
    * If the given object is marked as an exception, return the exception value.
    * Otherwise, return the value of isDefaultSelected for the given object.
    */
   public boolean isSelected(T object) {
     resolveChanges();
-    
+
     // Check exceptions first
     Object key = getKey(object);
     Boolean exception = exceptions.get(key);
@@ -81,8 +81,9 @@
     selectionChanges.put(object, selected);
     scheduleSelectionChangeEvent();
   }
-  
+
   // Coalesce selection changes since the last event firing
+  @Override
   protected void fireSelectionChangeEvent() {
     if (isEventScheduled()) {
       setEventCancelled(true);
@@ -95,7 +96,7 @@
 
   /**
    * Copies the exceptions map into a user-supplied map.
-   * 
+   *
    * @param output the user supplied map
    * @return the user supplied map
    */
@@ -104,7 +105,7 @@
     output.putAll(exceptions);
     return output;
   }
-  
+
   private boolean resolveChanges() {
     boolean changed = false;
     for (Map.Entry<T, Boolean> entry : selectionChanges.entrySet()) {
diff --git a/user/src/com/google/gwt/xml/client/impl/DOMItem.java b/user/src/com/google/gwt/xml/client/impl/DOMItem.java
index c72599a..b773fb5 100644
--- a/user/src/com/google/gwt/xml/client/impl/DOMItem.java
+++ b/user/src/com/google/gwt/xml/client/impl/DOMItem.java
@@ -46,6 +46,7 @@
   /**
    * Returns the hash code for this DOMItem.
    */
+  @Override
   public int hashCode() {
     return jsObject.hashCode();
   }
diff --git a/user/src/com/google/gwt/xml/client/impl/XMLParserImplIE6.java b/user/src/com/google/gwt/xml/client/impl/XMLParserImplIE6.java
index d282a49..b09b771 100644
--- a/user/src/com/google/gwt/xml/client/impl/XMLParserImplIE6.java
+++ b/user/src/com/google/gwt/xml/client/impl/XMLParserImplIE6.java
@@ -87,10 +87,12 @@
     }
   }-*/;
 
+  @Override
   protected String toStringImpl(ProcessingInstructionImpl node) {
     return toStringImpl((NodeImpl) node);
   }
   
+  @Override
   protected native String toStringImpl(NodeImpl node) /*-{
     var jsNode = node.@com.google.gwt.xml.client.impl.DOMItem::getJsObject()();
     return jsNode.xml;
diff --git a/user/src/com/google/gwt/xml/client/impl/XMLParserImplStandard.java b/user/src/com/google/gwt/xml/client/impl/XMLParserImplStandard.java
index 89b3801..2c54dbc 100644
--- a/user/src/com/google/gwt/xml/client/impl/XMLParserImplStandard.java
+++ b/user/src/com/google/gwt/xml/client/impl/XMLParserImplStandard.java
@@ -74,10 +74,12 @@
     return result;
   }-*/;
  
+  @Override
   protected String toStringImpl(ProcessingInstructionImpl node) {
     return toStringImpl((NodeImpl) node);
   }
   
+  @Override
   protected native String toStringImpl(NodeImpl node) /*-{
     var jsNode = node.@com.google.gwt.xml.client.impl.DOMItem::getJsObject()();
     return new XMLSerializer().serializeToString(jsNode);
