[ https://issues.apache.org/jira/browse/GROOVY-8005?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15697484#comment-15697484 ]
Daniel.Sun commented on GROOVY-8005: ------------------------------------ Fixed. > [parrot] NPE when using try-with-resources with a missing semi-colon > -------------------------------------------------------------------- > > Key: GROOVY-8005 > URL: https://issues.apache.org/jira/browse/GROOVY-8005 > Project: Groovy > Issue Type: Bug > Reporter: Guillaume Laforge > Assignee: Daniel.Sun > > When testing the try-with-resouces construct in the Groovy console, I did a > mistake, and forgot the semi-colon in between resources: > {code} > def input = new File('./NOTICE') > try ( > FileInputStream fin = new FileInputStream(input) > GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(output)) > ) { > byte[] buffer = new byte[4096] > int nread = 0 > while ((nread = fin.read(buffer)) != -1) { > out.write(buffer, 0, nread) > } > } > {code} > And I got the following NPE: > {code} > java.lang.NullPointerException > at > org.apache.groovy.parser.antlr4.AstBuilder.configureAST(AstBuilder.java:3775) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitCommandExpression(AstBuilder.java:1484) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitCommandExprAlt(AstBuilder.java:1449) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitCommandExprAlt(AstBuilder.java:67) > at > org.apache.groovy.parser.antlr4.GroovyParser$CommandExprAltContext.accept(GroovyParser.java:7491) > at > org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:44) > at > org.apache.groovy.parser.antlr4.AstBuilder.visit(AstBuilder.java:3408) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitVariableInitializer(AstBuilder.java:1408) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitVariableDeclarator(AstBuilder.java:1392) > at > org.apache.groovy.parser.antlr4.AstBuilder.lambda$visitVariableDeclarators$17(AstBuilder.java:1365) > at > java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) > at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) > at > java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitVariableDeclarators(AstBuilder.java:1368) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitVariableDeclaration(AstBuilder.java:1257) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitLocalVariableDeclaration(AstBuilder.java:1210) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitResource(AstBuilder.java:447) > at > java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) > at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) > at > java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitResourceList(AstBuilder.java:442) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitResources(AstBuilder.java:437) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitTryCatchStatement(AstBuilder.java:417) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitTryCatchStmtAlt(AstBuilder.java:407) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitTryCatchStmtAlt(AstBuilder.java:67) > at > org.apache.groovy.parser.antlr4.GroovyParser$TryCatchStmtAltContext.accept(GroovyParser.java:6039) > at > org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:44) > at > org.apache.groovy.parser.antlr4.AstBuilder.visit(AstBuilder.java:3408) > at > java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) > at > java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374) > at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) > at > java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) > at > java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) > at > java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) > at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) > at > java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitCompilationUnit(AstBuilder.java:141) > at > org.apache.groovy.parser.antlr4.AstBuilder.visitCompilationUnit(AstBuilder.java:67) > at > org.apache.groovy.parser.antlr4.GroovyParser$CompilationUnitContext.accept(GroovyParser.java:290) > at > org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:44) > at > org.apache.groovy.parser.antlr4.AstBuilder.visit(AstBuilder.java:3408) > at > org.apache.groovy.parser.antlr4.AstBuilder.buildAST(AstBuilder.java:116) > at > org.apache.groovy.parser.antlr4.Antlr4ParserPlugin.buildAST(Antlr4ParserPlugin.java:43) > at org.codehaus.groovy.control.SourceUnit.convert(SourceUnit.java:269) > at > org.codehaus.groovy.control.CompilationUnit$15.call(CompilationUnit.java:690) > at > org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:948) > at > org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:615) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:591) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:568) > at > groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:299) > at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:269) > at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688) > at groovy.lang.GroovyShell.run(GroovyShell.java:517) > at groovy.lang.GroovyShell.run(GroovyShell.java:497) > at groovy.lang.GroovyShell.run(GroovyShell.java:170) > at groovy.lang.GroovyShell$run$1.call(Unknown Source) > at > groovy.ui.Console$_runScriptImpl_closure17.doCall(Console.groovy:1045) > at groovy.ui.Console$_runScriptImpl_closure17.doCall(Console.groovy) > at sun.reflect.GeneratedMethodAccessor226.invoke(Unknown Source) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) > at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) > at > org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:294) > at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:994) > at groovy.lang.Closure.call(Closure.java:415) > at groovy.lang.Closure.call(Closure.java:409) > at groovy.lang.Closure.run(Closure.java:496) > at java.lang.Thread.run(Thread.java:745) > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)