static class JavaXClassLoader extends URLClassLoader { S progID; L files; Set triedToLoad = synchroSet(); Set loadedClasses = synchroSet(); bool retired; O retiredMarker; *(S progID, L files) { this(progID, files, getSystemClassLoader()); } *(S progID, L files, ClassLoader parent) { super(new URL[0], parent); this.progID = progID; this.files = files; ctex { for (File f : files) addURL(f.toURI().toURL()); } fixACCInClassLoader(this); } protected Class findClass(S name) throws ClassNotFoundException { try { triedToLoad.add(name); Class c = super.findClass(name); loadedClasses.add(c); if (eq(name, "main")) callOpt(javax(), 'registerAMainClass, c); ret c; } catch (ClassNotFoundException e) { throw new ClassNotFoundException("Class " + name + " not found in " + joinWithComma(map(f f2s, files)) + " (progID=" + progID + ")" + (triedToLoad.contains(name) ? ", tried to load before" : ""), e); } } toString { ret "JavaXClassLoader[" + systemHashCodeHex(this) + "] - " + progID; } }