package jetbrains.mps.smodel.search;
/*Generated by MPS */
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Collections;
import java.util.Arrays;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.util.Condition;
import java.util.ArrayList;
import org.jetbrains.mps.openapi.model.SNodeUtil;
public class ConceptAndSuperConceptsScope extends AbstractSearchScope {
private SNode myTopConcept;
public ConceptAndSuperConceptsScope(@Nullable SNode topConcept) {
myTopConcept = topConcept;
}
public List<SNode> getConcepts() {
if (myTopConcept == null) {
return Collections.emptyList();
}
return Arrays.asList(ConceptAndSuperConceptsCache.getInstance(myTopConcept).getConcepts());
}
public SNode getPropertyDeclarationByName(final String name) {
if (myTopConcept == null) {
return null;
}
return ConceptAndSuperConceptsCache.getInstance(myTopConcept).getPropertyDeclarationByName(name);
}
public List<SNode> getPropertyDeclarations() {
if (myTopConcept == null) {
return Collections.emptyList();
}
return ConceptAndSuperConceptsCache.getInstance(myTopConcept).getPropertyDeclarations();
}
public SNode getLinkDeclarationByRole(final String role) {
if (myTopConcept == null) {
return null;
}
return ConceptAndSuperConceptsCache.getInstance(myTopConcept).getLinkDeclarationByRole(role);
}
public SNode getMostSpecificLinkDeclarationByRole(final String role) {
if (myTopConcept == null) {
return null;
}
return ConceptAndSuperConceptsCache.getInstance(myTopConcept).getMostSpecificLinkDeclarationByRole(role);
}
public List<SNode> getLinkDeclarationsExcludingOverridden() {
if (myTopConcept == null) {
return Collections.emptyList();
}
return ConceptAndSuperConceptsCache.getInstance(myTopConcept).getLinkDeclarationsExcludingOverridden();
}
@NotNull
@Override
public List<SNode> getNodes(Condition<SNode> condition) {
if (myTopConcept == null) {
return Collections.emptyList();
}
List<SNode> result = new ArrayList<SNode>();
// filter by condition
for (SNode node : getConcepts()) {
if (node == null) {
continue;
}
for (SNode n : SNodeUtil.getDescendants(node, condition, true)) {
result.add(n);
}
}
return result;
}
}