P.S. Just in case someone else has the same problem — as I am playing with 
that, preliminarily it looks like the solution for a big codebase might be an 
ASTT which would list the positions of all the real safe indices; this ASTT 
would be run under Groovy 3 and its output would be then used with a script to 
automatically add spaces to all the ?['s which are not on the list.

Still, if Groovy 4.0.5 could fix the problem and parse this same way G3 did, it 
would be worlds easier :)

All the best,
OC

> On 9. 9. 2022, at 14:56, o...@ocs.cz wrote:
> 
> Daniel,
> 
>> On 9. 9. 2022, at 1:30, Daniel Sun <sun...@apache.org> wrote:
>> Add a space between ? and [
>> p ? [0] : [1]
> 
> Well thanks, but that really helps with new code only. On the other hand, 
> with the existing codebase it is a royal PITA. Can't do that automatically, 
> for I am afraid no regexp could reliably distinguish a real safe index from a 
> ternary which returns a list or a map (actually, yesterday I've done this 
> manually in one smaller project so that I can test Groovy 4 further — and 
> even doing it manually I've made two mistakes of this kind).
> 
> All the best,
> OC
> 
>> On 2022/09/08 13:39:21 Christopher Smith wrote:
>>> The parser seems to be interpreting what you mean as a ternary as a
>>> null-safe array index.
>>> 
>>> On Thu, Sep 8, 2022, 08:37 o...@ocs.cz <o...@ocs.cz> wrote:
>>> 
>>>> Hi there,
>>>> 
>>>> I've just decided it's time to upgrade from Groovy 3 to Groovy 4... and
>>>> immediately bumped into a problem, which looks like a parser bug in an
>>>> extremely trivial scenario, which seems weird.
>>>> 
>>>> Do I perhaps miss something? I've checked
>>>> https://groovy-lang.org/releasenotes/groovy-4.0.html#Groovy4.0-breaking,
>>>> but in vain :(
>>>> 
>>>> ===
>>>> 2012 ocs /tmp> <q.groovy
>>>> def p
>>>> def x=p?[0]:[1]
>>>> println "got $x"
>>>> 2013 ocs /tmp> /usr/local/groovy-3.0.12/bin/groovy q
>>>> got [1]
>>>> 2014 ocs /tmp> /usr/local/groovy-4.0.4/bin/groovy q
>>>> org.codehaus.groovy.control.MultipleCompilationErrorsException: startup
>>>> failed:
>>>> /private/tmp/q.groovy: 2: Unexpected input: ':' @ line 2, column 12.
>>>>  def x=p?[0]:[1]
>>>>             ^
>>>> 
>>>> 1 error
>>>> 
>>>> 2015 ocs /tmp>
>>>> ===
>>>> 
>>>> Thanks for any insight,
>>>> OC
>>>> 
>>>> 
>>> 
> 

Reply via email to