in compilers/rhino/src/main/java/org/apache/commons/jci2/compiler/rhino/RhinoJavaCompiler.java [135:184]
private Class<?> compileClass( final Context pContext, final String pClassName) throws IOException, ClassNotFoundException {
Class<?> superclass = null;
final String pSourceName = pClassName.replace('.', '/') + ".js";
final Scriptable target = evaluate(pContext, pSourceName);
final Object baseClassName = ScriptableObject.getProperty(target, "__extends__");
if (baseClassName instanceof String) {
superclass = Class.forName((String) baseClassName);
}
final List<Class<?>> interfaceClasses = new ArrayList<>();
final Object interfaceNames = ScriptableObject.getProperty(target, "__implements__");
if (interfaceNames instanceof NativeArray) {
final NativeArray interfaceNameArray = (NativeArray) interfaceNames;
for (int i=0; i<interfaceNameArray.getLength(); i++) {
final Object obj = interfaceNameArray.get(i, interfaceNameArray);
if (obj instanceof String) {
interfaceClasses.add(Class.forName((String) obj));
}
}
} else if (interfaceNames instanceof String) {
interfaceClasses.add(Class.forName((String) interfaceNames));
}
final Class<?>[] interfaces;
if (!interfaceClasses.isEmpty()) {
interfaces = new Class[interfaceClasses.size()];
interfaceClasses.toArray(interfaces);
} else {
// FIXME: hm ...really no empty array good enough?
interfaces = null;
}
return compileClass(pContext, pSourceName, pClassName, superclass, interfaces);
}