You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Jamie Echlin <ja...@gmail.com> on 2015/09/02 14:44:21 UTC

type checking bug

Found a bug with type checking... at least I think it's a bug. If no one
disagrees I'll raise a ticket in jira.

When I compile the following using:

         ASTTransformationCustomizer astcz = new
ASTTransformationCustomizer(
             TypeChecked)

I get an NPE, which suggests that the compilation unit hasn't been set for
one of the classes. Input code is:

import groovy.transform.TypeChecked

@TypeChecked
class TypeCheckingBug {

    void methodA() {
        // removing this or the othing makes this work
        ['a', 'b'].eachWithIndex { String value, sequence -> }
    }


    void methodB() {

        def instanceB = new ClassB()

        // removing this or the above makes this work
        instanceB.with {
            instanceC
        }
    }


    class ClassB {
        ClassC instanceC
    }

    class ClassC { }
}

Removing either of the two lines with the comments makes it work.

Any help appreciated.
cheers, jamie

Caused by: java.lang.NullPointerException
at
org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:177)
at
org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
at
org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
at
org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
at
org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
at
org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
at
org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
at
org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:259)
at
org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:271)
at
org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:196)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
at
org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
at
org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
at
org.codehaus.groovy.ast.tools.GenericsUtils.resolveClassNode(GenericsUtils.java:560)
at
org.codehaus.groovy.ast.tools.GenericsUtils.parseClassNodesFromString(GenericsUtils.java:527)
at groovy.transform.stc.FromString.parseOption(FromString.java:74)
at groovy.transform.stc.FromString.getClosureSignatures(FromString.java:55)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getSignaturesFromHint(StaticTypeCheckingVisitor.java:2588)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.doInferClosureParameterTypes(StaticTypeCheckingVisitor.java:2609)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferClosureParameterTypes(StaticTypeCheckingVisitor.java:2508)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:2474)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3109)
at
org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:64)
at
org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:193)
at
org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
at
org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:1969)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2302)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2261)
at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
at
org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
at
org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:248)
at
org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:63)
 <+2> (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
at
org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
at
org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
at
org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:292)
at
org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
... 268 more

Re: type checking bug

Posted by Shil Sinha <sh...@gmail.com>.
Are you applying the ASTTransformationCustomizer through a
DelegatingCustomizer? That's the issue I ran into earlier today;
CompilationUnit only sets the compilationUnit for customizers in its
configuration that implement CompilationUnitAware, so the compilationUnit
in my StaticTypesTransformation instance was null. An easy work around in
that case is to create a customizer extending SourceAwareCustomizer which
sets the compilationUnit in its delegate before calling it.

On Wed, Sep 2, 2015 at 5:05 PM, Keegan Witt <ke...@gmail.com> wrote:

