@Override public DSLExpression reduce(DSLExpressionReducer reducer) { DSLExpression newReceiver = null; if (receiver != null) { newReceiver = receiver.reduceImpl(reducer); } boolean parameterChanged = false; List<DSLExpression> newParameters = new ArrayList<>(); for (DSLExpression param : getParameters()) { DSLExpression newParam = param.reduceImpl(reducer); if (newParam != param) { parameterChanged = true; newParameters.add(newParam); } else { newParameters.add(param); } } Call c = this; if (newReceiver != receiver || parameterChanged) { c = new Call(newReceiver, getName(), newParameters); c.setResolvedMethod(getResolvedMethod()); c.setResolvedTargetType(getResolvedTargetType()); } return reducer.visitCall(c); }
@Override public DSLExpression reduce(DSLExpressionReducer reducer) { DSLExpression newReceiver = null; if (receiver != null) { newReceiver = receiver.reduceImpl(reducer); } Variable c = this; if (newReceiver != receiver) { c = new Variable(newReceiver, getName()); c.setResolvedTargetType(getResolvedTargetType()); c.setResolvedVariable(getResolvedVariable()); } return reducer.visitVariable(c); }
@Override public DSLExpression reduce(DSLExpressionReducer reducer) { DSLExpression newLeft = left.reduceImpl(reducer); DSLExpression newRight = right.reduceImpl(reducer); Binary b = this; if (newLeft != left || newRight != right) { b = new Binary(getOperator(), newLeft, newRight); b.setResolvedTargetType(getResolvedTargetType()); b.setResolvedType(getResolvedType()); } return reducer.visitBinary(b); }