Fixes a bug where JsOptional on override may fail

Change-Id: Ie2dac46b6839e179eb6a009d0f2f254306b157dc
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
index 23f52db..9be73e6 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/JsInteropRestrictionChecker.java
@@ -443,6 +443,10 @@
   }
 
   private void checkMethodParameters(JMethod method) {
+    if (method.isSynthetic()) {
+      return;
+    }
+
     boolean hasOptionalParameters = false;
     for (JParameter parameter : method.getParams()) {
       if (parameter.isOptional()) {
diff --git a/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java b/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
index f1546d5..36ad71d 100644
--- a/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
+++ b/dev/core/test/com/google/gwt/dev/jjs/impl/JsInteropRestrictionCheckerTest.java
@@ -1659,6 +1659,24 @@
     assertBuggySucceeds();
   }
 
+  public void testJsOptionalOverrideSucceeds() throws Exception {
+    addSnippetImport("jsinterop.annotations.JsMethod");
+    addSnippetImport("jsinterop.annotations.JsOptional");
+    addSnippetClassDecl(
+        "public static class Parent {",
+        "  @JsMethod public void foo(@JsOptional String c) {}",
+        "  @JsMethod public Object bar(@JsOptional String c) { return null; }",
+        "}",
+        "public static class Buggy extends Parent {",
+        "  @Override",
+        "  @JsMethod public void foo(@JsOptional String c) {}",
+        "  @Override",
+        "  @JsMethod public String bar(@JsOptional String c) { return null; }",
+        "}");
+
+    assertBuggySucceeds();
+  }
+
   public void testJsOptionalWithVarargsSucceeds() throws Exception {
     addSnippetImport("jsinterop.annotations.JsMethod");
     addSnippetImport("jsinterop.annotations.JsOptional");