private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { scriptRefQueue = new ReferenceQueue<Script>(); scripts = new ConcurrentHashMap<String, ScriptReference>(); final Map<String, CachedModuleScript> serScripts = (Map) in.readObject(); for (Map.Entry<String, CachedModuleScript> entry : serScripts.entrySet()) { final CachedModuleScript cachedModuleScript = entry.getValue(); putLoadedModule( entry.getKey(), cachedModuleScript.getModule(), cachedModuleScript.getValidator()); } }
public ModuleScript getModuleScript(Context cx, String moduleId, URI moduleUri, Scriptable paths) throws Exception { final CachedModuleScript cachedModule1 = getLoadedModule(moduleId); final Object validator1 = getValidator(cachedModule1); final ModuleSource moduleSource = (moduleUri == null) ? moduleSourceProvider.loadSource(moduleId, paths, validator1) : moduleSourceProvider.loadSource(moduleUri, validator1); if (moduleSource == ModuleSourceProvider.NOT_MODIFIED) { return cachedModule1.getModule(); } if (moduleSource == null) { return null; } final Reader reader = moduleSource.getReader(); try { final int idHash = moduleId.hashCode(); synchronized (loadLocks[(idHash >>> loadLockShift) & loadLockMask]) { final CachedModuleScript cachedModule2 = getLoadedModule(moduleId); if (cachedModule2 != null) { if (!equal(validator1, getValidator(cachedModule2))) { return cachedModule2.getModule(); } } final URI sourceUri = moduleSource.getUri(); final ModuleScript moduleScript = new ModuleScript( cx.compileReader(reader, sourceUri.toString(), 1, moduleSource.getSecurityDomain()), sourceUri, moduleSource.getBase()); putLoadedModule(moduleId, moduleScript, moduleSource.getValidator()); return moduleScript; } } finally { reader.close(); } }
private static Object getValidator(CachedModuleScript cachedModule) { return cachedModule == null ? null : cachedModule.getValidator(); }