@Override public void visitConstructorCallExpression(final ConstructorCallExpression cce) { if (!insideScriptBody || !cce.isUsingAnonymousInnerClass()) return; ConstructorCallExpression old = currentAIC; currentAIC = cce; Expression newArgs = transform(cce.getArguments()); if (cce.getArguments() instanceof TupleExpression && newArgs instanceof TupleExpression) { List<Expression> argList = ((TupleExpression) cce.getArguments()).getExpressions(); argList.clear(); argList.addAll(((TupleExpression) newArgs).getExpressions()); } currentAIC = old; }
public Expression transformExpression(ExpressionTransformer transformer) { Expression args = transformer.transform(arguments); ConstructorCallExpression ret = new ConstructorCallExpression(getType(), args); ret.setSourcePosition(this); ret.setUsingAnonymousInnerClass(isUsingAnonymousInnerClass()); ret.copyNodeMetaData(this); return ret; }
protected boolean writeAICCall(ConstructorCallExpression call) { if (!call.isUsingAnonymousInnerClass()) return false; ConstructorNode cn = call.getType().getDeclaredConstructors().get(0); OperandStack os = controller.getOperandStack();
@Override public void visitConstructorCallExpression(ConstructorCallExpression call) { super.visitConstructorCallExpression(call); if (!call.isUsingAnonymousInnerClass()) { passThisReference(call); return;
super.visitConstructorCallExpression(call); isSpecialConstructorCall = false; if (!call.isUsingAnonymousInnerClass()) return;
} else if (expr instanceof ConstructorCallExpression) { ConstructorCallExpression cce = (ConstructorCallExpression) expr; if (cce.isUsingAnonymousInnerClass()) { cce.getType().visitContents(this);
public Expression transformExpression(ExpressionTransformer transformer) { Expression args = transformer.transform(arguments); ConstructorCallExpression ret = new ConstructorCallExpression(getType(), args); ret.setSourcePosition(this); ret.setUsingAnonymousInnerClass(isUsingAnonymousInnerClass()); return ret; }
private boolean writeAICCall(ConstructorCallExpression call) { if (!call.isUsingAnonymousInnerClass()) return false; ConstructorNode cn = call.getType().getDeclaredConstructors().get(0); OperandStack os = controller.getOperandStack(); String ownerDescriptor = prepareConstructorCall(cn); List<Expression> args = makeArgumentList(call.getArguments()).getExpressions(); Parameter[] params = cn.getParameters(); for (int i=0; i<params.length; i++) { Parameter p = params[i]; Expression arg = args.get(i); if (arg instanceof VariableExpression) { VariableExpression var = (VariableExpression) arg; loadVariableWithReference(var); } else { arg.visit(controller.getAcg()); } os.doGroovyCast(p.getType()); } finnishConstructorCall(cn, ownerDescriptor, args.size()); return true; }
@Override public void visitConstructorCallExpression(ConstructorCallExpression call) { super.visitConstructorCallExpression(call); if (!call.isUsingAnonymousInnerClass()) { passThisReference(call); return;
public void visitConstructorCallExpression(ConstructorCallExpression call) { isSpecialConstructorCall = call.isSpecialCall(); super.visitConstructorCallExpression(call); isSpecialConstructorCall = false; if (!call.isUsingAnonymousInnerClass()) return; pushState(); InnerClassNode innerClass = (InnerClassNode) call.getType(); innerClass.setVariableScope(currentScope); for (MethodNode method : innerClass.getMethods()) { Parameter[] parameters = method.getParameters(); if (parameters.length == 0) parameters = null; // null means no implicit "it" ClosureExpression cl = new ClosureExpression(parameters, method.getCode()); visitClosureExpression(cl); } for (FieldNode field : innerClass.getFields()) { final Expression expression = field.getInitialExpression(); if (expression != null) { expression.visit(this); } } for (Statement statement : innerClass.getObjectInitializerStatements()) { statement.visit(this); } markClosureSharedVariables(); popState(); }