package jetbrains.mps.baseLanguage.util.plugin.refactorings; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import org.jetbrains.mps.openapi.language.SAbstractConcept; import org.jetbrains.mps.openapi.language.SContainmentLink; import jetbrains.mps.internal.collections.runtime.CollectionSequence; import org.jetbrains.mps.openapi.model.SModel; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.smodel.SModelOperations; import jetbrains.mps.smodel.SModelInternal; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.module.ReloadableModuleBase; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.module.SDependency; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.internal.collections.runtime.ListSequence; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; public class MoveRefactoringUtils { public MoveRefactoringUtils() { } public static void addNodeAtLink(SNode container, SNode node) { if (SNodeOperations.isInstanceOf(container, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")) && SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getInterfaceConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x112574373bdL, "jetbrains.mps.baseLanguage.structure.ClassifierMember"))) { MemberInsertingUtils.insertClassifierMemberInBestPlace(SNodeOperations.cast(container, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")), SNodeOperations.cast(node, MetaAdapterFactory.getInterfaceConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x112574373bdL, "jetbrains.mps.baseLanguage.structure.ClassifierMember"))); } else { SAbstractConcept concept = SNodeOperations.getConcept(node); for (SContainmentLink link : CollectionSequence.fromCollection(SNodeOperations.getConcept(container).getContainmentLinks())) { if (link.getTargetConcept() == concept) { container.addChild(link, node); } } } } private static void addImportIfNeed(SModel model, SModel toImport) { if (model == null || toImport == null) { return; } SModelReference ref = toImport.getReference(); if (model == toImport || SModelOperations.getImportedModelUIDs(model).contains(ref)) { return; } ((SModelInternal) model).addModelImport(ref, false); SModule module = model.getModule(); if (module instanceof ReloadableModuleBase) { SModuleReference module2import = toImport.getModule().getModuleReference(); Iterable<SDependency> declaredDependencies = module.getDeclaredDependencies(); for (SDependency dependency : Sequence.fromIterable(declaredDependencies)) { if (dependency.getTargetModule().equals(module2import)) { return; } } ((ReloadableModuleBase) module).addDependency(module2import, false); } } public static void addNodeModelImportIfNeed(SNode node, SNode toImport) { addImportIfNeed(SNodeOperations.getModel(node), SNodeOperations.getModel(toImport)); } public static void fixImportsFromNode(SNode node) { for (SNode descendant : ListSequence.fromList(SNodeOperations.getNodeDescendants(node, MetaAdapterFactory.getConcept(0xceab519525ea4f22L, 0x9b92103b95ca8c0cL, 0x10802efe25aL, "jetbrains.mps.lang.core.structure.BaseConcept"), false, new SAbstractConcept[]{}))) { for (SReference reference : ListSequence.fromList(SNodeOperations.getReferences(descendant))) { addNodeModelImportIfNeed(node, SLinkOperations.getTargetNode(reference)); } } } public static boolean isReference(SNode node) { return ListSequence.fromList(SNodeOperations.getChildren(node)).isEmpty() && ListSequence.fromList(SNodeOperations.getReferences(node)).count() == 1; } }