private boolean isStaticAccessor(AccessorNode accessorNode) { while (accessorNode != null) { if (accessorNode instanceof StaticVarAccessor || accessorNode instanceof StaticReferenceAccessor) { return true; } if (accessorNode instanceof MethodAccessor) { Method method = ((MethodAccessor)accessorNode).getMethod(); return (method.getModifiers() & Modifier.STATIC) > 0; } accessorNode = accessorNode.getNextNode(); } return false; }
private EvaluatedExpression analyzeExpressionNode(AccessorNode accessorNode, ASTNode containingNode, Class<?> variableType) { if (accessorNode == null) return null; EvaluatedExpression expression = new EvaluatedExpression(); Invocation invocation = null; while (accessorNode != null) { invocation = analyzeAccessorInvocation(accessorNode, containingNode, invocation, variableType); if (invocation != null) { expression.addInvocation(invocation); } accessorNode = accessorNode.getNextNode(); } return expression; }
if (isStaticAccessor(accessorNode)) { while (accessorNode instanceof VariableAccessor) { accessorNode = accessorNode.getNextNode(); StaticReferenceAccessor staticReferenceAccessor = ((StaticReferenceAccessor)accessorNode); Object literal = staticReferenceAccessor.getLiteral(); accessorNode = accessorNode.getNextNode(); if (accessorNode == null) { return new FixedExpression(literal.getClass(), literal);
private Method extractMethod(WithNode.ParmValuePair parmValuePair) { Serializable setExpression = parmValuePair.getSetExpression(); if (setExpression != null) { SetterAccessor setterAccessor = (SetterAccessor)((CompiledAccExpression) setExpression).getAccessor(); return setterAccessor.getMethod(); } else { ExecutableAccessor accessor = (ExecutableAccessor)parmValuePair.getStatement(); AccessorNode accessorNode = (AccessorNode)accessor.getNode().getAccessor(); MethodAccessor methodAccessor = (MethodAccessor)accessorNode.getNextNode(); return methodAccessor.getMethod(); } }
while (accessorNode != null) { expression.addInvocation(analyzeAccessorInvocation(accessorNode, node, null, null)); accessorNode = accessorNode.getNextNode(); analyzeExpressionNode(((AccessorNode) accessor).getNextNode(),node,variableType), variableType != null ? variableType : node.getEgressType());
return new ThisInvocation(accessorNode.getNextNode() == null ? containingNode.getEgressType() : Object.class);