diff --git a/platform/lang-api/src/com/intellij/codeInspection/RefactoringQuickFix.java b/platform/lang-api/src/com/intellij/codeInspection/RefactoringQuickFix.java index e12f703a2cdf..09d66a169762 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/RefactoringQuickFix.java +++ b/platform/lang-api/src/com/intellij/codeInspection/RefactoringQuickFix.java @@ -42,6 +42,14 @@ public interface RefactoringQuickFix extends LocalQuickFix { @NotNull RefactoringActionHandler getHandler(); + /** + * Override if preferred handler can be chosen based on context + */ + @NotNull + default RefactoringActionHandler getHandler(DataContext context) { + return getHandler(); + } + default PsiElement getElementToRefactor(PsiElement element) { final PsiElement parent = element.getParent(); return (parent instanceof PsiNamedElement) ? parent : element; @@ -54,7 +62,7 @@ public interface RefactoringQuickFix extends LocalQuickFix { } final Consumer consumer = dataContext -> { dataContext = enhanceDataContext(dataContext); - final RefactoringActionHandler handler = getHandler(); + final RefactoringActionHandler handler = getHandler(dataContext); handler.invoke(element.getProject(), new PsiElement[] {elementToRefactor}, dataContext); }; DataManager.getInstance().getDataContextFromFocus().doWhenDone(consumer); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/RenameFix.java b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/RenameFix.java index fc8b1441d921..2c78afe21399 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/RenameFix.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/RenameFix.java @@ -16,12 +16,15 @@ package com.siyeh.ig.fixes; import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.RefactoringActionHandlerFactory; import com.intellij.refactoring.RefactoringFactory; import com.intellij.refactoring.RenameRefactoring; +import com.intellij.refactoring.rename.RenameHandler; +import com.intellij.refactoring.rename.RenameHandlerRegistry; import com.siyeh.InspectionGadgetsBundle; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -74,6 +77,13 @@ public class RenameFix extends RefactoringInspectionGadgetsFix { return RefactoringActionHandlerFactory.getInstance().createRenameHandler(); } + @NotNull + @Override + public RefactoringActionHandler getHandler(DataContext context) { + RenameHandler renameHandler = RenameHandlerRegistry.getInstance().getRenameHandler(context); + return renameHandler != null ? renameHandler : getHandler(); + } + @Override public void doFix(Project project, ProblemDescriptor descriptor) { if (m_targetName == null) {