[ 
https://issues.apache.org/jira/browse/JCI-53?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12531387
 ] 

Arno Unkrig commented on JCI-53:
--------------------------------

Hi Mark,

you should modify the slightly as follows:

        try {
            compiler.compile(resources);
        } catch (LocatedException e) {
            // Fatal scan / parse / compile errors.
            problems.add(new JaninoCompilationProblem(e));
        } catch ( IOException e ) {
            // Low-level problem reading or writing bytes.
            log.error("this error should have been cought before", e);
        }

Notice that JANINO 2.5.11 is required, because CompileException now extends 
LocatedException. In other words: You can now catch ScanException, 
ParseException and CompileException with a single "catch LocatedException" 
clause.

Notice that "compile()" still throws CompileExceptions, even if you have 
"sectCompileErrorHandler()". The reason being is that sometimes there are fatal 
conditions that prevent the continuation of the compilation.

Hope that helps!


CU

Arno

> 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.1
>            Reporter: Edson Tirelli
>            Assignee: Torsten Curdt
>            Priority: Blocker
>             Fix For: 1.1RC1
>
>
> 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.

Reply via email to