private Class compileClass()

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);

        }