package jetbrains.mps.scope;
/*Generated by MPS */
import jetbrains.mps.smodel.search.ISearchScope;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.util.Condition;
import jetbrains.mps.internal.collections.runtime.Sequence;
import java.util.Iterator;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.smodel.search.IReferenceInfoResolver;
import org.jetbrains.mps.openapi.model.SModelReference;
/**
* * Temporary solution to adapt Scope to deprecated ISearchScope.
*/
public class ScopeAdapter implements ISearchScope {
private Scope scope;
public ScopeAdapter(Scope scope) {
this.scope = scope;
}
@NotNull
@Override
public List<SNode> getNodes(Condition<SNode> condition) {
List<SNode> result = Sequence.fromIterable(scope.getAvailableElements(null)).toListSequence();
if (condition != null) {
Iterator<SNode> it = ListSequence.fromList(result).iterator();
while (it.hasNext()) {
SNode node = it.next();
if (!(condition.met(node))) {
it.remove();
}
}
}
return result;
}
@Override
public boolean isInScope(SNode node) {
return scope.contains(node);
}
@NotNull
@Override
public List<SNode> getNodes() {
return Sequence.fromIterable(scope.getAvailableElements(null)).toListSequence();
}
@Override
public IReferenceInfoResolver getReferenceInfoResolver(final SNode referenceNode, SNode targetConcept) {
return new IReferenceInfoResolver() {
/**
* * Finds node by referenceInfo and optional targetModelReference.
*/
@Override
public SNode resolve(String referenceInfo, SModelReference targetModelReference) {
return scope.resolve(referenceNode, referenceInfo);
}
};
}
}