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");