Stack overflow on cross imports in commons-jci-janino
-----------------------------------------------------

                 Key: JCI-53
                 URL: https://issues.apache.org/jira/browse/JCI-53
             Project: Commons JCI
          Issue Type: Bug
          Components: compiler janino
    Affects Versions: 1.0.1
            Reporter: Edson Tirelli


A stack overflow occurs when trying to compile classes with cross references 
using commons-jci-janino, because an infinite recursion. The simple presence of 
cross reference import is enough to cause the problem.

Example: the following classes will recreate the problem:

package test;

import static test.Func2.func2;

public class Func1 {
   public static boolean func1() throws Exception {
   return true;
   }
}

package test;

import static test.Func1.func1;

public class Func2 {
   public static boolean func2() throws Exception {
   return true;
   }
} 

The exception stack is:

java.lang.StackOverflowError
        at org.codehaus.janino.Parser.parseAndExpression(Parser.java)
        at org.codehaus.janino.Parser.parseExclusiveOrExpression(Parser.java)
        at org.codehaus.janino.Parser.parseInclusiveOrExpression(Parser.java)
        at org.codehaus.janino.Parser.parseConditionalAndExpression(Parser.java)
        at org.codehaus.janino.Parser.parseConditionalOrExpression(Parser.java)
        at org.codehaus.janino.Parser.parseConditionalExpression(Parser.java)
        at org.codehaus.janino.Parser.parseAssignmentExpression(Parser.java)
        at org.codehaus.janino.Parser.parseExpression(Parser.java)
        at org.codehaus.janino.Parser.parseReturnStatement(Parser.java)
        at org.codehaus.janino.Parser.parseStatement(Parser.java)
        at org.codehaus.janino.Parser.parseBlockStatement(Parser.java)
        at org.codehaus.janino.Parser.parseBlockStatements(Parser.java)
        at org.codehaus.janino.Parser.parseBlock(Parser.java)
        at org.codehaus.janino.Parser.parseMethodBody(Parser.java)
        at org.codehaus.janino.Parser.parseMethodDeclarationRest(Parser.java)
        at org.codehaus.janino.Parser.parseClassBodyDeclaration(Parser.java)
        at org.codehaus.janino.Parser.parseClassBody(Parser.java)
        at org.codehaus.janino.Parser.parseClassDeclarationRest(Parser.java)
        at 
org.codehaus.janino.Parser.parsePackageMemberTypeDeclaration(Parser.java)
        at org.codehaus.janino.Parser.parseCompilationUnit(Parser.java)
        at 
org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:90)
        at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java)
        at 
org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java)
        at 
org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java)
        at 
org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java)
        at org.codehaus.janino.UnitCompiler.<init>(UnitCompiler.java)
        at 
org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91)
        at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java)
        at 
org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java)
        at 
org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java)
        at 
org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java)
        at org.codehaus.janino.UnitCompiler.<init>(UnitCompiler.java)
        at 
org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91)
        at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java)
        at 
org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.import2(UnitCompiler.java)
        at org.codehaus.janino.UnitCompiler.access$2(UnitCompiler.java)
        at 
org.codehaus.janino.UnitCompiler$1.visitSingleStaticImportDeclaration(UnitCompiler.java)
        at 
org.codehaus.janino.Java$CompilationUnit$SingleStaticImportDeclaration.accept(Java.java)
        at org.codehaus.janino.UnitCompiler.<init>(UnitCompiler.java)
        at 
org.drools.commons.jci.compilers.JaninoJavaCompiler$CompilingIClassLoader.findIClass(JaninoJavaCompiler.java:91)
        at org.codehaus.janino.IClassLoader.loadIClass(IClassLoader.java)
        at 
org.codehaus.janino.UnitCompiler.loadFullyQualifiedClass(UnitCompiler.java)
        (... and the loop continues ... )

Please note that the problem does not occur when using commons-jci-eclipse or 
when using JANINO from command line:

[EMAIL PROTECTED] test]$ ../janino-2.5.9/bin/janinoc test/*.java
[EMAIL PROTECTED] test]$ 

This problem is affecting JANINO support in the Drools project as described in 
ticket:

http://jira.jboss.com/jira/browse/JBRULES-1013

Thanks,
Edson

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to