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