package edu.ucsd.arcum.interpreter.satisfier;
import java.util.Set;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
import org.eclipse.jdt.core.dom.ITypeBinding;
import edu.ucsd.arcum.interpreter.ast.FormalParameter;
import edu.ucsd.arcum.interpreter.parser.FragmentParser;
import edu.ucsd.arcum.interpreter.query.IEntityLookup;
// Exports the same bindings found in the given base, but excluding the variables
// passed into the constructors exclusion set.
public class MaskedLookup implements IEntityLookup
{
private IEntityLookup base;
private Set<String> varsToExclude;
public MaskedLookup(IEntityLookup base, Set<String> varsToExclude) {
this.base = base;
this.varsToExclude = varsToExclude;
}
@Override public BindingMap extractAsBindings() {
BindingMap result = base.extractAsBindings();
result = result.withVarsRemoved(varsToExclude);
return result;
}
@Override public FormalParameter findResolvedSingleton(String variableName) {
if (varsToExclude.contains(variableName)) {
return null;
}
else {
return base.findResolvedSingleton(variableName);
}
}
@Override public String lookupEntitiesID(Object entity) {
return base.lookupEntitiesID(entity);
}
@Override public Object lookupEntity(String reference) {
if (varsToExclude.contains(reference)) {
return null;
}
else {
return base.lookupEntity(reference);
}
}
@Override public ITypeBinding lookupTypeBinding(ASTNode node) {
return base.lookupTypeBinding(node);
}
@Override public AbstractTypeDeclaration lookupTypeDeclaration(
ITypeBinding givenBinding)
{
return base.lookupTypeDeclaration(givenBinding);
}
@Override public FragmentParser newParser(boolean matchingMode) {
return base.newParser(matchingMode);
}
@Override
public TypeLookupTable getTypeLookupTable() {
TypeLookupTable result = base.getTypeLookupTable();
for (String var : varsToExclude) {
result.removeInformationFor(var);
}
return result;
}
}