From 356b90a3ce65fc97e3f1de7e1b24b96cdcb48652 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 24 Apr 2019 12:22:55 +0700 Subject: [PATCH] InlineMethodHandler: extract static method to allow reuse from plugins GitOrigin-RevId: 30293c32981b09da7753cce3484148c52b2636c3 --- .../inline/InlineMethodHandler.java | 20 ++++++++++++++----- .../inline/JavaInlineActionHandler.java | 9 ++++----- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodHandler.java index 497f60f7ba29..a64638a9e87d 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodHandler.java @@ -19,7 +19,7 @@ import com.intellij.refactoring.util.RefactoringUtil; import java.util.Collections; import java.util.function.Supplier; -class InlineMethodHandler extends JavaInlineActionHandler { +public class InlineMethodHandler extends JavaInlineActionHandler { private static final String REFACTORING_NAME = RefactoringBundle.message("inline.method.title"); private InlineMethodHandler() { @@ -32,17 +32,27 @@ class InlineMethodHandler extends JavaInlineActionHandler { @Override public void inlineElement(final Project project, Editor editor, PsiElement element) { - PsiMethod method = (PsiMethod)element.getNavigationElement(); + performInline(project, editor, (PsiMethod)element.getNavigationElement(), false); + } + + /** + * Try to inline method, displaying UI or error message if necessary + * @param project project where method is declared + * @param editor active editor where cursor might point to the call site + * @param method method to be inlined + * @param allowInlineThisOnly if true, only call-site at cursor will be suggested + * (in this case caller must check that cursor points to the valid reference) + */ + public static void performInline(Project project, Editor editor, PsiMethod method, boolean allowInlineThisOnly) { PsiReference reference = editor != null ? TargetElementUtil.findReference(editor, editor.getCaretModel().getOffset()) : null; - boolean allowInlineThisOnly = false; PsiCodeBlock methodBody = method.getBody(); Supplier specialization = InlineMethodSpecialization.forReference(reference); if (specialization != null) { allowInlineThisOnly = true; methodBody = specialization.get(); } - + if (methodBody == null){ String message; if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { @@ -60,7 +70,7 @@ class InlineMethodHandler extends JavaInlineActionHandler { if (reference != null) { final PsiElement refElement = reference.getElement(); - if (!isEnabledForLanguage(refElement.getLanguage())) { + if (!isJavaLanguage(refElement.getLanguage())) { String message = RefactoringBundle .message("refactoring.is.not.supported.for.language", "Inline of Java method", refElement.getLanguage().getDisplayName()); CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HelpID.INLINE_METHOD); diff --git a/java/java-impl/src/com/intellij/refactoring/inline/JavaInlineActionHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/JavaInlineActionHandler.java index e74a2522cbeb..eaf0e0696b3b 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/JavaInlineActionHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/JavaInlineActionHandler.java @@ -19,11 +19,6 @@ import com.intellij.lang.Language; import com.intellij.lang.java.JavaLanguage; import com.intellij.lang.refactoring.InlineActionHandler; import com.intellij.openapi.fileTypes.StdFileTypes; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.refactoring.ui.ConflictsDialog; -import com.intellij.util.containers.MultiMap; -import org.jetbrains.annotations.NotNull; /** * @author yole @@ -31,6 +26,10 @@ import org.jetbrains.annotations.NotNull; public abstract class JavaInlineActionHandler extends InlineActionHandler { @Override public boolean isEnabledForLanguage(Language l) { + return isJavaLanguage(l); + } + + protected static boolean isJavaLanguage(Language l) { return l instanceof JavaLanguage || l.equals(StdFileTypes.JSPX.getLanguage()) || l.equals(StdFileTypes.JSP.getLanguage());