[ 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)