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); } }; } }