support for concatenation with String via operator '+' - for Ramnivas.
This commit is contained in:
parent
a32448da02
commit
7e05c928dd
|
|
@ -73,6 +73,14 @@ public class OpPlus extends Operator {
|
|||
}
|
||||
} else if (operandOne instanceof String && operandTwo instanceof String) {
|
||||
return new TypedValue(new StringBuilder((String) operandOne).append((String) operandTwo).toString(),STRING_TYPE_DESCRIPTOR);
|
||||
} else if (operandOne instanceof String) {
|
||||
StringBuilder result = new StringBuilder((String)operandOne);
|
||||
result.append((operandTwo==null?"null":operandTwo.toString()));
|
||||
return new TypedValue(result.toString(),STRING_TYPE_DESCRIPTOR);
|
||||
} else if (operandTwo instanceof String) {
|
||||
StringBuilder result = new StringBuilder((operandOne==null?"null":operandOne.toString()));
|
||||
result.append((String)operandTwo);
|
||||
return new TypedValue(result.toString(),STRING_TYPE_DESCRIPTOR);
|
||||
}
|
||||
return state.operate(Operation.ADD, operandOne, operandTwo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ public class OperatorOverloaderTests extends ExpressionTestCase {
|
|||
@Test
|
||||
public void testSimpleOperations() throws Exception {
|
||||
// no built in support for this:
|
||||
evaluateAndCheckError("'abc'+true",SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
evaluateAndCheckError("'abc'-true",SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
|
||||
StandardEvaluationContext eContext = TestScenarioCreator.getTestEvaluationContext();
|
||||
eContext.setOperatorOverloader(new StringAndBooleanAddition());
|
||||
|
|
@ -65,5 +65,8 @@ public class OperatorOverloaderTests extends ExpressionTestCase {
|
|||
|
||||
expr = (SpelExpression)parser.parseExpression("'abc'-true");
|
||||
Assert.assertEquals("abc",expr.getValue(eContext));
|
||||
|
||||
expr = (SpelExpression)parser.parseExpression("'abc'+null");
|
||||
Assert.assertEquals("abcnull",expr.getValue(eContext));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -153,9 +153,10 @@ public class OperatorTests extends ExpressionTestCase {
|
|||
evaluate("3.0f + 5.0f", 8.0d, Double.class);
|
||||
evaluate("3.0d + 5.0d", 8.0d, Double.class);
|
||||
|
||||
evaluateAndCheckError("'ab' + 2", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
evaluateAndCheckError("2+'a' ", SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
evaluateAndCheckError("2+'ab'",SpelMessage.OPERATOR_NOT_SUPPORTED_BETWEEN_TYPES);
|
||||
evaluate("'ab' + 2", "ab2", String.class);
|
||||
evaluate("2 + 'a'", "2a", String.class);
|
||||
evaluate("'ab' + null", "abnull", String.class);
|
||||
evaluate("null + 'ab'", "nullab", String.class);
|
||||
|
||||
// AST:
|
||||
SpelExpression expr = (SpelExpression)parser.parseExpression("+3");
|
||||
|
|
|
|||
Loading…
Reference in New Issue