in compilers/rhino/src/main/java/org/apache/commons/jci2/compiler/rhino/RhinoJavaCompiler.java [186:225]
private Class<?> compileClass( final Context pContext, final String pSourceName, final String pClassName, final Class<?> pSuperClass, final Class<?>[] pInterfaces) {
final CompilerEnvirons environments = new CompilerEnvirons();
environments.initFromContext(pContext);
final ClassCompiler compiler = new ClassCompiler(environments);
if (pSuperClass != null) {
compiler.setTargetExtends(pSuperClass);
}
if (pInterfaces != null) {
compiler.setTargetImplements(pInterfaces);
}
final byte[] sourceBytes = reader.getBytes(pSourceName);
final Object[] classes = compiler.compileToClassFiles(new String(sourceBytes), getName(pSourceName), 1, pClassName);
final GeneratedClassLoader loader = pContext.createClassLoader(pContext.getApplicationClassLoader());
Class<?> clazz = null;
for (int i = 0; i < classes.length; i += 2) {
final String clazzName = (String) classes[i];
final byte[] clazzBytes = (byte[]) classes[i+1];
store.write(clazzName.replace('.', '/') + ".class", clazzBytes);
final Class<?> c = loader.defineClass(clazzName, clazzBytes);
loader.linkClass(c);
if (i == 0) {
clazz = c;
}
}
return clazz;
}