fixed to not throw classcastexception if condition doesnt evaluate to boolean
This commit is contained in:
parent
144325eb06
commit
e2ffac9a7c
|
|
@ -17,8 +17,8 @@ package org.springframework.expression.spel.ast;
|
||||||
|
|
||||||
import org.antlr.runtime.Token;
|
import org.antlr.runtime.Token;
|
||||||
import org.springframework.expression.EvaluationException;
|
import org.springframework.expression.EvaluationException;
|
||||||
import org.springframework.expression.spel.SpelException;
|
|
||||||
import org.springframework.expression.spel.ExpressionState;
|
import org.springframework.expression.spel.ExpressionState;
|
||||||
|
import org.springframework.expression.spel.SpelException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a ternary expression, for example: "someCheck()?true:false".
|
* Represents a ternary expression, for example: "someCheck()?true:false".
|
||||||
|
|
@ -31,18 +31,25 @@ public class Ternary extends SpelNode {
|
||||||
super(payload);
|
super(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Evaluate the condition and if true evaluate the first alternative, otherwise evaluate the second alternative.
|
||||||
|
*
|
||||||
|
* @param state the expression state
|
||||||
|
* @throws EvaluationException if the condition does not evaluate correctly to a boolean or there is a problem
|
||||||
|
* executing the chosen alternative
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Object getValue(ExpressionState state) throws EvaluationException {
|
public Object getValue(ExpressionState state) throws EvaluationException {
|
||||||
Object condition = getChild(0).getValue(state);
|
Boolean b = (Boolean) getChild(0).getValue(state, Boolean.class);
|
||||||
try {
|
try {
|
||||||
boolean b = state.toBoolean(condition);
|
if (b) {
|
||||||
if (b)
|
|
||||||
return getChild(1).getValue(state);
|
return getChild(1).getValue(state);
|
||||||
else
|
} else {
|
||||||
return getChild(2).getValue(state);
|
return getChild(2).getValue(state);
|
||||||
} catch (SpelException see) {
|
}
|
||||||
see.setPosition(getChild(0).getCharPositionInLine());
|
} catch (SpelException ex) {
|
||||||
throw see;
|
ex.setPosition(getChild(0).getCharPositionInLine());
|
||||||
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -52,7 +59,6 @@ public class Ternary extends SpelNode {
|
||||||
.append(" : ").append(getChild(2).toStringAST()).toString();
|
.append(" : ").append(getChild(2).toStringAST()).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 3 should this say TRUE if the left or the right are writable???
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isWritable(ExpressionState expressionState) throws SpelException {
|
public boolean isWritable(ExpressionState expressionState) throws SpelException {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue