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();
+  }-*/;
 }