package jetbrains.mps.lang.generator.intentions; /*Generated by MPS */ import jetbrains.mps.intentions.AbstractIntentionDescriptor; import jetbrains.mps.openapi.intentions.IntentionFactory; import java.util.Collection; import jetbrains.mps.openapi.intentions.IntentionExecutable; import jetbrains.mps.openapi.intentions.Kind; import jetbrains.mps.smodel.SNodePointer; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.openapi.editor.EditorContext; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import java.util.Collections; import jetbrains.mps.intentions.AbstractIntentionExecutable; import jetbrains.mps.smodel.action.SNodeFactoryOperations; import java.util.HashMap; import java.util.List; import jetbrains.mps.smodel.CopyUtil; import org.jetbrains.mps.openapi.model.SReference; import org.jetbrains.mps.openapi.model.SNodeAccessUtil; import org.jetbrains.mps.openapi.language.SProperty; import jetbrains.mps.openapi.intentions.IntentionDescriptor; public final class ConvertClassConceptToExtract_Intention extends AbstractIntentionDescriptor implements IntentionFactory { private Collection<IntentionExecutable> myCachedExecutable; public ConvertClassConceptToExtract_Intention() { super(Kind.NORMAL, false, new SNodePointer("r:00000000-0000-4000-0000-011c895902e5(jetbrains.mps.lang.generator.intentions)", "34229510189607557")); } @Override public String getPresentation() { return "ConvertClassConceptToExtract"; } @Override public boolean isApplicable(final SNode node, final EditorContext editorContext) { if (!(isApplicableToNode(node, editorContext))) { return false; } return true; } private boolean isApplicableToNode(final SNode node, final EditorContext editorContext) { return SConceptOperations.isExactly(SNodeOperations.asSConcept(SNodeOperations.getConcept(node)), MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept")); } @Override public boolean isSurroundWith() { return false; } public Collection<IntentionExecutable> instances(final SNode node, final EditorContext context) { if (myCachedExecutable == null) { myCachedExecutable = Collections.<IntentionExecutable>singletonList(new ConvertClassConceptToExtract_Intention.IntentionImplementation()); } return myCachedExecutable; } /*package*/ final class IntentionImplementation extends AbstractIntentionExecutable { public IntentionImplementation() { } @Override public String getDescription(final SNode node, final EditorContext editorContext) { return "Convert ClassConcept to ExtractStaticInnerClassConcept"; } @Override public void execute(final SNode node, final EditorContext editorContext) { SNode newNode = SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(MetaAdapterFactory.getConcept(0xdf345b11b8c74213L, 0xac6648d2a9b75d88L, 0xd01bb6e8b1cd97aL, "jetbrains.mps.baseLanguageInternal.structure.ExtractStaticInnerClassConcept")), null); for (SNode child : SNodeOperations.getChildren(newNode)) { SNodeOperations.deleteNode(child); } HashMap<SNode, SNode> mapping = new HashMap<SNode, SNode>(); mapping.put(node, newNode); List<SNode> children = SNodeOperations.getChildren(node); CopyUtil.copy(children, mapping); for (SNode child : children) { newNode.addChild(child.getContainmentLink(), mapping.get(child)); } for (SReference reference : SNodeOperations.getReferences(node)) { SNodeAccessUtil.setReferenceTarget(newNode, reference.getLink(), reference.getTargetNode()); } for (SProperty p : node.getProperties()) { SNodeAccessUtil.setProperty(newNode, p, SNodeAccessUtil.getProperty(node, p)); } SNodeOperations.replaceWithAnother(node, newNode); } @Override public IntentionDescriptor getDescriptor() { return ConvertClassConceptToExtract_Intention.this; } } }