package jetbrains.mps.idea.core.refactoring; import com.intellij.openapi.project.Project; import jetbrains.mps.ide.platform.refactoring.RefactoringAccessEx; import jetbrains.mps.ide.platform.refactoring.RenameDialog; import jetbrains.mps.project.MPSProject; import jetbrains.mps.refactoring.framework.RefactoringContext; import jetbrains.mps.util.SNodeOperations; import org.jetbrains.annotations.NotNull; import org.jetbrains.mps.openapi.model.SNode; import org.jetbrains.mps.openapi.model.SNodeUtil; import java.util.Arrays; /** * danilla 6/17/13 */ // default rename logic: call jetbrains.mps.lang.core.refactorings.Rename refactoring // and update psi references to the renamed node if any public class DefaultRenameContributor implements RenameRefactoringContributor { @Override public boolean isAvailableFor(@NotNull SNode node) { return true; } @Override public void invoke(@NotNull Project project, @NotNull SNode node) { final MPSProject mpsProject = project.getComponent(MPSProject.class); String oldName = node.getName(); final String newName = RenameDialog.getNewName(project, oldName, "node"); if (newName == null) return; if (!SNodeUtil.isAccessible(node, mpsProject.getRepository())) { return; } RefactoringAccessEx.getInstance().getRefactoringFacade().execute( RefactoringContext.createRefactoringContext( new PsiRenameRefactoringWrapper(), Arrays.asList("newName"), Arrays.asList(newName), node, mpsProject)); } }