package jetbrains.mps.lang.structure.pluginSolution.plugin; /*Generated by MPS */ import jetbrains.mps.ide.platform.actions.core.MoveNodesAction; import jetbrains.mps.smodel.structure.Extension; import jetbrains.mps.project.MPSProject; import java.util.List; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.ide.platform.actions.core.MoveNodesUtil; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.internal.collections.runtime.IWhereFilter; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.internal.collections.runtime.Sequence; import jetbrains.mps.lang.structure.behavior.AbstractConceptDeclaration__BehaviorDescriptor; import com.intellij.openapi.ui.Messages; import org.jetbrains.mps.openapi.model.SModelReference; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import org.jetbrains.mps.openapi.module.SModule; import jetbrains.mps.smodel.Language; import jetbrains.mps.internal.collections.runtime.ISelector; import jetbrains.mps.ide.ui.dialogs.properties.choosers.CommonChoosers; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import jetbrains.mps.ide.platform.refactoring.NodeLocation; public class MoveConcepts implements MoveNodesAction { public static class MoveConcepts_extension extends Extension.Default<MoveNodesAction> { public MoveConcepts_extension() { super("jetbrains.mps.ide.platform.MoveNodesActionEP"); } public MoveNodesAction get() { return new MoveConcepts(); } } private static final String NAME = "Move Concepts"; public String getName() { return NAME; } public boolean isApplicable(MPSProject project, final List<SNode> target) { if (!(MoveNodesUtil.areSiblings(target, project.getRepository()))) { return false; } final Wrappers._boolean result = new Wrappers._boolean(); project.getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { result.value = ListSequence.fromList(target).any(new IWhereFilter<SNode>() { public boolean accept(SNode it) { return SNodeOperations.isInstanceOf(it, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration")); } }); } }); return result.value; } public void execute(final MPSProject project, List<SNode> nodesToMove) { final List<SNode> conceptsToMove = Sequence.fromIterable(SNodeOperations.ofConcept(nodesToMove, MetaAdapterFactory.getConcept(0xc72da2b97cce4447L, 0x8389f407dc1158b7L, 0x1103553c5ffL, "jetbrains.mps.lang.structure.structure.AbstractConceptDeclaration"))).toListSequence(); final Wrappers._boolean hasGenerator = new Wrappers._boolean(false); project.getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { hasGenerator.value = ListSequence.fromList(conceptsToMove).any(new IWhereFilter<SNode>() { public boolean accept(SNode node) { return ListSequence.fromList(AbstractConceptDeclaration__BehaviorDescriptor.findGeneratorFragments_id5zMz2aJEI4B.invoke(node)).isNotEmpty(); } }); } }); if (hasGenerator.value) { Messages.showWarningDialog(project.getProject(), "Generator fragments will not be moved.", NAME); } final Wrappers._T<List<SModelReference>> structureModels = new Wrappers._T<List<SModelReference>>(); project.getRepository().getModelAccess().runReadAction(new _Adapters._return_P0_E0_to_Runnable_adapter(new _FunctionTypes._return_P0_E0<List<SModelReference>>() { public List<SModelReference> invoke() { Iterable<SModule> modules = project.getProjectModules(); return structureModels.value = Sequence.fromIterable(modules).ofType(Language.class).select(new ISelector<Language, SModelReference>() { public SModelReference select(Language it) { return check_u6ijv2_a0a0a0a0a1a0h0f(it.getStructureModelDescriptor()); } }).where(new IWhereFilter<SModelReference>() { public boolean accept(SModelReference it) { return it != null; } }).toListSequence(); } })); final SModelReference targetModelRef = CommonChoosers.showModelChooser(project, NAME, structureModels.value); if (targetModelRef == null) { return; } final Wrappers._T<SModel> targetModel = new Wrappers._T<SModel>(); project.getRepository().getModelAccess().runReadAction(new Runnable() { public void run() { targetModel.value = targetModelRef.resolve(project.getRepository()); } }); MoveNodesUtil.moveTo(project, getName(), MapSequence.<MoveNodesUtil.NodeProcessor, List<SNode>>fromMapAndKeysArray(new HashMap<MoveNodesUtil.NodeProcessor, List<SNode>>(), new MoveNodesUtil.NodeCreatingProcessor(new NodeLocation.NodeLocationRoot(targetModel.value), project)).withValues(nodesToMove)); } private static SModelReference check_u6ijv2_a0a0a0a0a1a0h0f(SModel checkedDotOperand) { if (null != checkedDotOperand) { return checkedDotOperand.getReference(); } return null; } }