mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
rename in place if corresponding option is selected (IDEA-179917)
rename without predefined new name is available in editor only and thus it's safe to rely on context; if no handler is found, fallback to original implementation
This commit is contained in:
@@ -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<DataContext> 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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user