/** * Copyright (c) 2012-2016 André Bargull * Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms. * * <https://github.com/anba/es6draft> */ package com.github.anba.es6draft.runtime.modules.loader; import static com.github.anba.es6draft.runtime.modules.SourceTextModuleRecord.ParseModule; import java.io.IOException; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Set; import com.github.anba.es6draft.runtime.Realm; import com.github.anba.es6draft.runtime.internal.RuntimeContext; import com.github.anba.es6draft.runtime.internal.ScriptLoader; import com.github.anba.es6draft.runtime.modules.ModuleSource; import com.github.anba.es6draft.runtime.modules.SourceIdentifier; import com.github.anba.es6draft.runtime.modules.SourceTextModuleRecord; /** * */ public class FileModuleLoader extends AbstractFileModuleLoader<SourceTextModuleRecord> { private final ScriptLoader scriptLoader; private final HashMap<SourceIdentifier, SourceTextModuleRecord> modules = new HashMap<>(); public FileModuleLoader(RuntimeContext context, ScriptLoader scriptLoader) { super(context); this.scriptLoader = scriptLoader; } @Override protected void defineModule(SourceTextModuleRecord module) { SourceIdentifier identifier = module.getSourceCodeId(); if (modules.containsKey(identifier)) { throw new IllegalArgumentException(); } modules.put(identifier, module); } @Override protected SourceTextModuleRecord getModule(SourceIdentifier identifier) { return modules.get(identifier); } @Override protected SourceTextModuleRecord parseModule(SourceIdentifier identifier, ModuleSource source) throws IOException { return ParseModule(scriptLoader, identifier, source); } @Override protected void linkModule(SourceTextModuleRecord module, Realm realm) { if (module.getRealm() == null) { module.setRealm(realm); } } @Override protected Set<String> getRequestedModules(SourceTextModuleRecord module) { return module.getRequestedModules(); } @Override protected Collection<SourceTextModuleRecord> getModules() { return Collections.unmodifiableCollection(modules.values()); } }