Janino

Unable to resolve reference to var name from within catch block of anon inner class

Details

  • Type: Bug Bug
  • Status: Resolved Resolved
  • Priority: Major Major
  • Resolution: Fixed
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Environment:
    2.5.0
  • Testcase included:
    yes
  • Number of attachments :
    2

Description

I'll attach testcase. This used to work way back in 2.3.18, the version I am attempting to upgrade from. Other blocks such as finally are OK.

  1. Test.java
    11/Oct/06 11:41 PM
    0.7 kB
    John V Sichi
  2. UnitCompiler.java
    12/Oct/06 6:15 AM
    377 kB
    John V Sichi

Activity

Hide
John V Sichi added a comment -

Output (note javac is happy with it):

jvs@bagheera:~/tmp/janino-2.5.0$ java -classpath lib/janino.jar org.codehaus.janino.SimpleCompiler Test.java Test
Exception in thread "main" org.codehaus.janino.CompileException: File Test.java, Line 19, Column 31: Unknown variable or type "test"
at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$81(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$13.visitPackage(UnitCompiler.java)
at org.codehaus.janino.Java$Package.accept(Java.java)
at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$107(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$13.visitAmbiguousName(UnitCompiler.java)
at org.codehaus.janino.Java$AmbiguousName.accept(Java.java)
at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$46(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$7.visitMethodInvocation(UnitCompiler.java)
at org.codehaus.janino.Java$MethodInvocation.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$14(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitThrowStatement(UnitCompiler.java)
at org.codehaus.janino.Java$ThrowStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$8(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitTryStatement(UnitCompiler.java)
at org.codehaus.janino.Java$TryStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$1.visitAnonymousClassDeclaration(UnitCompiler.java)
at org.codehaus.janino.Java$AnonymousClassDeclaration.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$49(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$7.visitNewAnonymousClassInstance(UnitCompiler.java)
at org.codehaus.janino.Java$NewAnonymousClassInstance.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$13(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitReturnStatement(UnitCompiler.java)
at org.codehaus.janino.Java$ReturnStatement.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java)
at org.codehaus.janino.Java$Block.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler$1.visitPackageMemberClassDeclaration(UnitCompiler.java)
at org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java)
at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java)
at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java)
at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java)
at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.Cookable.cook(Cookable.java)
at org.codehaus.janino.SimpleCompiler.<init>(SimpleCompiler.java)
at org.codehaus.janino.SimpleCompiler.main(SimpleCompiler.java)

Show
John V Sichi added a comment - Output (note javac is happy with it): jvs@bagheera:~/tmp/janino-2.5.0$ java -classpath lib/janino.jar org.codehaus.janino.SimpleCompiler Test.java Test Exception in thread "main" org.codehaus.janino.CompileException: File Test.java, Line 19, Column 31: Unknown variable or type "test" at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$81(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$13.visitPackage(UnitCompiler.java) at org.codehaus.janino.Java$Package.accept(Java.java) at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.getType2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$107(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$13.visitAmbiguousName(UnitCompiler.java) at org.codehaus.janino.Java$AmbiguousName.accept(Java.java) at org.codehaus.janino.UnitCompiler.getType(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.findIMethod(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$46(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$7.visitMethodInvocation(UnitCompiler.java) at org.codehaus.janino.Java$MethodInvocation.accept(Java.java) at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$14(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitThrowStatement(UnitCompiler.java) at org.codehaus.janino.Java$ThrowStatement.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java) at org.codehaus.janino.Java$Block.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$8(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitTryStatement(UnitCompiler.java) at org.codehaus.janino.Java$TryStatement.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java) at org.codehaus.janino.Java$Block.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitAnonymousClassDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$AnonymousClassDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compileGet2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$49(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$7.visitNewAnonymousClassInstance(UnitCompiler.java) at org.codehaus.janino.Java$NewAnonymousClassInstance.accept(Java.java) at org.codehaus.janino.UnitCompiler.compileGet(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compileGetValue(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$13(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitReturnStatement(UnitCompiler.java) at org.codehaus.janino.Java$ReturnStatement.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.access$3(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$2.visitBlock(UnitCompiler.java) at org.codehaus.janino.Java$Block.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java) at org.codehaus.janino.UnitCompiler$1.visitPackageMemberClassDeclaration(UnitCompiler.java) at org.codehaus.janino.Java$PackageMemberClassDeclaration.accept(Java.java) at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java) at org.codehaus.janino.UnitCompiler.compileUnit(UnitCompiler.java) at org.codehaus.janino.SimpleCompiler.compileToClassLoader(SimpleCompiler.java) at org.codehaus.janino.SimpleCompiler.cook(SimpleCompiler.java) at org.codehaus.janino.Cookable.cook(Cookable.java) at org.codehaus.janino.Cookable.cook(Cookable.java) at org.codehaus.janino.SimpleCompiler.<init>(SimpleCompiler.java) at org.codehaus.janino.SimpleCompiler.main(SimpleCompiler.java)
Hide
John V Sichi added a comment -

I found the problem. Here's a modified version of UnitCompiler.java (modified from the 2.5.0 codebase) which fixes it for my testcase; I'm going to run it through the full Farrago regression suite now.

Show
John V Sichi added a comment - I found the problem. Here's a modified version of UnitCompiler.java (modified from the 2.5.0 codebase) which fixes it for my testcase; I'm going to run it through the full Farrago regression suite now.
Hide
John V Sichi added a comment -

Problem is that some walking-up-the-tree code is doing instanceof Java.BlockStatement where it should also be checking for Java.CatchClause. Some places were already checking for both. I added a method isBlocky and replaced the remaining ones, and that seems to fix it. Probably there are more to be fixed.

Show
John V Sichi added a comment - Problem is that some walking-up-the-tree code is doing instanceof Java.BlockStatement where it should also be checking for Java.CatchClause. Some places were already checking for both. I added a method isBlocky and replaced the remaining ones, and that seems to fix it. Probably there are more to be fixed.
Hide
Arno Unkrig added a comment -

Fixed in 2.5.1, published NOW.

Show
Arno Unkrig added a comment - Fixed in 2.5.1, published NOW.

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: