// TODO: unload src libs when not used anymore, // especially: old versions static Map hotwire_srcLibsMap = syncMap(); srecord hotwire_srcLibsMap_Cached(ClassLoader classLoader, S jname) {} sbool hotwire_verboseLinking; static JavaXClassLoader hotwire_makeClassLoader_stickyAndSrcLibs(L files) { new L files2; new Map parents; // key = package/class name for (File f : files) { S libID = DiskSnippetCache_fileToLibID(f); if (libID != null && isStickyLibrary(libID)) { if (addLibrary(libID)) print("Retaining sticky library " + libID); } else if (f != first(files) && isMarkedAsSrcLib(libID = isFile(f) ? loadTextFileFromZip(f, "progID") : null)) { hotwire_srcLibsMap_Cached cached = hotwire_srcLibsMap.get(f); if (cached == null) { print("Hotwiring src lib " + libID + " / " + f); S jname = dropSuffix(".java", getJavaSrcNameOfSrcLib(libID)); assertNempty(libID, jname); Class cc = hotwireSpecialMainClass(libID, jname.replace("/", "."); setCreatorTo(cc, mc()); cached = hotwire_srcLibsMap_Cached(cc.getClassLoader(), jname); hotwire_srcLibsMap.put(f, cached); } S pkg = beforeSlash(cached.jname); if (hotwire_verboseLinking) print("Linking src lib " + libID + " as " + pkg); parents.put(pkg, cached.classLoader); } else files2.add(f); } JavaXClassLoaderWithParents cl = new(null, files2, myClassLoader()); // progID is set later putAll(cl.parentMap, parents); ret cl; }