package jetbrains.mps.ide.devkit.actions; /*Generated by MPS */ import java.util.List; import org.jetbrains.mps.openapi.language.SConcept; import org.jetbrains.mps.openapi.language.SLanguage; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.mps.openapi.language.SAbstractConcept; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import jetbrains.mps.smodel.LanguageAspect; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.internal.collections.runtime.Sequence; public class ConceptEditorHelper { public static List<SConcept> getAvailableConceptAspects(SLanguage l, SNode node) { List<SConcept> result = ListSequence.fromList(new ArrayList<SConcept>()); for (SAbstractConcept c : l.getConcepts()) { if (c.isAbstract()) { continue; } if (!((c instanceof SConcept))) { continue; } if (!(((SConcept) c).isRootable())) { continue; } if (!(SConceptOperations.isSubConceptOf(SNodeOperations.asSConcept(c), MetaAdapterFactory.getInterfaceConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x24614259e94f0c84L, "jetbrains.mps.lang.structure.structure.IConceptAspect")))) { continue; } if (((boolean) (Boolean) BHReflection.invoke(SNodeOperations.asSConcept(SNodeOperations.castConcept(c, MetaAdapterFactory.getInterfaceConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x24614259e94f0c84L, "jetbrains.mps.lang.structure.structure.IConceptAspect"))), SMethodTrimmedId.create("canBeAppliedToNode", null, "7IH442d05tK"), node))) { ListSequence.fromList(result).addElement(((SConcept) c)); } } return result; } public static List<SConcept> getAvailableConceptAspects(LanguageAspect aspect, SNode node) { // [MM] this LanguageAspect usage is reviewed List<SConcept> result = ListSequence.fromList(new ArrayList<SConcept>()); for (SLanguage slang : CollectionSequence.fromCollection(aspect.getMainLanguages())) { ListSequence.fromList(result).addSequence(ListSequence.fromList(getAvailableConceptAspects(slang, node))); } return result; } public static List<SNode> sortRootsByConcept(List<SNode> roots, final SAbstractConcept[] conceptOrder) { return ListSequence.fromList(roots).sort(new ISelector<SNode, Integer>() { public Integer select(SNode root) { int conceptIndex = Sequence.fromIterable(Sequence.fromArray(conceptOrder)).indexOf(SNodeOperations.getConcept(root)); return (conceptIndex == -1 ? conceptOrder.length : conceptIndex); } }, true).toListSequence(); } }