It looks like it was this issue/commit: https://issues.apache.org/jira/browse/GROOVY-8965 https://github.com/apache/groovy/commit/d94ea203ea
So Jim's hunch was right. A fix for a specific issue, fixed a broader set of things. Fragments of the behavior are covered in various STC tests but it does look like we need better test coverage for the dynamic cases. Cheers, Paul. <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> Virus-free.www.avast.com <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> On Tue, Aug 15, 2023 at 3:36 PM Paul King <pa...@asert.com.au> wrote: > Hi Jim, I hope you are well, long time no see, and also hi Ferenc, thanks > for raising the issue. > > I haven't tracked down the actual commit yet but the current behavior > seems correct to me too. It changed in 4.0.5. The release notes for > 4.0.5[1] also don't mention elvis but do mention ternary operator - not the > same thing but share some code paths - though the issues don't look > particularly likely. There are also two issues mentioning casts but again > not likely candidates at face value. The CST for both 4.0.4 and 4.0.5 are > the same, so it's not a grammar thing. Git bisect would probably be the > next step in tracking down the change. > > [1] https://issues.apache.org/jira/projects/GROOVY/versions/12352126 > > > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> > Virus-free.www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> > <#m_-3670125639948008350_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> > > On Tue, Aug 15, 2023 at 2:06 PM Jim White <james.paul.wh...@gmail.com> > wrote: > >> Hi Ferenc, >> >> I don't see anything about that in the release notes either and I tried >> this search in JIRA (text=elvis && status=unresolved | fixed >> <https://issues.apache.org/jira/browse/GROOVY-11014?jql=project%20%3D%20GROOVY%20AND%20resolution%20in%20(Unresolved%2C%20Fixed)%20AND%20text%20~%20%22elvis%22%20ORDER%20BY%20cf%5B12312521%5D%20DESC%2C%20priority%20DESC%2C%20updated%20DESC>) >> which doesn't appear to have anything in the v3 vs v4 timeframe that looks >> related. It is quite plausible that the change involved wasn't specific to >> the elvis operator and is described for some more general change to the >> type system. There is a recent open issue that talks about something >> similar so maybe something has changed not too long ago: >> https://issues.apache.org/jira/browse/GROOVY-11014 >> >> In any case I agree with the SO answer that the v4 behavior is correct >> (i.e. the type of the elvis condition value should only be relevant when it >> is truthy) but I'm not up to date on all the various >> compiler type inference things in Groovy these days. >> >> Notably there don't appear to be any type inference related tests for the >> elvis operator: >> >> https://github.com/apache/groovy/blob/95f36bc52cdca47ca7722e45aabb57152dcc86f7/src/test/groovy/operator/TernaryOperatorsTest.groovy#L55 >> >> Jim >> >> >> >> >> On Mon, Aug 14, 2023 at 8:19 PM Ferenc Nagy <nferi....@gmail.com> wrote: >> >>> Hi Devs, >>> >>> I've posted a question about the topic here: >>> >>> https://stackoverflow.com/questions/76863969/elvis-operator-and-type-casting-precedence-in-groovy/76900266#76900266 >>> >>> Just repeating the same here and I'm curious about your opinion. Should >>> I open a bug ticket for this as suggested in the answer in SOF? >>> >>> --- >>> >>> Let's take the following simple expression: >>> >>> ((Double) null ?: 0).getClass() >>> >>> Results: >>> >>> - Groovy 3: class java.lang.Double >>> - Groovy 4: class java.lang.Integer >>> >>> Does anyone know the reason for the different behaviour? I'd say Groovy >>> 4 is correct since the casting is applied before the Elvis operator. >>> >>> Checked, but couldn't find anything related in the Groovy 4 release >>> notes: https://groovy-lang.org/releasenotes/groovy-4.0.html >>> >>> >>> --- >>> >>> >>> Regards, >>> >>> Ferenc >>> >>