package scotch.compiler;
import static scotch.symbol.Symbol.qualified;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import scotch.symbol.Symbol;
import scotch.symbol.Symbol.QualifiedSymbol;
public class ReExportMap {
private final Map<String, Map<String, String>> reExports;
public ReExportMap() {
reExports = new LinkedHashMap<>();
}
public void addReExports(String moduleName, Map<String, String> reExports) {
reExports.forEach((memberName, targetModule) -> addReExport(moduleName, memberName, targetModule));
}
public Optional<Symbol> qualify(QualifiedSymbol symbol) {
if (reExports.containsKey(symbol.getModuleName()) && reExports.get(symbol.getModuleName()).containsKey(symbol.getMemberName())) {
return Optional.of(qualified(reExports.get(symbol.getModuleName()).get(symbol.getMemberName()), symbol.getMemberName()));
} else {
return Optional.empty();
}
}
private void addReExport(String moduleName, String memberName, String targetModule) {
reExports.computeIfAbsent(moduleName, k -> new LinkedHashMap<>()).put(memberName, targetModule);
}
}