Remove trailing parentheses from "new Constructor()" expressions. See http://code.google.com/p/google-web-toolkit/wiki/NewParenthesisRemovalOptimization



git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5685 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 71df4d5..8b0b03e 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsToStringGenerationVisitor.java
@@ -76,6 +76,7 @@
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.List;
 import java.util.regex.Pattern;
 
 /**
@@ -583,16 +584,22 @@
       _rparen();
     }
 
-    _lparen();
-    boolean sep = false;
-    for (Object element : x.getArguments()) {
-      JsExpression arg = (JsExpression) element;
-      sep = _sepCommaOptSpace(sep);
-      _parenPushIfCommaExpr(arg);
-      accept(arg);
-      _parenPopIfCommaExpr(arg);
+    /*
+     * If a constructor call has no arguments, it may simply be
+     * replaced with "new Constructor" with no parentheses.
+     */
+    List<JsExpression> args = x.getArguments();
+    if (args.size() > 0) {
+      _lparen();
+      boolean sep = false;
+      for (JsExpression arg : args) {
+        sep = _sepCommaOptSpace(sep);
+        _parenPushIfCommaExpr(arg);
+        accept(arg);
+        _parenPopIfCommaExpr(arg);
+      }
+      _rparen();
     }
-    _rparen();
 
     return false;
   }