Eric Milles created GROOVY-11488:
------------------------------------

             Summary: 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: 4.0.23, 3.0.22
            Reporter: Eric Milles
            Assignee: Eric Milles


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