Fix ICE related to bad coverage instrumentation.
Even though bodies of JSNI methods are not instrumented for coverage,
the compiler would ICE if they contained non empty object literals.
Change-Id: Idb10d41bb4f383d3eeb9822713533e9e4a9174b2
diff --git a/dev/core/src/com/google/gwt/dev/js/CoverageVisitor.java b/dev/core/src/com/google/gwt/dev/js/CoverageVisitor.java
index 29d0bbb..a8f739f 100644
--- a/dev/core/src/com/google/gwt/dev/js/CoverageVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/CoverageVisitor.java
@@ -27,6 +27,7 @@
import com.google.gwt.dev.js.ast.JsNode;
import com.google.gwt.dev.js.ast.JsPostfixOperation;
import com.google.gwt.dev.js.ast.JsPrefixOperation;
+import com.google.gwt.dev.js.ast.JsPropertyInitializer;
import com.google.gwt.dev.js.ast.JsUnaryOperator;
import com.google.gwt.dev.js.ast.JsWhile;
import com.google.gwt.thirdparty.guava.common.collect.Sets;
@@ -115,6 +116,12 @@
return true;
}
+ @Override public boolean visit(JsPropertyInitializer x, JsContext ctx) {
+ // Do not instrument labels.
+ x.setValueExpr(accept(x.getValueExpr()));
+ return false;
+ }
+
@Override public boolean visit(JsPrefixOperation x, JsContext ctx) {
if (x.getOperator() == JsUnaryOperator.DELETE
|| x.getOperator() == JsUnaryOperator.TYPEOF) {
@@ -158,4 +165,4 @@
lastFile = x.getSourceInfo().getFileName();
endVisit(x, ctx);
}
-}
\ No newline at end of file
+}
diff --git a/user/test/com/google/gwt/dev/js/client/CoverageTest.java b/user/test/com/google/gwt/dev/js/client/CoverageTest.java
index 77edb5b..52f5c15 100644
--- a/user/test/com/google/gwt/dev/js/client/CoverageTest.java
+++ b/user/test/com/google/gwt/dev/js/client/CoverageTest.java
@@ -34,6 +34,7 @@
put("27", 1.0);
put("29", 1.0);
put("31", 0.0);
+ put("33", 1.0);
}};
@Override
diff --git a/user/test/com/google/gwt/dev/js/client/CoverageTestModule.java b/user/test/com/google/gwt/dev/js/client/CoverageTestModule.java
index bf6d2fc..14dc78a 100644
--- a/user/test/com/google/gwt/dev/js/client/CoverageTestModule.java
+++ b/user/test/com/google/gwt/dev/js/client/CoverageTestModule.java
@@ -30,5 +30,16 @@
} else {
GWT.log("This line should not be covered");
}
+ jsniMethod();
}
+
+ public static native void jsniMethod() /*-{
+ // There is no coverage for jsni method bodies but compilation should not fail.
+ var obj = {
+ m : function() {
+ return 1;
+ }
+ };
+ obj.m();
+ }-*/;
}