|
|
|
I used this with my customized class before:
Didn't work with 2.5.1: Worked again with 2.5.1: Apropos: i used nabble to post my messages to the mailing list (http://www.nabble.com/codehaus---janino-f11887.html With kind regards I successfully compiled again by adding the following classloader(Thread.currentThread().getContextClassLoader() )
.....ClassBodyEvaluator.createFastClassBodyEvaluator(new Scanner(null, new StringReader(script)), Class.class, Thread.currentThread().getContextClassLoader(). But i don't really know why it worked before without. Maybe someone can give me a hint. I think I found the bug. Since 2.5.0
(where "X" is "SimpleCompiler", "ClassBodyEvaluator", "ScriptEvaluator" or "ExpressionEvaluator"), and where that "optionalParentClassLoader" argument is NULL do not use the current thread's "context class loader" (as JAVADOC'ed), but the JVM's boot class loader (the one that finds only the classes on the boot class path). I have fixed "SimpleCompiler.setParentClassLoader()" accordingly. Will go into version 2.5.2 (not scheduled yet). The workaround is, as you found out, to pass "Thread.currentThread().getContextClassLoader()" instead |
|||||||||||||||||||||||||||||||||||||||||||||||||||
marcelll wrote:
Hello ! Since the introduction of version 2.5.0 the compiler can't find imported classes anymore. So i switched back to 2.4.7 which is working correctly for me. I think it has something to do with a restricted access mentioned in the 2.5.0 release. I'm using the ClassBodyEvaluater (ClassBodyEvaluator.createFastClassBodyEvaluator...). How can i make the needed classes visible again for the evaluator ? Thanks in advance for any answer or code snippet !
I can't reproduce your problem. With JANINO 2.5.1, the following code executes OK:
((Runnable) ClassBodyEvaluator.createFastClassBodyEvaluator(
new Scanner(null, new StringReader(
"import java.util.*;\n" +
"public void run() {\n" + " new ArrayList();\n" + "}\n"
)),
Runnable.class,
null
)).run();
Am I missing something?
CU
Arno