> When I said I didn't see that error, I meant in the GroovyConsole.
> Because I'm a lazy bum and that's where I test everything.  So how were you
> applying the transformation?  It sounds like you're manually calling and
> not as a Gradle/GMavenPlus/groovyc config script?
>
> -Keegan
>
> On Wed, Sep 2, 2015 at 4:34 PM, Jamie Echlin <ja...@gmail.com>
> wrote:
>
>> 2.4.3. Sorry I should have said first time round. I will check the diffs
>> to the new version...
>>
>> This "bug" is confusing the hell out of me. If I run the script with
>> groovyshell or groovyscriptengine or whatever it works, but if I add the
>> TypeChecked as a AST customiser then you get the result I posted above.
>>
>> I would have thought it was the same code path.
>>
>> Thanks for the info.
>>
>> On Wed, Sep 2, 2015 at 8:59 PM, Keegan Witt <ke...@gmail.com> wrote:
>>
>>> What version of Groovy are you using?  Maybe I'm doing something
>>> different, but on 2.4.4, I'm not seeing the error you're seeing.
>>>
>>> -Keegan
>>>
>>> On Wed, Sep 2, 2015 at 8:44 AM, Jamie Echlin <ja...@gmail.com>
>>> wrote:
>>>
>>>> Found a bug with type checking... at least I think it's a bug. If no
>>>> one disagrees I'll raise a ticket in jira.
>>>>
>>>> When I compile the following using:
>>>>
>>>>          ASTTransformationCustomizer astcz = new
>>>> ASTTransformationCustomizer(
>>>>              TypeChecked)
>>>>
>>>> I get an NPE, which suggests that the compilation unit hasn't been set
>>>> for one of the classes. Input code is:
>>>>
>>>> import groovy.transform.TypeChecked
>>>>
>>>> @TypeChecked
>>>> class TypeCheckingBug {
>>>>
>>>>     void methodA() {
>>>>         // removing this or the othing makes this work
>>>>         ['a', 'b'].eachWithIndex { String value, sequence -> }
>>>>     }
>>>>
>>>>
>>>>     void methodB() {
>>>>
>>>>         def instanceB = new ClassB()
>>>>
>>>>         // removing this or the above makes this work
>>>>         instanceB.with {
>>>>             instanceC
>>>>         }
>>>>     }
>>>>
>>>>
>>>>     class ClassB {
>>>>         ClassC instanceC
>>>>     }
>>>>
>>>>     class ClassC { }
>>>> }
>>>>
>>>> Removing either of the two lines with the comments makes it work.
>>>>
>>>> Any help appreciated.
>>>> cheers, jamie
>>>>
>>>> Caused by: java.lang.NullPointerException
>>>> at
>>>> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:177)
>>>> at
>>>> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
>>>> at
>>>> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:259)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:271)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:196)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>>>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
>>>> at
>>>> org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
>>>> at
>>>> org.codehaus.groovy.ast.tools.GenericsUtils.resolveClassNode(GenericsUtils.java:560)
>>>> at
>>>> org.codehaus.groovy.ast.tools.GenericsUtils.parseClassNodesFromString(GenericsUtils.java:527)
>>>> at groovy.transform.stc.FromString.parseOption(FromString.java:74)
>>>> at
>>>> groovy.transform.stc.FromString.getClosureSignatures(FromString.java:55)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getSignaturesFromHint(StaticTypeCheckingVisitor.java:2588)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.doInferClosureParameterTypes(StaticTypeCheckingVisitor.java:2609)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferClosureParameterTypes(StaticTypeCheckingVisitor.java:2508)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:2474)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3109)
>>>> at
>>>> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:64)
>>>> at
>>>> org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:193)
>>>> at
>>>> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
>>>> at
>>>> org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
>>>> at
>>>> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:1969)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2302)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2261)
>>>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>>>> at
>>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>>>> at
>>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:248)
>>>> at
>>>> org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:63)
>>>>  <+2> (DelegatingMethodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:497)
>>>> at
>>>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
>>>> at
>>>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
>>>> at
>>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
>>>> at
>>>> org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:292)
>>>> at
>>>> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
>>>> ... 268 more
>>>>
>>>>
>>>>
>>>
>>
>

Re: type checking bug

Posted by Keegan Witt <ke...@gmail.com>.
When I said I didn't see that error, I meant in the GroovyConsole.  Because
I'm a lazy bum and that's where I test everything.  So how were you
applying the transformation?  It sounds like you're manually calling and
not as a Gradle/GMavenPlus/groovyc config script?

-Keegan

On Wed, Sep 2, 2015 at 4:34 PM, Jamie Echlin <ja...@gmail.com> wrote:

