[
https://issues.apache.org/jira/browse/GROOVY-8200?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16023180#comment-16023180
]
Daniel Hammer commented on GROOVY-8200:
---------------------------------------
[~blackdrag], thank you for revisiting this issue, it's much appreciated.
{quote}...
This is wrong and should be fixed.
...{quote}
I agree, consistency above all.
{quote}...
The inconsistency though is in the handling of & and &= not in the
others.{quote}
But from a usability view, I think that having {{null}} adhere to Groovy truth
is the convention I would expect Groovy to follow.
Ie. it would be preferable to avoid explicit cast ex.
{code}boolean success = method1(...)
success |= methodMightReturnNull(...) as boolean // this cast is disturbing the
groove
success |= x == y
...{code}
My point is; having the NPE thrown is unexpected as Groovy usually handles the
conversion from {{null}} to Groovy truth transparently and consistently.
Deviating from that convention introduces risk when using the shorthand
notation, because then an extra manual step is required by the developer
in-order to avoid a hidden NPE.
> Shorthand |= results in NPE
> ---------------------------
>
> Key: GROOVY-8200
> URL: https://issues.apache.org/jira/browse/GROOVY-8200
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.3.11
> Environment: Groovy Version: 2.3.11 JVM: 1.7.0_80 Vendor: Oracle
> Corporation OS: Linux
> java version "1.7.0_80"
> Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
> Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
> Reporter: Daniel Hammer
> Assignee: Jochen Theodorou
> Attachments: shorthand_and.groovy, shorthand_or_symptom.groovy,
> shorthand_xor_symptom.groovy
>
>
> I've stumbled across some curious behaviour for the shorthand assignment
> operator in Groovy v2.3.11 (symptom also present in Groovy v2.4.9).
> The following [boolean or logic|^shorthand_or_symptom.groovy], unexpectedly
> throws {{NullPointerException}}.
> {code}boolean x = null
> // short hand unrolled: x = null || x
> x |= null // -> unexpected NullPointerException
> assert !x{code}
> The same approach for [boolean and logic|^shorthand_and.groovy], performs as
> expected.
> {code}boolean x = null
> // short hand unrolled: x = null && x
> x &= null
> assert !x{code}
> It's possible to work around the issue with explicit cast.
> {code}x |= null as boolean{code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)