Hi Jim and Paul,

Mystery has been solved :)
Thanks for your help and investigation, much appreciated.

Regards,
Ferenc

Paul King <pa...@asert.com.au> ezt írta (időpont: 2023. aug. 15., K, 19:25):

> 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>
> <#m_1460524499199556130_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_1460524499199556130_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