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);