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

Reply via email to