You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Shil Sinha (JIRA)" <ji...@apache.org> on 2015/10/21 18:19:27 UTC

[jira] [Commented] (GROOVY-7639) NPE when using safe traversal operator with CompileStatic

    [ https://issues.apache.org/jira/browse/GROOVY-7639?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14967386#comment-14967386 ] 

Shil Sinha commented on GROOVY-7639:
------------------------------------

This occurs because a primitive compare is performed for {{p?.otherInfo?.favoriteNumber == 7}}, since the inferred type of the lhs is int instead of Integer. The obvious fix would be to store the inferred type of null safe property expressions as the wrapper type in case of primitives (as is done with null safe method call expressions), but this would break the tests put in place for GROOVY-5613. 

> NPE when using safe traversal operator with CompileStatic
> ---------------------------------------------------------
>
>                 Key: GROOVY-7639
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7639
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 2.4.5
>            Reporter: Ben Podoll
>
> In the code below, the "if" condition throws a NPE when it reaches the "p3" object. If I remove the @CompileStatic from the "SomeOther" class it works.
> {code:java}
> import groovy.transform.CompileStatic
> @CompileStatic
> class Person {
>   String name
>   OtherInfo otherInfo
> }
> @CompileStatic
> class OtherInfo {
>   int favoriteNumber
> }
> @CompileStatic
> class SomeOther {
>   SomeOther() {
>     Person p1 = new Person(name: 'Ben', otherInfo: new OtherInfo(favoriteNumber: 1))
>     Person p2 = new Person(name: 'Aaron', otherInfo: new OtherInfo())
>     Person p3 = new Person(name: 'Fred')
>     [p1,p2,p3].each { Person p ->
>       println "checking: ${p.name}"
>       println p?.otherInfo?.favoriteNumber
>       if(p?.otherInfo?.favoriteNumber == 7){
>         println "luckiest number!"
>       }
>     }
>   }
> }
> new SomeOther()
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)