[ https://issues.apache.org/jira/browse/GROOVY-11559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17921217#comment-17921217 ]
ASF GitHub Bot commented on GROOVY-11559: ----------------------------------------- eric-milles opened a new pull request, #2147: URL: https://github.com/apache/groovy/pull/2147 In the multiple `instanceof` case, a `UnionTypeClassNode` is created. A call to `addAllInterfaces` triggers a call to `parameterizeType` with the union type as the hint and each of the `instanceof` types as the target. The walk type hierarchy should not be entered for a union type. https://issues.apache.org/jira/browse/GROOVY-11559 > BUG! exception in phase 'instruction selection' of @CompileStatic method > ------------------------------------------------------------------------ > > Key: GROOVY-11559 > URL: https://issues.apache.org/jira/browse/GROOVY-11559 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 5.0.0-alpha-11, 4.0.24 > Environment: Linux > OpenJdk 21.0.2 x64 > Groovy 4.0.24 > Reporter: Aleksey > Assignee: Eric Milles > Priority: Major > > Compilation of next script results in *NullPointerException* error: > {code:java} > @CompileStatic > void test(Object val) { > if(val instanceof Set || val instanceof List) { > val = "..." > } > } > {code} > Resulting error and stack trace: > {noformat} > BUG! exception in phase 'instruction selection' in source unit > 'ideaGroovyConsole.groovy' unexpected NullPointerException > at > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:943) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666) > at > groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:365) > at > groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:314) > at > org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) > at > org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) > at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) > at groovy.lang.GroovyShell.parseClass(GroovyShell.java:572) > at groovy.lang.GroovyShell.run(GroovyShell.java:392) > at groovy.lang.GroovyShell.run(GroovyShell.java:372) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) > at console.run(console.groovy:11) > at groovy.ui.GroovyMain.processReader(GroovyMain.java:628) > at groovy.ui.GroovyMain.processFiles(GroovyMain.java:549) > at groovy.ui.GroovyMain.run(GroovyMain.java:387) > at groovy.ui.GroovyMain.access$1400(GroovyMain.java:67) > at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:313) > at groovy.ui.GroovyMain.processArgs(GroovyMain.java:141) > at groovy.ui.GroovyMain.main(GroovyMain.java:114) > at > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) > at java.base/java.lang.reflect.Method.invoke(Method.java:580) > at > org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:115) > at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:37) > Caused by: java.lang.NullPointerException: Cannot invoke > "org.codehaus.groovy.ast.ClassNode.isGenericsPlaceHolder()" because "type" is > null > at > org.codehaus.groovy.ast.tools.GenericsUtils.hasUnresolvedGenerics(GenericsUtils.java:926) > at > org.codehaus.groovy.ast.tools.GenericsUtils.parameterizeType(GenericsUtils.java:281) > at > org.codehaus.groovy.ast.tools.GeneralUtils.addAllInterfaces(GeneralUtils.java:482) > at > org.codehaus.groovy.ast.tools.GeneralUtils.getInterfacesAndSuperInterfaces(GeneralUtils.java:495) > at > org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound(WideningCategories.java:422) > at > org.codehaus.groovy.ast.tools.WideningCategories.lowestUpperBound(WideningCategories.java:210) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.storeType(StaticTypeCheckingVisitor.java:4563) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBinaryExpression(StaticTypeCheckingVisitor.java:908) > at > org.codehaus.groovy.ast.expr.BinaryExpression.visit(BinaryExpression.java:60) > at > org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:117) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:204) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitExpressionStatement(StaticTypeCheckingVisitor.java:2286) > at > org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:41) > at > org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:168) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:4109) > at > org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:72) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitIfElse(StaticTypeCheckingVisitor.java:4065) > at org.codehaus.groovy.ast.stmt.IfStatement.visit(IfStatement.java:55) > at > org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:86) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:168) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitBlockStatement(StaticTypeCheckingVisitor.java:4109) > at > org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:72) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:142) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:115) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitConstructorOrMethod(StaticTypeCheckingVisitor.java:2753) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:110) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.startMethodInference(StaticTypeCheckingVisitor.java:2736) > at > org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor.visitMethod(StaticTypeCheckingVisitor.java:2715) > at > org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitConstructorOrMethod(StaticCompilationVisitor.java:192) > at > org.codehaus.groovy.transform.sc.StaticCompilationVisitor.visitMethod(StaticCompilationVisitor.java:207) > at > org.codehaus.groovy.transform.sc.StaticCompileTransformation.visit(StaticCompileTransformation.java:81) > at > org.codehaus.groovy.transform.ASTTransformationVisitor.visitClass(ASTTransformationVisitor.java:155) > at > org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperations$2(ASTTransformationVisitor.java:237) > at > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:938) > ... 23 more > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)