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 >>>> >>>> >>> >