Juan Domínguez González opened SPR-16929 and commented
When parsing an expression which combines null-safe and list/array navigation it fails with a parse exception.
Example: accessing first element of a (possibly null) list/array of strings: stringList?[0]
org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'select(?[)
I'm not sure if the syntax I've used is correct, but, to me it seems the most natural one.
Combining the null safe operator and navigation using get, seems to work: e.j: stringList?.get(0)
Alternative syntaxes, such as (stringList?)[0]
or stringList?.[0]
, also fail to compile..
Affects: 4.3.16
Comment From: sbrannen
@aclement, ping.
Comment From: renjfk
Well, if it's only matter of accessing null-safe first/last element listOrArray?.^[true]
and listOrArray?.$[true]
should do the trick as workaround.
Comment From: john-liu
I also want this feature, to support a safe index navigation.
Just like groovy did in 3.0: use ?[]
to support safe index navigation.
https://groovy-lang.org/operators.html#_safe_index_operator
Comment From: Trympyrym
This syntax clashes with collection selection in case of collection is context root.
Its hard to decide if ?[expr]
(not collection.?[expr]
) is selection by boolean expr or null-safe indexer by integer expr. Its possible when expr
is boolean or int literal, but in case of ?[callSmth()]
i have no idea how to implement this without great rework
Comment From: Trympyrym
However implementing syntax like stringList?.[0]
seems much easier, reusing SAFE_NAVI token
Comment From: sbrannen
- superseded by #29847