[ https://issues.apache.org/jira/browse/GROOVY-10458?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-10458: --------------------------------- Fix Version/s: 4.0.1 > Path to a problematic file isn't shown in the error message sometimes if > compilation fails with IndexOutOfBoundsException > ------------------------------------------------------------------------------------------------------------------------- > > Key: GROOVY-10458 > URL: https://issues.apache.org/jira/browse/GROOVY-10458 > Project: Groovy > Issue Type: Bug > Components: Compiler > Affects Versions: 3.0.9 > Reporter: Nikolay Chashnikov > Assignee: Eric Milles > Priority: Major > Fix For: 5.0.0-alpha-1, 4.0.1 > > > Try compiling the following code in Groovy 3.0.9: > {code:groovy} > import groovy.transform.CompileDynamic > import groovy.transform.CompileStatic > @CompileStatic > class MyConstructorBug { > @CompileDynamic > MyConstructorBug() { > new StringReader("abc").close() > } > } > {code} > It'll fail with the exception (see below). Looks like this is caused by the > same problems as GROOVY-10457, but in this case path to problematic file > isn't included into the error message and isn't printed to the output. There > is a code which should do this in > org.codehaus.groovy.classgen.asm.OperandStack#popWithMessage, but it catches > ArrayIndexOutOfBoundsException, whereas IndexOutOfBoundsException is actually > thrown. Please change the catch statement in OperandStack#popWithMessage. > {noformat} > java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0 > at > java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) > at > java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) > at > java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) > at java.base/java.util.Objects.checkIndex(Objects.java:372) > at java.base/java.util.ArrayList.remove(ArrayList.java:536) > at > org.codehaus.groovy.classgen.asm.OperandStack.popWithMessage(OperandStack.java:110) > at > org.codehaus.groovy.classgen.asm.OperandStack.remove(OperandStack.java:218) > at > org.codehaus.groovy.classgen.asm.OperandStack.replace(OperandStack.java:292) > at > org.codehaus.groovy.classgen.asm.InvocationWriter.makeUncachedCall(InvocationWriter.java:374) > at > org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:387) > at > org.codehaus.groovy.classgen.asm.InvocationWriter.makeCall(InvocationWriter.java:121) > at > org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.makeCall(StaticInvocationWriter.java:649) > at > org.codehaus.groovy.classgen.asm.InvocationWriter.writeInvokeMethod(InvocationWriter.java:456) > at > org.codehaus.groovy.classgen.asm.sc.StaticInvocationWriter.writeInvokeMethod(StaticInvocationWriter.java:140) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitMethodCallExpression(AsmClassGenerator.java:839) > at > org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:76) > at > org.codehaus.groovy.classgen.asm.StatementWriter.writeExpressionStatement(StatementWriter.java:635) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitExpressionStatement(AsmClassGenerator.java:687) > at > org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) > at > org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:94) > at > org.codehaus.groovy.classgen.asm.sc.StaticTypesStatementWriter.writeBlockStatement(StaticTypesStatementWriter.java:78) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:618) > at > org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:138) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:111) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:462) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:409) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructor(ClassCodeVisitorSupport.java:101) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructor(AsmClassGenerator.java:551) > at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1089) > at > org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:52) > at > org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:272) > at > org.codehaus.groovy.control.CompilationUnit$3.call(CompilationUnit.java:797) > at > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:942) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:671) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:635) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:610) > {noformat} -- This message was sent by Atlassian Jira (v8.20.1#820001)