> 2.4.3. Sorry I should have said first time round. I will check the diffs
> to the new version...
>
> This "bug" is confusing the hell out of me. If I run the script with
> groovyshell or groovyscriptengine or whatever it works, but if I add the
> TypeChecked as a AST customiser then you get the result I posted above.
>
> I would have thought it was the same code path.
>
> Thanks for the info.
>
> On Wed, Sep 2, 2015 at 8:59 PM, Keegan Witt <ke...@gmail.com> wrote:
>
>> What version of Groovy are you using?  Maybe I'm doing something
>> different, but on 2.4.4, I'm not seeing the error you're seeing.
>>
>> -Keegan
>>
>> On Wed, Sep 2, 2015 at 8:44 AM, Jamie Echlin <ja...@gmail.com>
>> wrote:
>>
>>> Found a bug with type checking... at least I think it's a bug. If no one
>>> disagrees I'll raise a ticket in jira.
>>>
>>> When I compile the following using:
>>>
>>>          ASTTransformationCustomizer astcz = new
>>> ASTTransformationCustomizer(
>>>              TypeChecked)
>>>
>>> I get an NPE, which suggests that the compilation unit hasn't been set
>>> for one of the classes. Input code is:
>>>
>>> import groovy.transform.TypeChecked
>>>
>>> @TypeChecked
>>> class TypeCheckingBug {
>>>
>>>     void methodA() {
>>>         // removing this or the othing makes this work
>>>         ['a', 'b'].eachWithIndex { String value, sequence -> }
>>>     }
>>>
>>>
>>>     void methodB() {
>>>
>>>         def instanceB = new ClassB()
>>>
>>>         // removing this or the above makes this work
>>>         instanceB.with {
>>>             instanceC
>>>         }
>>>     }
>>>
>>>
>>>     class ClassB {
>>>         ClassC instanceC
>>>     }
>>>
>>>     class ClassC { }
>>> }
>>>
>>> Removing either of the two lines with the comments makes it work.
>>>
>>> Any help appreciated.
>>> cheers, jamie
>>>
>>> Caused by: java.lang.NullPointerException
>>> at
>>> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:177)
>>> at
>>> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
>>> at
>>> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:259)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:271)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:196)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
>>> at
>>> org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
>>> at
>>> org.codehaus.groovy.ast.tools.GenericsUtils.resolveClassNode(GenericsUtils.java:560)
>>> at
>>> org.codehaus.groovy.ast.tools.GenericsUtils.parseClassNodesFromString(GenericsUtils.java:527)
>>> at groovy.transform.stc.FromString.parseOption(FromString.java:74)
>>> at
>>> groovy.transform.stc.FromString.getClosureSignatures(FromString.java:55)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getSignaturesFromHint(StaticTypeCheckingVisitor.java:2588)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.doInferClosureParameterTypes(StaticTypeCheckingVisitor.java:2609)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferClosureParameterTypes(StaticTypeCheckingVisitor.java:2508)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:2474)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3109)
>>> at
>>> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:64)
>>> at
>>> org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:193)
>>> at
>>> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
>>> at
>>> org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
>>> at
>>> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:1969)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2302)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2261)
>>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>>> at
>>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>>> at
>>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:248)
>>> at
>>> org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:63)
>>>  <+2> (DelegatingMethodAccessorImpl.java:43)
>>> at java.lang.reflect.Method.invoke(Method.java:497)
>>> at
>>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
>>> at
>>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
>>> at
>>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
>>> at
>>> org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:292)
>>> at
>>> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
>>> ... 268 more
>>>
>>>
>>>
>>
>

Re: type checking bug

Posted by Jamie Echlin <ja...@gmail.com>.
2.4.3. Sorry I should have said first time round. I will check the diffs to
the new version...

This "bug" is confusing the hell out of me. If I run the script with
groovyshell or groovyscriptengine or whatever it works, but if I add the
TypeChecked as a AST customiser then you get the result I posted above.

I would have thought it was the same code path.

Thanks for the info.

On Wed, Sep 2, 2015 at 8:59 PM, Keegan Witt <ke...@gmail.com> wrote:

> What version of Groovy are you using?  Maybe I'm doing something
> different, but on 2.4.4, I'm not seeing the error you're seeing.
>
> -Keegan
>
> On Wed, Sep 2, 2015 at 8:44 AM, Jamie Echlin <ja...@gmail.com>
> wrote:
>
>> Found a bug with type checking... at least I think it's a bug. If no one
>> disagrees I'll raise a ticket in jira.
>>
>> When I compile the following using:
>>
>>          ASTTransformationCustomizer astcz = new
>> ASTTransformationCustomizer(
>>              TypeChecked)
>>
>> I get an NPE, which suggests that the compilation unit hasn't been set
>> for one of the classes. Input code is:
>>
>> import groovy.transform.TypeChecked
>>
>> @TypeChecked
>> class TypeCheckingBug {
>>
>>     void methodA() {
>>         // removing this or the othing makes this work
>>         ['a', 'b'].eachWithIndex { String value, sequence -> }
>>     }
>>
>>
>>     void methodB() {
>>
>>         def instanceB = new ClassB()
>>
>>         // removing this or the above makes this work
>>         instanceB.with {
>>             instanceC
>>         }
>>     }
>>
>>
>>     class ClassB {
>>         ClassC instanceC
>>     }
>>
>>     class ClassC { }
>> }
>>
>> Removing either of the two lines with the comments makes it work.
>>
>> Any help appreciated.
>> cheers, jamie
>>
>> Caused by: java.lang.NullPointerException
>> at
>> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:177)
>> at
>> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
>> at
>> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:259)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:271)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:196)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
>> at
>> org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
>> at
>> org.codehaus.groovy.ast.tools.GenericsUtils.resolveClassNode(GenericsUtils.java:560)
>> at
>> org.codehaus.groovy.ast.tools.GenericsUtils.parseClassNodesFromString(GenericsUtils.java:527)
>> at groovy.transform.stc.FromString.parseOption(FromString.java:74)
>> at
>> groovy.transform.stc.FromString.getClosureSignatures(FromString.java:55)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getSignaturesFromHint(StaticTypeCheckingVisitor.java:2588)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.doInferClosureParameterTypes(StaticTypeCheckingVisitor.java:2609)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferClosureParameterTypes(StaticTypeCheckingVisitor.java:2508)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:2474)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3109)
>> at
>> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:64)
>> at
>> org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:193)
>> at
>> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
>> at
>> org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
>> at
>> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:1969)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2302)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2261)
>> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
>> at
>> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
>> at
>> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:248)
>> at
>> org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:63)
>>  <+2> (DelegatingMethodAccessorImpl.java:43)
>> at java.lang.reflect.Method.invoke(Method.java:497)
>> at
>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
>> at
>> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
>> at
>> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
>> at
>> org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:292)
>> at
>> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
>> ... 268 more
>>
>>
>>
>

