From ac9a14f565dddf6a945f5119b009006d26afc2ee Mon Sep 17 00:00:00 2001 From: Alexandr Suhinin Date: Wed, 17 Feb 2021 22:44:00 +0200 Subject: [PATCH] IDEA-262335 refactor this: suggest `convert to instance method` only on method declaration GitOrigin-RevId: f1b5643dae2ac2661039d13caea2bfcc6620392d --- .../ConvertToInstanceMethodHandler.java | 11 ++++++++++- .../refactorThis/ConvertToInstanceMethod.java | 12 ++++++++++++ .../ConvertToInstanceMethodFiltered.java | 12 ++++++++++++ .../intellij/java/refactoring/RefactorThisTest.kt | 8 ++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethod.java create mode 100644 java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethodFiltered.java diff --git a/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodHandler.java b/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodHandler.java index 00c2ea1b071c..36df17027d9f 100644 --- a/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/convertToInstanceMethod/ConvertToInstanceMethodHandler.java @@ -16,6 +16,7 @@ package com.intellij.refactoring.convertToInstanceMethod; import com.intellij.java.refactoring.JavaRefactoringBundle; +import com.intellij.lang.ContextAwareActionHandler; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.diagnostic.Logger; @@ -27,6 +28,8 @@ import com.intellij.psi.*; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.RefactoringActionHandler; import com.intellij.refactoring.RefactoringBundle; +import com.intellij.refactoring.actions.BaseRefactoringAction; +import com.intellij.refactoring.actions.RefactoringActionContextUtil; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.util.ArrayUtil; import com.siyeh.ig.psiutils.VariableAccessUtils; @@ -39,7 +42,7 @@ import java.util.List; /** * @author dsl */ -public class ConvertToInstanceMethodHandler implements RefactoringActionHandler { +public class ConvertToInstanceMethodHandler implements RefactoringActionHandler, ContextAwareActionHandler { private static final Logger LOG = Logger.getInstance(ConvertToInstanceMethodHandler.class); @Override @@ -122,6 +125,12 @@ public class ConvertToInstanceMethodHandler implements RefactoringActionHandler new ConvertToInstanceMethodDialog(method, ArrayUtil.toObjectArray(targetQualifiers)).show(); } + @Override + public boolean isAvailableForQuickList(@NotNull Editor editor, @NotNull PsiFile file, @NotNull DataContext dataContext) { + PsiElement caretElement = BaseRefactoringAction.getElementAtCaret(editor, file); + return RefactoringActionContextUtil.getJavaMethodHeader(caretElement) != null; + } + static @NlsContexts.DialogTitle String getRefactoringName() { return JavaRefactoringBundle.message("convert.to.instance.method.title"); } diff --git a/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethod.java b/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethod.java new file mode 100644 index 000000000000..c019074dc01c --- /dev/null +++ b/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethod.java @@ -0,0 +1,12 @@ +public class Test { + + int x; + + static void foo(int y){ + System.out.println(x + y); + } + + void test(){ + foo(y); + } +} diff --git a/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethodFiltered.java b/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethodFiltered.java new file mode 100644 index 000000000000..c498a6085d61 --- /dev/null +++ b/java/java-tests/testData/refactoring/refactorThis/ConvertToInstanceMethodFiltered.java @@ -0,0 +1,12 @@ +public class Test { + + int x; + + static void foo(int y){ + System.out.println(x + y); + } + + void test(){ + foo(y); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/RefactorThisTest.kt b/java/java-tests/testSrc/com/intellij/java/refactoring/RefactorThisTest.kt index 48f558d1de07..bbd12f03b6f1 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/RefactorThisTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/RefactorThisTest.kt @@ -152,6 +152,14 @@ class RefactorThisTest: LightJavaCodeInsightTestCase() { assertFalse(doActionExists()) } + fun testConvertToInstanceMethod() { + assertTrue(doActionExists()) + } + + fun testConvertToInstanceMethodFiltered() { + assertFalse(doActionExists()) + } + private inline fun doActionExists(): Boolean { configureByFile("$BASE_PATH/${getTestName(false)}.java") val actions = findAvailableActions()