mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
introduce LanguageRefactoringSupport.forContext
checks RefactoringSupportProvider.isAvailable and use it where element is available Fixes JS 'Change Signature' after aed9705385a8fcc7b4ecf3ebb19311dd55e64cc2 (WEB-34310) GitOrigin-RevId: 247d062cccdbde966c0c4caaf0caa2a93c6b04b2
This commit is contained in:
committed by
intellij-monorepo-bot
parent
2d3c7480a8
commit
a0b20ad307
+3
-1
@@ -16,6 +16,7 @@
|
||||
package com.intellij.refactoring.changeSignature;
|
||||
|
||||
import com.intellij.lang.LanguageRefactoringSupport;
|
||||
import com.intellij.lang.refactoring.RefactoringSupportProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
@@ -110,7 +111,8 @@ public class ChangeSignatureUtil {
|
||||
}
|
||||
|
||||
public static void invokeChangeSignatureOn(PsiMethod method, Project project) {
|
||||
ChangeSignatureHandler handler = LanguageRefactoringSupport.INSTANCE.forLanguage(method.getLanguage()).getChangeSignatureHandler();
|
||||
RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forContext(method);
|
||||
ChangeSignatureHandler handler = provider != null ? provider.getChangeSignatureHandler() : null;
|
||||
if (handler != null) {
|
||||
handler.invoke(project, new PsiElement[]{method}, null);
|
||||
}
|
||||
|
||||
+1
-1
@@ -638,7 +638,7 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase {
|
||||
final PsiFile file = anchorStatement.getContainingFile();
|
||||
LOG.assertTrue(file != null, "expr.getContainingFile() == null");
|
||||
final PsiElement nameSuggestionContext = editor == null ? null : file.findElementAt(editor.getCaretModel().getOffset());
|
||||
final RefactoringSupportProvider supportProvider = LanguageRefactoringSupport.INSTANCE.forLanguage(expr.getLanguage());
|
||||
final RefactoringSupportProvider supportProvider = LanguageRefactoringSupport.INSTANCE.forContext(expr);
|
||||
final boolean isInplaceAvailableOnDataContext =
|
||||
supportProvider != null &&
|
||||
editor.getSettings().isVariableInplaceRenameEnabled() &&
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
package com.intellij.lang;
|
||||
|
||||
import com.intellij.lang.refactoring.RefactoringSupportProvider;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LanguageRefactoringSupport extends LanguageExtension<RefactoringSupportProvider> {
|
||||
public static final LanguageRefactoringSupport INSTANCE = new LanguageRefactoringSupport();
|
||||
@@ -27,4 +32,15 @@ public class LanguageRefactoringSupport extends LanguageExtension<RefactoringSup
|
||||
private LanguageRefactoringSupport() {
|
||||
super("com.intellij.lang.refactoringSupport", new RefactoringSupportProvider() {});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public RefactoringSupportProvider forContext(@NotNull PsiElement element) {
|
||||
List<RefactoringSupportProvider> providers = INSTANCE.allForLanguage(element.getLanguage());
|
||||
for (RefactoringSupportProvider provider : providers) {
|
||||
if (provider.isAvailable(element)) {
|
||||
return provider;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+10
-10
@@ -16,7 +16,6 @@
|
||||
package com.intellij.refactoring.actions;
|
||||
|
||||
import com.intellij.lang.ContextAwareActionHandler;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LanguageRefactoringSupport;
|
||||
import com.intellij.lang.refactoring.RefactoringSupportProvider;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
@@ -48,7 +47,7 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
public boolean isEnabledOnElements(@NotNull PsiElement[] elements) {
|
||||
if (elements.length == 1) {
|
||||
PsiElement member = findTargetMember(elements[0]);
|
||||
return member != null && getChangeSignatureHandler(member.getLanguage()) != null;
|
||||
return member != null && getChangeSignatureHandler(member) != null;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -57,13 +56,13 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
protected boolean isAvailableOnElementInEditorAndFile(@NotNull final PsiElement element, @NotNull final Editor editor, @NotNull PsiFile file, @NotNull DataContext context) {
|
||||
PsiElement targetMember = findTargetMember(element);
|
||||
if (targetMember == null) {
|
||||
final ChangeSignatureHandler targetHandler = getChangeSignatureHandler(file.getLanguage());
|
||||
final ChangeSignatureHandler targetHandler = getChangeSignatureHandler(file);
|
||||
if (targetHandler != null) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
final ChangeSignatureHandler targetHandler = getChangeSignatureHandler(targetMember.getLanguage());
|
||||
final ChangeSignatureHandler targetHandler = getChangeSignatureHandler(targetMember);
|
||||
if (targetHandler == null) return false;
|
||||
return true;
|
||||
}
|
||||
@@ -71,7 +70,7 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
@Nullable
|
||||
private static PsiElement findTargetMember(@Nullable PsiElement element) {
|
||||
if (element == null) return null;
|
||||
final ChangeSignatureHandler fileHandler = getChangeSignatureHandler(element.getLanguage());
|
||||
final ChangeSignatureHandler fileHandler = getChangeSignatureHandler(element);
|
||||
if (fileHandler != null) {
|
||||
final PsiElement targetMember = fileHandler.findTargetMember(element);
|
||||
if (targetMember != null) return targetMember;
|
||||
@@ -108,7 +107,7 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
|
||||
final PsiElement targetMember = findTargetMember(element);
|
||||
if (targetMember == null) {
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(file.getLanguage());
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(file);
|
||||
if (handler != null) {
|
||||
final String notFoundMessage = handler.getTargetNotFoundMessage();
|
||||
if (notFoundMessage != null) {
|
||||
@@ -117,7 +116,7 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
}
|
||||
return;
|
||||
}
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember.getLanguage());
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember);
|
||||
if (handler == null) return;
|
||||
handler.invoke(project, new PsiElement[]{targetMember}, dataContext);
|
||||
}
|
||||
@@ -127,7 +126,7 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
if (elements.length != 1) return;
|
||||
final PsiElement targetMember = findTargetMember(elements[0]);
|
||||
if (targetMember == null) return;
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember.getLanguage());
|
||||
final ChangeSignatureHandler handler = getChangeSignatureHandler(targetMember);
|
||||
if (handler == null) return;
|
||||
handler.invoke(project, new PsiElement[]{targetMember}, dataContext);
|
||||
}
|
||||
@@ -135,7 +134,8 @@ public class ChangeSignatureAction extends BasePlatformRefactoringAction {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ChangeSignatureHandler getChangeSignatureHandler(Language language) {
|
||||
return LanguageRefactoringSupport.INSTANCE.forLanguage(language).getChangeSignatureHandler();
|
||||
private static ChangeSignatureHandler getChangeSignatureHandler(@NotNull PsiElement language) {
|
||||
RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forContext(language);
|
||||
return provider != null ? provider.getChangeSignatureHandler() : null;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ public class MemberInplaceRenameHandler extends VariableInplaceRenameHandler {
|
||||
element = PsiTreeUtil.getParentOfType(nameSuggestionContext, PsiNamedElement.class);
|
||||
}
|
||||
final RefactoringSupportProvider
|
||||
supportProvider = element == null ? null : LanguageRefactoringSupport.INSTANCE.forLanguage(element.getLanguage());
|
||||
supportProvider = element == null ? null : LanguageRefactoringSupport.INSTANCE.forContext(element);
|
||||
return editor.getSettings().isVariableInplaceRenameEnabled()
|
||||
&& supportProvider != null
|
||||
&& element instanceof PsiNameIdentifierOwner
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ public class VariableInplaceRenameHandler implements RenameHandler {
|
||||
final PsiElement nameSuggestionContext = file.findElementAt(editor.getCaretModel().getOffset());
|
||||
|
||||
RefactoringSupportProvider supportProvider =
|
||||
element == null ? null : LanguageRefactoringSupport.INSTANCE.forLanguage(element.getLanguage());
|
||||
element == null ? null : LanguageRefactoringSupport.INSTANCE.forContext(element);
|
||||
return supportProvider != null &&
|
||||
editor.getSettings().isVariableInplaceRenameEnabled() &&
|
||||
supportProvider.isInplaceRenameAvailable(element, nameSuggestionContext);
|
||||
|
||||
@@ -462,8 +462,8 @@ public class SafeDeleteProcessor extends BaseRefactoringProcessor {
|
||||
public static boolean validElement(@NotNull PsiElement element) {
|
||||
if (element instanceof PsiFile) return true;
|
||||
if (!element.isPhysical()) return false;
|
||||
final RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forLanguage(element.getLanguage());
|
||||
return provider.isSafeDeleteAvailable(element);
|
||||
final RefactoringSupportProvider provider = LanguageRefactoringSupport.INSTANCE.forContext(element);
|
||||
return provider != null && provider.isSafeDeleteAvailable(element);
|
||||
}
|
||||
|
||||
public static SafeDeleteProcessor createInstance(Project project, @Nullable Runnable prepareSuccessfulCallback,
|
||||
|
||||
+1
-1
@@ -541,7 +541,7 @@ public abstract class GrIntroduceHandlerBase<Settings extends GrIntroduceSetting
|
||||
|
||||
|
||||
public static boolean isInplace(@NotNull Editor editor, @NotNull PsiElement place) {
|
||||
final RefactoringSupportProvider supportProvider = LanguageRefactoringSupport.INSTANCE.forLanguage(place.getLanguage());
|
||||
final RefactoringSupportProvider supportProvider = LanguageRefactoringSupport.INSTANCE.forContext(place);
|
||||
return supportProvider != null &&
|
||||
(editor.getUserData(InplaceRefactoring.INTRODUCE_RESTART) == null || !editor.getUserData(InplaceRefactoring.INTRODUCE_RESTART)) &&
|
||||
editor.getUserData(AbstractInplaceIntroducer.ACTIVE_INTRODUCE) == null &&
|
||||
|
||||
Reference in New Issue
Block a user