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