package org.sugarj.driver.transformations.primitive;
import java.util.LinkedList;
import java.util.List;
import org.spoofax.interpreter.core.IContext;
import org.spoofax.interpreter.core.InterpreterException;
import org.spoofax.interpreter.library.AbstractPrimitive;
import org.spoofax.interpreter.library.ssl.StrategoHashMap;
import org.spoofax.interpreter.stratego.Strategy;
import org.spoofax.interpreter.terms.IStrategoTerm;
import org.sugarj.common.ATermCommands;
import org.sugarj.common.Environment;
import org.sugarj.util.Renaming;
/**
* Primitive for retrieving the current renamings set in the driver's environment.
*
* @author seba
*/
class CurrentRenamings extends AbstractPrimitive {
private Environment environment;
public CurrentRenamings(Environment environment) {
super("SUGARJ_current_renamings", 0, 0);
this.environment = environment;
}
@Override
public boolean call(IContext context, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException {
List<Renaming> renamings = environment.getRenamings();
StrategoHashMap map = new StrategoHashMap(renamings.size(), Math.max(1, renamings.size()));
for (Renaming r : renamings) {
List<IStrategoTerm> qualTerms = new LinkedList<IStrategoTerm>();
for (String qual : r.pkgs)
qualTerms.add(ATermCommands.makeString(qual));
IStrategoTerm quals = ATermCommands.makeList("Qualifiers", qualTerms);
IStrategoTerm from = ATermCommands.makeString(r.from);
IStrategoTerm to = ATermCommands.makeString(r.to);
if (!map.containsKey(from))
map.put(from, to);
if (!map.containsKey(ATermCommands.makeTuple(quals, from)))
map.put(ATermCommands.makeTuple(quals, from), to);
}
context.setCurrent(ATermCommands.makeAppl("Hashtable", "", 1, map));
return true;
}
}