Re: type checking bug

Posted by Keegan Witt <ke...@gmail.com>.
What version of Groovy are you using?  Maybe I'm doing something different,
but on 2.4.4, I'm not seeing the error you're seeing.

-Keegan

On Wed, Sep 2, 2015 at 8:44 AM, Jamie Echlin <ja...@gmail.com> wrote:

> Found a bug with type checking... at least I think it's a bug. If no one
> disagrees I'll raise a ticket in jira.
>
> When I compile the following using:
>
>          ASTTransformationCustomizer astcz = new
> ASTTransformationCustomizer(
>              TypeChecked)
>
> I get an NPE, which suggests that the compilation unit hasn't been set for
> one of the classes. Input code is:
>
> import groovy.transform.TypeChecked
>
> @TypeChecked
> class TypeCheckingBug {
>
>     void methodA() {
>         // removing this or the othing makes this work
>         ['a', 'b'].eachWithIndex { String value, sequence -> }
>     }
>
>
>     void methodB() {
>
>         def instanceB = new ClassB()
>
>         // removing this or the above makes this work
>         instanceB.with {
>             instanceC
>         }
>     }
>
>
>     class ClassB {
>         ClassC instanceC
>     }
>
>     class ClassC { }
> }
>
> Removing either of the two lines with the comments makes it work.
>
> Any help appreciated.
> cheers, jamie
>
> Caused by: java.lang.NullPointerException
> at
> org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:177)
> at
> org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
> at
> org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:259)
> at
> org.codehaus.groovy.control.ResolveVisitor.resolveOrFail(ResolveVisitor.java:271)
> at
> org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:196)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
> at
> org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
> at
> org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
> at
> org.codehaus.groovy.ast.tools.GenericsUtils.resolveClassNode(GenericsUtils.java:560)
> at
> org.codehaus.groovy.ast.tools.GenericsUtils.parseClassNodesFromString(GenericsUtils.java:527)
> at groovy.transform.stc.FromString.parseOption(FromString.java:74)
> at groovy.transform.stc.FromString.getClosureSignatures(FromString.java:55)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.getSignaturesFromHint(StaticTypeCheckingVisitor.java:2588)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.doInferClosureParameterTypes(StaticTypeCheckingVisitor.java:2609)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.inferClosureParameterTypes(StaticTypeCheckingVisitor.java:2508)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallArguments(StaticTypeCheckingVisitor.java:2474)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethodCallExpression(StaticTypeCheckingVisitor.java:3109)
> at
> org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:64)
> at
> org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:69)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:193)
> at
> org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
> at
> org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
> at
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:1969)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2302)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2261)
> at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
> at
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
> at
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClass(StaticTypeCheckingVisitor.java:248)
> at
> org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:63)
>  <+2> (DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSite.invoke(PojoMetaMethodSite.java:189)
> at
> org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
> at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:130)
> at
> org.codehaus.groovy.control.customizers.ASTTransformationCustomizer.call(ASTTransformationCustomizer.groovy:292)
> at
> org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1052)
> ... 268 more
>
>
>