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/12/27 00:42:49 UTC

[jira] [Comment Edited] (GROOVY-7709) NPE with ConvertedClosure

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

Shil Sinha edited comment on GROOVY-7709 at 12/26/15 11:41 PM:
---------------------------------------------------------------

Yes, the meta class used to create the PogoMetaClassSite (in CallSiteArray#createPogoSite) is the value returned by the closure, which in this case will be null. If the closure is changed to \{ 1 \} for example, the test will instead fail with:
{code}
java.lang.ClassCastException: java.lang.Integer cannot be cast to groovy.lang.MetaClass
{code}


was (Author: shils):
Yes, the meta class used to create the PogoMetaClassSite (in CallSiteArray#createPogoSite) is the value returned by the closure, which in this case will be null. If the closure is changed to { 1 } for example, the test will instead fail with:
{code}
java.lang.ClassCastException: java.lang.Integer cannot be cast to groovy.lang.MetaClass
{code}

> NPE with ConvertedClosure
> -------------------------
>
>                 Key: GROOVY-7709
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7709
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 2.4.5
>            Reporter: Jochen Theodorou
>
> {code}
> interface Y extends GroovyObject {}
> def cl = {println 1} as Y
> assert cl instanceof GroovyObject
> if (cl) println "!cl"
> {code}
> the code above will cause the execution of the method getMetaClass in the boolean part of the "if". It looks like this code path now produces a NPE
> {code}
> java.lang.NullPointerException
> 	at org.codehaus.groovy.runtime.InvokerHelper.invokePogoMethod(InvokerHelper.java:919)
> 	at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:902)
> 	at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToBoolean(DefaultTypeTransformation.java:185)
> 	at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.booleanUnbox(DefaultTypeTransformation.java:74){code}



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