Fix for Issue #3796, "syntax error due to inlining of numeric literal into jsni function". Field or method references on numeric literals only work if the numeric literal is surrounded by parentheses or has a space. "42.foo" is not legal, but "(42).foo" and "42 .foo" are.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5686 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
index 8b0b03e..78dc37c 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -562,6 +562,13 @@
     if (q != null) {
       _parenPush(x, q, false);
       accept(q);
+      if (q instanceof JsNumberLiteral) {
+        /**
+         * Fix for Issue #3796. "42.foo" is not allowed, but
+         * "42 .foo" is.
+         */
+        _space();
+      }
       _parenPop(x, q, false);
       _dot();
     }
diff --git a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
index 4fc4188..b5d3479 100644
--- a/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
+++ b/dev/core/test/com/google/gwt/dev/js/JsToStringGenerationVisitorAccuracyTest.java
@@ -100,6 +100,10 @@
     doTest("new (new (new MyClass()))");
   }
 
+  public void testNumberLiteralNameRef() throws Exception {
+    doTest("(42).nameRef");
+  }
+  
   public void testObjectDeclarationArrayAccess() throws Exception {
     doTest("({ a : 'b'})['a']");
   }