提交 e2ffac9a 编写于 作者: A Andy Clement

fixed to not throw classcastexception if condition doesnt evaluate to boolean

上级 144325eb
...@@ -17,8 +17,8 @@ package org.springframework.expression.spel.ast; ...@@ -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 { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册