Search in sources :

Example 1 with BooleanTypedValue

use of org.springframework.expression.spel.support.BooleanTypedValue in project spring-framework by spring-projects.

the class OperatorInstanceof method getValueInternal.

/**
 * Compare the left operand to see it is an instance of the type specified as the
 * right operand. The right operand must be a class.
 * @param state the expression state
 * @return {@code true} if the left operand is an instanceof of the right operand,
 * otherwise {@code false}
 * @throws EvaluationException if there is a problem evaluating the expression
 */
@Override
public BooleanTypedValue getValueInternal(ExpressionState state) throws EvaluationException {
    SpelNodeImpl rightOperand = getRightOperand();
    TypedValue left = getLeftOperand().getValueInternal(state);
    TypedValue right = rightOperand.getValueInternal(state);
    Object leftValue = left.getValue();
    Object rightValue = right.getValue();
    BooleanTypedValue result;
    if (!(rightValue instanceof Class)) {
        throw new SpelEvaluationException(getRightOperand().getStartPosition(), SpelMessage.INSTANCEOF_OPERATOR_NEEDS_CLASS_OPERAND, (rightValue == null ? "null" : rightValue.getClass().getName()));
    }
    Class<?> rightClass = (Class<?>) rightValue;
    if (leftValue == null) {
        // null is not an instanceof anything
        result = BooleanTypedValue.FALSE;
    } else {
        result = BooleanTypedValue.forValue(rightClass.isAssignableFrom(leftValue.getClass()));
    }
    this.type = rightClass;
    if (rightOperand instanceof TypeReference) {
        // Can only generate bytecode where the right operand is a direct type reference,
        // not if it is indirect (for example when right operand is a variable reference)
        this.exitTypeDescriptor = "Z";
    }
    return result;
}
Also used : BooleanTypedValue(org.springframework.expression.spel.support.BooleanTypedValue) SpelEvaluationException(org.springframework.expression.spel.SpelEvaluationException) BooleanTypedValue(org.springframework.expression.spel.support.BooleanTypedValue) TypedValue(org.springframework.expression.TypedValue)

Aggregations

TypedValue (org.springframework.expression.TypedValue)1 SpelEvaluationException (org.springframework.expression.spel.SpelEvaluationException)1 BooleanTypedValue (org.springframework.expression.spel.support.BooleanTypedValue)1