@@ -4898,6 +4898,71 @@ public void elvisOperator_SPR15192() {
4898
4898
assertIsCompiled (exp );
4899
4899
}
4900
4900
4901
+
4902
+ @ Test
4903
+ public void elvisOperator_SPR17214 () throws Exception {
4904
+ SpelParserConfiguration spc = new SpelParserConfiguration (SpelCompilerMode .IMMEDIATE , null );
4905
+ SpelExpressionParser sep = new SpelExpressionParser (spc );
4906
+
4907
+ RecordHolder rh = null ;
4908
+
4909
+ expression = sep .parseExpression ("record.get('abc')?:record.put('abc',expression.someLong?.longValue())" );
4910
+ rh = new RecordHolder ();
4911
+ assertNull (expression .getValue (rh ));
4912
+ assertEquals (3L ,expression .getValue (rh ));
4913
+ assertCanCompile (expression );
4914
+ rh = new RecordHolder ();
4915
+ assertNull (expression .getValue (rh ));
4916
+ assertEquals (3L ,expression .getValue (rh ));
4917
+
4918
+ expression = sep .parseExpression ("record.get('abc')?:record.put('abc',3L.longValue())" );
4919
+ rh = new RecordHolder ();
4920
+ assertNull (expression .getValue (rh ));
4921
+ assertEquals (3L ,expression .getValue (rh ));
4922
+ assertCanCompile (expression );
4923
+ rh = new RecordHolder ();
4924
+ assertNull (expression .getValue (rh ));
4925
+ assertEquals (3L ,expression .getValue (rh ));
4926
+
4927
+ expression = sep .parseExpression ("record.get('abc')?:record.put('abc',3L.longValue())" );
4928
+ rh = new RecordHolder ();
4929
+ assertNull (expression .getValue (rh ));
4930
+ assertEquals (3L ,expression .getValue (rh ));
4931
+ assertCanCompile (expression );
4932
+ rh = new RecordHolder ();
4933
+ assertNull (expression .getValue (rh ));
4934
+ assertEquals (3L ,expression .getValue (rh ));
4935
+
4936
+ expression = sep .parseExpression ("record.get('abc')==null?record.put('abc',expression.someLong?.longValue()):null" );
4937
+ rh = new RecordHolder ();
4938
+ rh .expression .someLong =6L ;
4939
+ assertNull (expression .getValue (rh ));
4940
+ assertEquals (6L ,rh .get ("abc" ));
4941
+ assertNull (expression .getValue (rh ));
4942
+ assertCanCompile (expression );
4943
+ rh = new RecordHolder ();
4944
+ rh .expression .someLong =6L ;
4945
+ assertNull (expression .getValue (rh ));
4946
+ assertEquals (6L ,rh .get ("abc" ));
4947
+ assertNull (expression .getValue (rh ));
4948
+ }
4949
+
4950
+ public static class RecordHolder {
4951
+ public void add (String key , Long value ) {
4952
+ record .put (key , value );
4953
+ }
4954
+ public long get (String key ) {
4955
+ return record .get (key );
4956
+ }
4957
+ public Map <String ,Long > record = new HashMap <>();
4958
+ public LongHolder expression = new LongHolder ();
4959
+
4960
+ }
4961
+
4962
+ public static class LongHolder {
4963
+ public Long someLong = 3L ;
4964
+ }
4965
+
4901
4966
@ Test
4902
4967
public void ternaryOperator_SPR15192 () {
4903
4968
SpelParserConfiguration configuration = new SpelParserConfiguration (SpelCompilerMode .IMMEDIATE , null );
0 commit comments