package jetbrains.mps.scope;
/*Generated by MPS */
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.annotations.Nullable;
import jetbrains.mps.internal.collections.runtime.Sequence;
import jetbrains.mps.internal.collections.runtime.IWhereFilter;
public class FilteringScope extends DelegatingScope {
public FilteringScope(@NotNull Scope scope) {
super(scope);
}
public boolean isExcluded(SNode node) {
return false;
}
@Override
public SNode resolve(SNode contextNode, String refText) {
SNode resolved = super.resolve(contextNode, refText);
return (isExcluded(resolved) ? null : resolved);
}
@Override
public Iterable<SNode> getAvailableElements(@Nullable String prefix) {
Iterable<SNode> availableElements = super.getAvailableElements(prefix);
return Sequence.fromIterable(availableElements).where(new IWhereFilter<SNode>() {
public boolean accept(SNode it) {
return !(isExcluded(it));
}
});
}
@Override
public String getReferenceText(SNode contextNode, SNode node) {
if (isExcluded(node)) {
return null;
}
return super.getReferenceText(contextNode, node);
}
@Override
public boolean contains(SNode node) {
if (isExcluded(node)) {
return false;
}
return super.contains(node);
}
}