// TODO: unload src libs when not used anymore, // especially: old versions static Map hotwire_srcLibsMap = syncMap(); 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)) { ClassLoader c = hotwire_srcLibsMap.get(f); S jname = dropSuffix(".java", getJavaSrcNameOfSrcLib(libID)); assertNempty(libID, jname); if (c == null) { print("Hotwiring src lib " + libID + " / " + f); Class cc = hotwireSpecialMainClass(libID, jname.replace("/", "."); setCreatorTo(cc, mc()); c = cc.getClassLoader(); hotwire_srcLibsMap.put(f, c); } S pkg = beforeSlash(jname); print("Linking src lib " + libID + " as " + pkg); parents.put(pkg, c); } else files2.add(f); } JavaXClassLoaderWithParents cl = new(null, files2, myClassLoader()); // progID is set later putAll(cl.parentMap, parents); ret cl; }