JsNew's constructor target expression should be immutable.
http://gwt-code-reviews.appspot.com/154806/show
Review by: cromwellian
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7637 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
index 6e42209..58d86ac 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java
@@ -1102,9 +1102,8 @@
@Override
public void endVisit(JNewInstance x, Context ctx) {
- JsNew newOp = new JsNew(x.getSourceInfo());
JsNameRef nameRef = names.get(x.getClassType()).makeRef(x.getSourceInfo());
- newOp.setConstructorExpression(nameRef);
+ JsNew newOp = new JsNew(x.getSourceInfo(), nameRef);
push(newOp);
}
@@ -1600,10 +1599,9 @@
lhs.setQualifier(seedFuncName.makeRef(sourceInfo));
JsExpression rhs;
if (x.getSuperClass() != null) {
- JsNew newExpr = new JsNew(sourceInfo);
JsNameRef superPrototypeRef = names.get(x.getSuperClass()).makeRef(
sourceInfo);
- newExpr.setConstructorExpression(superPrototypeRef);
+ JsNew newExpr = new JsNew(sourceInfo, superPrototypeRef);
rhs = newExpr;
} else {
rhs = new JsObjectLiteral(sourceInfo);
diff --git a/dev/core/src/com/google/gwt/dev/js/JsHoister.java b/dev/core/src/com/google/gwt/dev/js/JsHoister.java
index 0faadde..15113e9 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsHoister.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsHoister.java
@@ -39,6 +39,7 @@
import com.google.gwt.dev.js.ast.JsThisRef;
import com.google.gwt.dev.js.ast.JsVisitor;
+import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
@@ -151,14 +152,13 @@
@Override
public void endVisit(JsNew x, JsContext<JsExpression> ctx) {
- JsNew toReturn = new JsNew(x.getSourceInfo());
-
- List<JsExpression> arguments = toReturn.getArguments();
int size = x.getArguments().size();
+ List<JsExpression> arguments = new ArrayList<JsExpression>(size);
while (size-- > 0) {
arguments.add(0, stack.pop());
}
- toReturn.setConstructorExpression(stack.pop());
+ JsNew toReturn = new JsNew(x.getSourceInfo(), stack.pop());
+ toReturn.getArguments().addAll(arguments);
stack.push(toReturn);
}
diff --git a/dev/core/src/com/google/gwt/dev/js/JsParser.java b/dev/core/src/com/google/gwt/dev/js/JsParser.java
index 7fdde5b..0e5d5ce 100644
--- a/dev/core/src/com/google/gwt/dev/js/JsParser.java
+++ b/dev/core/src/com/google/gwt/dev/js/JsParser.java
@@ -807,14 +807,12 @@
}
private JsNew mapNew(Node newNode) throws JsParserException {
-
- JsNew newExpr = new JsNew(makeSourceInfo(newNode));
-
// Map the constructor expression, which is often just the name of
// some lambda.
//
Node fromCtorExpr = newNode.getFirstChild();
- newExpr.setConstructorExpression(mapExpression(fromCtorExpr));
+ JsNew newExpr = new JsNew(makeSourceInfo(newNode),
+ mapExpression(fromCtorExpr));
// Iterate over and map the arguments.
//
diff --git a/dev/core/src/com/google/gwt/dev/js/ast/JsNew.java b/dev/core/src/com/google/gwt/dev/js/ast/JsNew.java
index 19f8a51..159a6a4 100644
--- a/dev/core/src/com/google/gwt/dev/js/ast/JsNew.java
+++ b/dev/core/src/com/google/gwt/dev/js/ast/JsNew.java
@@ -29,8 +29,9 @@
private JsExpression ctorExpr;
- public JsNew(SourceInfo sourceInfo) {
+ public JsNew(SourceInfo sourceInfo, JsExpression ctorExpr) {
super(sourceInfo);
+ this.ctorExpr = ctorExpr;
}
public List<JsExpression> getArguments() {
@@ -58,10 +59,6 @@
return false;
}
- public void setConstructorExpression(JsExpression ctorExpr) {
- this.ctorExpr = ctorExpr;
- }
-
public void traverse(JsVisitor v, JsContext<JsExpression> ctx) {
if (v.visit(this, ctx)) {
ctorExpr = v.accept(ctorExpr);