protected Class findClass()

in boot/src/main/java/org/netbeans/html/boot/impl/FnUtils.java [662:740]


        protected Class<?> findClass(String name) throws ClassNotFoundException {
            if (name.startsWith("javafx")) {
                return Class.forName(name);
            }
            if (name.startsWith("netscape")) {
                return Class.forName(name);
            }
            if (name.startsWith("com.sun")) {
                return Class.forName(name);
            }
            if (name.startsWith("org.netbeans.html.context.spi")) {
                return Class.forName(name);
            }
            if (name.startsWith("net.java.html.BrwsrCtx")) {
                return Class.forName(name);
            }
            if (name.equals(JsClassLoader.class.getName())) {
                return JsClassLoader.class;
            }
            if (name.equals(Fn.class.getName())) {
                return Fn.class;
            }
            if (name.equals(Fn.Presenter.class.getName())) {
                return Fn.Presenter.class;
            }
            if (name.equals(Fn.Ref.class.getName())) {
                return Fn.Ref.class;
            }
            if (name.equals(Fn.Promise.class.getName())) {
                return Fn.Promise.class;
            }
            if (name.equals(Fn.ToJavaScript.class.getName())) {
                return Fn.ToJavaScript.class;
            }
            if (name.equals(Fn.FromJavaScript.class.getName())) {
                return Fn.FromJavaScript.class;
            }
            if (name.equals(FnUtils.class.getName())) {
                return FnUtils.class;
            }
            if (
                name.equals("org.netbeans.html.boot.spi.Fn") ||
                name.equals("org.netbeans.html.boot.impl.FnUtils") ||
                name.equals("org.netbeans.html.boot.impl.FnContext")
            ) {
                return Class.forName(name);
            }
            URL u = findResource(name.replace('.', '/') + ".class");
            if (u != null) {
                InputStream is = null;
                try {
                    is = u.openStream();
                    byte[] arr = new byte[is.available()];
                    int len = 0;
                    while (len < arr.length) {
                        int read = is.read(arr, len, arr.length - len);
                        if (read == -1) {
                            throw new IOException("Can't read " + u);
                        }
                        len += read;
                    }
                    is.close();
                    is = null;
                    if (JsPkgCache.process(this, name)) {
                        arr = FnUtils.transform(arr, this);
                    }
                    return defineClass(name, arr, 0, arr.length);
                } catch (IOException ex) {
                    throw new ClassNotFoundException("Can't load " + name, ex);
                } finally {
                    try {
                        if (is != null) is.close();
                    } catch (IOException ex) {
                        throw new ClassNotFoundException(null, ex);
                    }
                }
            }
            return super.findClass(name);
        }