package jetbrains.mps.lang.smodel.generator.smodelAdapter; /*Generated by MPS */ import org.jetbrains.mps.openapi.language.SAbstractConcept; import java.util.List; import java.util.Collections; import jetbrains.mps.kernel.model.SModelUtil; import java.util.ArrayList; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.SLanguageHierarchy; import jetbrains.mps.smodel.SModelOperations; import org.jetbrains.mps.openapi.language.SConcept; import java.util.Set; import org.jetbrains.mps.openapi.language.SLanguage; import jetbrains.mps.smodel.ConceptDescendantsCache; import jetbrains.mps.internal.collections.runtime.SetSequence; import org.jetbrains.mps.openapi.model.SNode; public final class SConceptOperations { private SConceptOperations() { } public static boolean isExactly(SAbstractConcept concept1, SAbstractConcept concept2) { if (concept1 == null) { return false; } return concept1.equals(concept2); } public static boolean isSuperConceptOf(SAbstractConcept superConcept, SAbstractConcept subConcept) { if (superConcept == null || subConcept == null) { return false; } return subConcept.isSubConceptOf(superConcept); } public static boolean isSubConceptOf(SAbstractConcept subConcept, SAbstractConcept superConcept) { if (subConcept == null || superConcept == null) { return false; } return subConcept.isSubConceptOf(superConcept); } public static List<SAbstractConcept> getDirectSuperConcepts(SAbstractConcept concept, boolean inclusion) { if (concept == null) { return Collections.<SAbstractConcept>emptyList(); } List<SAbstractConcept> result = SModelUtil.getDirectSuperConcepts(concept); if (inclusion) { result = new ArrayList<SAbstractConcept>(result); result.add(0, concept); } return Collections.unmodifiableList(result); } public static List<SAbstractConcept> getAllSuperConcepts(SAbstractConcept concept, boolean inclusion) { if (concept == null) { return Collections.<SAbstractConcept>emptyList(); } List<SAbstractConcept> result = SModelUtil.getConceptAndAllSuperConcepts(concept); if (!(inclusion)) { result = new ArrayList<SAbstractConcept>(result); result.remove(concept); } return Collections.unmodifiableList(result); } /** * Find all concepts that extend supplied one, and are declared in a language either imported directly in to the model, * or the language extended by those imported. * Intention is to get possible concepts which instances, added to model, would not require any dependency change. */ @NotNull public static List<SAbstractConcept> getAllSubConcepts(SAbstractConcept concept, SModel model) { return getAllSubConcepts(concept, new SLanguageHierarchy(SModelOperations.getAllLanguageImports(model)).getExtended()); } /** * Alternative {@link jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations#getAllSubConcepts(SAbstractConcept, SModel) }, tailored for non-interface concepts */ @NotNull public static List<SConcept> getAllSubConcepts2(SConcept concept, SModel model) { List<SAbstractConcept> allSubConcepts = getAllSubConcepts(concept, new SLanguageHierarchy(SModelOperations.getAllLanguageImports(model)).getExtended()); ArrayList<SConcept> rv = new ArrayList<SConcept>(allSubConcepts.size()); for (SAbstractConcept ac : allSubConcepts) { if (ac instanceof SConcept) { rv.add((SConcept) ac); } else { assert false : "SConcept hierarchy could not contain interfaces:" + ac.getQualifiedName(); } } return rv; } public static List<SAbstractConcept> getAllSubConcepts(SAbstractConcept concept, Set<SLanguage> availableLanguages) { if (concept == null) { return new ArrayList<SAbstractConcept>(); } Set<SAbstractConcept> descendants = ConceptDescendantsCache.getInstance().getDescendants(concept); List<SAbstractConcept> result = new ArrayList<SAbstractConcept>(); for (SAbstractConcept descendant : descendants) { SLanguage lang = descendant.getLanguage(); if (SetSequence.fromSet(availableLanguages).contains(lang)) { result.add(descendant); } } return result; } public static SNode createNewNode(SConcept concept) { return jetbrains.mps.lang.smodel.generator.smodelAdapter.SModelOperations.createNewNode(null, null, concept); } public static String conceptAlias(SAbstractConcept concept) { if (concept == null) { return null; } return concept.getConceptAlias(); } public static String shortDescription(SAbstractConcept concept) { if (concept == null) { return null; } return concept.getShortDescription(); } }