static Expression optimize(Expression expression) { return expression.accept(new OptimizeShuttle()); }
switch (binary.getNodeType()) { case AndAlso: always = always(expression0); if (always != null) { return always always = always(expression0); if (always != null) { if (isConstantNull(expression1) && isKnownNotNull(expression0)) { return FALSE_EXPR; always = always(expression0); if (always != null) { return always ? expression1 : Expressions.not(expression1); if (isConstantNull(expression1) && isKnownNotNull(expression0)) { return TRUE_EXPR; always = always(expression0); if (always != null) { return always ? Expressions.not(expression1) : expression1;
switch (ternary.getNodeType()) { case Conditional: Boolean always = always(expression0); if (always != null) { always = always(expression1); if (always != null && isKnownNotNull(expression2)) { return (always ? Expressions.orElse(expression0, expression2) always = always(expression2); if (always != null && isKnownNotNull(expression1)) { return (always ? Expressions.orElse(Expressions.not(expression0), BinaryExpression cmp = (BinaryExpression) expression0; Expression expr = null; if (eq(cmp.expression0, expression2) && eq(cmp.expression1, expression1)) { ? expression2 : expression1; if (eq(cmp.expression0, expression1) && eq(cmp.expression1, expression2)) {
case AndAlso: case OrElse: if (eq(expression0, expression1)) { return expression0; case Equal: case NotEqual: if (eq(expression0, expression1)) { return binary.getNodeType() == Equal ? TRUE_EXPR : FALSE_EXPR; } else if (expression0 instanceof ConstantExpression && expression1 TernaryExpression ternary = (TernaryExpression) expression0; Expression expr = null; if (eq(ternary.expression1, expression1)) { } else if (eq(ternary.expression2, expression1)) { result = visit0(binary, expression0, expression1); if (result != null) { return result; result = visit0(binary, expression1, expression0); if (result != null) { return result;
@Override public Expression visit(MethodCallExpression methodCallExpression, Expression targetExpression, List<Expression> expressions) { if (BOOLEAN_VALUEOF_BOOL.equals(methodCallExpression.method)) { Boolean always = always(expressions.get(0)); if (always != null) { return always ? TRUE_EXPR : FALSE_EXPR; } } return super.visit(methodCallExpression, targetExpression, expressions); }
/** * Returns whether an expression always returns a non-null result. * For instance, primitive types cannot contain null values. * * @param expression expression to test * @return true when the expression is known to be not-null */ protected boolean isKnownNotNull(Expression expression) { return Primitive.is(expression.getType()) || always(expression) != null || (expression instanceof MethodCallExpression && KNOWN_NON_NULL_METHODS.contains( ((MethodCallExpression) expression).method)); }
static Expression optimize(Expression expression) { return expression.accept(new OptimizeShuttle()); }
Boolean always = always(expression); if (always != null) { return always ? FALSE_EXPR : TRUE_EXPR;