package jetbrains.mps.ide.java.actions;
/*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.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.ide.platform.refactoring.MoveNodeDialog;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.ide.platform.actions.core.MoveNodesUtil;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import java.util.ArrayList;
import jetbrains.mps.ide.platform.refactoring.NodeLocation;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.baseLanguage.util.plugin.refactorings.MemberInsertingUtils;
public class MoveStaticField implements MoveNodesAction {
public static class MoveStaticField_extension extends Extension.Default<MoveNodesAction> {
public MoveStaticField_extension() {
super("jetbrains.mps.ide.platform.MoveNodesActionEP");
}
public MoveNodesAction get() {
return new MoveStaticField();
}
}
public String getName() {
return "Move Static Field";
}
public boolean isApplicable(MPSProject project, final List<SNode> nodes) {
final Wrappers._boolean result = new Wrappers._boolean();
project.getRepository().getModelAccess().runReadAction(new Runnable() {
public void run() {
result.value = ListSequence.fromList(nodes).count() == 1 && SNodeOperations.isInstanceOf(ListSequence.fromList(nodes).first(), MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93c84351fL, "jetbrains.mps.baseLanguage.structure.StaticFieldDeclaration"));
}
});
return result.value;
}
public void execute(final MPSProject project, List<SNode> nodes) {
final SNode target = SNodeOperations.cast(ListSequence.fromList(nodes).first(), MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf93c84351fL, "jetbrains.mps.baseLanguage.structure.StaticFieldDeclaration"));
final SNode whereToMove = MoveNodeDialog.getSelectedObject(project.getProject(), target, new MoveNodeDialog.NodeFilter("Select class to move: refactoring can't be applied to selected node") {
@Override
public boolean check(SNode selectedObject, SNode nodeToMove, SModel modelOfSelectedObject) {
return SNodeOperations.isInstanceOf(selectedObject, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")) && !(ListSequence.fromList(SNodeOperations.getNodeAncestors(nodeToMove, null, false)).contains(selectedObject));
}
});
if (whereToMove == null) {
return;
}
project.getRepository().getModelAccess().executeCommand(new Runnable() {
public void run() {
MoveNodesUtil.moveTo(project, getName(), MapSequence.<MoveNodesUtil.NodeProcessor, List<SNode>>fromMapAndKeysArray(new HashMap<MoveNodesUtil.NodeProcessor, List<SNode>>(), new MoveNodesUtil.NodeCreatingProcessor(new MoveStaticField.NodeLocationClassifierMember(SNodeOperations.cast(whereToMove, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier"))), project)).withValues(ListSequence.fromListAndArray(new ArrayList<SNode>(), target)));
}
});
}
public static class NodeLocationClassifierMember extends NodeLocation.NodeLocationChild {
public NodeLocationClassifierMember(SNode parent) {
super(parent, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, 0x4a9a46de59132803L, "member"));
}
@Override
public void insertNode(SRepository repository, SNode nodeToMove) {
SNode oldParent = nodeToMove.getParent();
if (oldParent != null) {
oldParent.removeChild(nodeToMove);
}
MemberInsertingUtils.insertClassifierMemberInBestPlace(SNodeOperations.cast(getNode().resolve(repository), MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")), SNodeOperations.cast(nodeToMove, MetaAdapterFactory.getInterfaceConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x112574373bdL, "jetbrains.mps.baseLanguage.structure.ClassifierMember")));
}
}
}