package jetbrains.mps.baseLanguage.util.plugin.refactorings;
/*Generated by MPS */
import java.util.List;
import org.jetbrains.mps.openapi.model.SNode;
import java.util.ArrayList;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SConceptOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations;
import jetbrains.mps.smodel.CopyUtil;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
public class ExtractMethodFromStatementsRefactoring extends ExtractMethodRefactoring {
protected List<SNode> myStatements = new ArrayList<SNode>();
public ExtractMethodFromStatementsRefactoring(ExtractMethodRefactoringParameters params) {
super(params);
ListSequence.fromList(this.myStatements).addSequence(ListSequence.fromList(((List<SNode>) params.getNodesToRefactor())));
}
@Override
protected SNode createMethodBody() {
SNode body = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b200L, "jetbrains.mps.baseLanguage.structure.StatementList"));
this.modifyPartToExtract();
ListSequence.fromList(SLinkOperations.getChildren(body, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b200L, 0xf8cc6bf961L, "statement"))).addSequence(ListSequence.fromList((List<SNode>) CopyUtil.copy(this.myStatements)));
return body;
}
@Override
public void replaceMatch(MethodMatch match, SNode methodDeclaration) {
SNode methodCall = this.createMethodCall(match, methodDeclaration);
SNode callStatement = SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b213L, "jetbrains.mps.baseLanguage.structure.ExpressionStatement"));
SLinkOperations.setTarget(callStatement, MetaAdapterFactory.getContainmentLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc56b213L, 0xf8cc56b214L, "expression"), methodCall);
List<SNode> statements = match.getNodes();
SNodeOperations.insertPrevSiblingChild(ListSequence.fromList(statements).first(), callStatement);
for (SNode statement : ListSequence.fromList(statements)) {
SNodeOperations.deleteNode(statement);
}
}
protected void modifyPartToExtract() {
}
@Override
public SNode getMethodType() {
return SConceptOperations.createNewNode(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8cc6bf96dL, "jetbrains.mps.baseLanguage.structure.VoidType"));
}
}