package jetbrains.mps.baseLanguage.refactorings; /*Generated by MPS */ import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.module.SearchScope; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.baseLanguage.util.plugin.refactorings.MethodRefactoringUtils; import jetbrains.mps.progress.EmptyProgressMonitor; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SLinkOperations; public class SafeDeleteMethod { private SNode myMethod; private SearchScope myScope; public SafeDeleteMethod(SearchScope scope, SNode method) { myMethod = method; myScope = scope; } public void doRefactor() { for (SNode method : ListSequence.fromList(MethodRefactoringUtils.findOverridingMethods(myScope, myMethod, new EmptyProgressMonitor()))) { if (SNodeOperations.isInstanceOf(method, MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d4348057eL, "jetbrains.mps.lang.behavior.structure.ConceptMethodDeclaration"))) { SNode methodDecl = SNodeOperations.cast(method, MetaAdapterFactory.getConcept(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d4348057eL, "jetbrains.mps.lang.behavior.structure.ConceptMethodDeclaration")); SLinkOperations.setTarget(methodDecl, MetaAdapterFactory.getReferenceLink(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d4348057eL, 0x11d4348057fL, "overriddenMethod"), getNewOverriddenMethod(myMethod)); } } SNodeOperations.deleteNode(myMethod); } private SNode getNewOverriddenMethod(SNode methodDecl) { return SLinkOperations.getTarget(methodDecl, MetaAdapterFactory.getReferenceLink(0xaf65afd8f0dd4942L, 0x87d963a55f2a9db1L, 0x11d4348057eL, 0x11d4348057fL, "overriddenMethod")); } }