support for concatenation with String via operator '+' - for Ramnivas.

master
Andy Clement 15 years ago
parent a32448da02
commit 7e05c928dd
  1. 8
      org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/OpPlus.java
  2. 5
      org.springframework.expression/src/test/java/org/springframework/expression/spel/OperatorOverloaderTests.java
  3. 7
      org.springframework.expression/src/test/java/org/springframework/expression/spel/OperatorTests.java

@ -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…
Cancel
Save