package jetbrains.mps.smodel.search; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SNode; import java.util.List; import java.util.ArrayList; import jetbrains.mps.smodel.SNodeUtil; import jetbrains.mps.smodel.NodeReadAccessCasterInEditor; import jetbrains.mps.util.Computable; import org.jetbrains.annotations.Nullable; public class SModelSearchUtil { public SModelSearchUtil() { } public static ISearchScope createModelAndImportedModelsScope(SModel model, boolean rootsOnly) { return new ModelAndImportedModelsScope(model, rootsOnly); } public static SNode findLinkDeclaration(SNode conceptDeclaration, String role) { if (role == null) { return null; } return new ConceptAndSuperConceptsScope(conceptDeclaration).getLinkDeclarationByRole(role); } public static SNode findMostSpecificLinkDeclaration(SNode conceptDeclaration, String role) { // LinkDeclaration if (role == null) { return null; } return new ConceptAndSuperConceptsScope(conceptDeclaration).getMostSpecificLinkDeclarationByRole(role); } public static List<SNode> getLinkDeclarations(SNode concept) { // uses in mbeddr return new ConceptAndSuperConceptsScope(concept).getLinkDeclarationsExcludingOverridden(); } public static List<SNode> getAggregationLinkDeclarations(SNode concept) { List<SNode> list = new ConceptAndSuperConceptsScope(concept).getLinkDeclarationsExcludingOverridden(); List<SNode> result = new ArrayList<SNode>(); for (SNode link : list) { if (!(SNodeUtil.getLinkDeclaration_IsReference(link))) { result.add(link); } } return result; } public static List<SNode> getReferenceLinkDeclarations(final SNode concept) { return NodeReadAccessCasterInEditor.runReadTransparentAction(new Computable<List<SNode>>() { @Override public List<SNode> compute() { List<SNode> list = new ConceptAndSuperConceptsScope(concept).getLinkDeclarationsExcludingOverridden(); List<SNode> result = new ArrayList<SNode>(); for (SNode link : list) { if (SNodeUtil.getLinkDeclaration_IsReference(link)) { result.add(link); } } return result; } }); } public static List<SNode> getPropertyDeclarations(SNode concept) { // uses in mbeddr return new ConceptAndSuperConceptsScope(concept).getPropertyDeclarations(); } @Nullable public static SNode findPropertyDeclaration(SNode concept, String propertyName) { if (concept == null || propertyName == null) { return null; } return new ConceptAndSuperConceptsScope(concept).getPropertyDeclarationByName(propertyName); } }