[ 
https://issues.apache.org/jira/browse/GROOVY-11488?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Eric Milles updated GROOVY-11488:
---------------------------------
    Labels: NullPointerException  (was: )

> STC: NPE for not-instanceof examination
> ---------------------------------------
>
>                 Key: GROOVY-11488
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11488
>             Project: Groovy
>          Issue Type: Bug
>    Affects Versions: 3.0.22, 4.0.23
>            Reporter: Eric Milles
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: NullPointerException
>
> Consider the following:
> {code:groovy}
> @groovy.transform.TypeChecked test(what) {
>   if (false) {
>     return "false"
>   } else if (what !instanceof Object[]) {
>     return "!array"
>   }
> }
> {code}
> NOTE: The actual code is more complex, but this was enough to trigger the 
> exception.
> The {{visitClosingBlock}} method of {{StaticTypeCheckingVisitor}} is throwing 
> a {{NullPointerException}} due to the {{!instanceof}} expression.  This is 
> not a problem for Groovy 5 as it has implemented more complete handling of 
> {{instanceof}} and {{!instanceof}}.
> {code}
> java.lang.NullPointerException: Cannot invoke 
> "java.util.Map.forEach(java.util.function.BiConsumer)" because 
> "this.typeCheckingContext.ifElseForWhileAssignmentTracker" is null
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.popAssignmentTracking(StaticTypeCheckingVisitor.java:4394)
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitClosingBlock(StaticTypeCheckingVisitor.java:4268)
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:4258)
>       at 
> org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:165)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:138)
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:2388)
>       at 
> org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:133)
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2887)
>       at 
> org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2855)
>       at 
> org.codehaus.groovy.transform.StaticTypesTransformation.visit(StaticTypesTransformation.java:70)
>       at 
> org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:189)
>       at 
> org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$2(ASTTransformationVisitor.java:284)
>       at 
> org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:1040)
>       ... 24 more
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to