public void visitVariable(Variable variable) { List<VariableElement> lookupVariables; DSLExpression receiver = variable.getReceiver(); if (variable.getName().equals("null")) { variable.setResolvedVariable(new CodeVariableElement(new CodeTypeMirror(TypeKind.NULL), "null")); } else { if (variableElement.getSimpleName().toString().equals(variable.getName())) { variable.setResolvedVariable(variableElement); break; throw new InvalidExpressionException(String.format("%s cannot be resolved.", variable.getName()));
public void visitVariable(Variable variable) { List<VariableElement> lookupVariables; DSLExpression receiver = variable.getReceiver(); if (variable.getName().equals("null")) { variable.setResolvedVariable(new CodeVariableElement(new CodeTypeMirror(TypeKind.NULL), "null")); } else { if (variableElement.getSimpleName().toString().equals(variable.getName())) { variable.setResolvedVariable(variableElement); break; throw new InvalidExpressionException(String.format("%s cannot be resolved.", variable.getName()));
DSLExpression MemberExpression(DSLExpression receiver) { DSLExpression result; result = null; Expect(1); Variable variable = new Variable(receiver, t.val); result = variable; if (la.kind == 11) { Get(); List<DSLExpression> parameters = new ArrayList<>(); DSLExpression parameter; if (StartOf(2)) { parameter = Expression(); parameters.add(parameter); while (la.kind == 13) { Get(); parameter = Expression(); parameters.add(parameter); } } Expect(12); result = new Call(variable.getReceiver(), variable.getName(), parameters); } if (la.kind == 14) { Get(); result = MemberExpression(result); } return result; }
DSLExpression MemberExpression(DSLExpression receiver) { DSLExpression result; result = null; Expect(1); Variable variable = new Variable(receiver, t.val); result = variable; if (la.kind == 11) { Get(); List<DSLExpression> parameters = new ArrayList<>(); DSLExpression parameter; if (StartOf(2)) { parameter = Expression(); parameters.add(parameter); while (la.kind == 13) { Get(); parameter = Expression(); parameters.add(parameter); } } Expect(12); result = new Call(variable.getReceiver(), variable.getName(), parameters); } if (la.kind == 14) { Get(); result = MemberExpression(result); } return result; }
private boolean isVariableAccessMember(Variable variable) { if (variable.getName().equals("null") && variable.getReceiver() == null) { return false; } Parameter p = specialization.findByVariable(variable.getResolvedVariable()); if (p == null && !variable.getResolvedVariable().getModifiers().contains(STATIC)) { DSLExpression receiver = variable.getReceiver(); if (receiver instanceof Variable) { return isVariableAccessMember((Variable) receiver); } else if (receiver instanceof Call) { return isMethodAccessMember((Call) receiver); } return true; } else if (p != null && p.getSpecification().isCached()) { return true; } return false; }
@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); }