public UExpression template(ExpressionTree tree) { return (UExpression) tree.accept(this, null); }
@Override public Description visitExpressionStatement(ExpressionStatementTree node, Void aVoid) { return node.getExpression().accept(this, null); } }
public static boolean hasSideEffect(ExpressionTree expression) { SideEffectAnalysis analyzer = new SideEffectAnalysis(); if (expression == null) { return false; } expression.accept(analyzer, null); return analyzer.hasSideEffect; }
@Override public Number visitParenthesized(ParenthesizedTree node, Void p) { return node.getExpression().accept(this, null); }
@Override public Boolean visitExpressionStatement(ExpressionStatementTree node, VisitorState state) { return node.getExpression().accept(this, state); }
@Override public GuardedByExpression visitParenthesized( ParenthesizedTree node, BinderContext context) { return node.getExpression().accept(this, context); }
@Override public Void visitReturn(ReturnTree node, VisitorState state) { return node.getExpression().accept(visitReturnExpression, state); } },
@Override public Boolean visitReturn(ReturnTree node, VisitorState state) { return node.getExpression().accept(this, state); }
@Override public Boolean visitMemberSelect(MemberSelectTree node, Void p) { return node.getExpression().accept(this, null); }
@Override public Tree visitParenthesized(ParenthesizedTree node, Void v) { return node.getExpression().accept(this, null); }
@Override public Boolean visitUnary(UnaryTree node, Void aVoid) { return node.getExpression().accept(this, null); }
static Boolean scan(ExpressionTree tree, VisitorState state) { ValidByteBufferInitializerScanner visitor = new ValidByteBufferInitializerScanner(); return firstNonNull(tree.accept(visitor, state), false); }
@Override public Number visitConditionalExpression(ConditionalExpressionTree node, Void p) { Number ifTrue = node.getTrueExpression().accept(this, null); Number ifFalse = node.getFalseExpression().accept(this, null); Boolean condition = ASTHelpers.constValue(node.getCondition(), Boolean.class); if (condition == null) { return null; } return condition ? ifTrue : ifFalse; }
@Override public Number visitUnary(UnaryTree node, Void p) { Number value = node.getExpression().accept(this, null); if (value == null) { return value; } if (value instanceof Long) { return unop(node.getKind(), value.longValue()); } else { return unop(node.getKind(), value.intValue()); } }
@Override public Boolean visitUnary(UnaryTree node, Void aVoid) { Boolean r = node.getExpression().accept(this, null); if (r == null) { return null; } switch (node.getKind()) { case LOGICAL_COMPLEMENT: return !r; default: return null; } } };
/** * Returns all the ways this placeholder invocation might unify with the specified tree: either by * unifying the entire tree with an argument to the placeholder invocation, or by recursing on the * subtrees. */ @SuppressWarnings("unchecked") public Choice<? extends State<? extends JCExpression>> unifyExpression( @Nullable ExpressionTree node, State<?> state) { if (node == null) { return Choice.of(state.<JCExpression>withResult(null)); } Choice<? extends State<? extends JCExpression>> tryBindArguments = tryBindArguments(node, state); if (!node.accept(FORBIDDEN_REFERENCE_VISITOR, state.unifier())) { return tryBindArguments.or((Choice) node.accept(this, state)); } else { return tryBindArguments; } }
@Override public Number visitTypeCast(TypeCastTree node, Void p) { Number value = node.getExpression().accept(this, null); if (value == null) { return null; } if (!(node.getType() instanceof PrimitiveTypeTree)) { return null; } TypeKind kind = ((PrimitiveTypeTree) node.getType()).getPrimitiveTypeKind(); return cast(kind, value); }