diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractOptionsPipeline.kt b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractOptionsPipeline.kt index b97a3634e209..3cc003a33dc9 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractOptionsPipeline.kt +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/extractMethod/newImpl/ExtractOptionsPipeline.kt @@ -125,7 +125,7 @@ object ExtractMethodPipeline { if (statement != null && JavaHighlightUtil.isSuperOrThisCall(statement, true, true)) { return extractOptions.copy(isStatic = true) } - val shouldBeStatic = PsiUtil.getEnclosingStaticElement(extractOptions.elements.first(), null) != null + val shouldBeStatic = PsiUtil.getEnclosingStaticElement(extractOptions.elements.first(), extractOptions.targetClass) != null return extractOptions.copy(isStatic = shouldBeStatic) } diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner.java new file mode 100644 index 000000000000..2cb82c2b663c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner.java @@ -0,0 +1,8 @@ +class Test { + + static class Inner{ + public void get(List list, I i) { + list.get(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner_after.java new file mode 100644 index 000000000000..d5fabe1cf50d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/NonStaticExtractFromStaticInner_after.java @@ -0,0 +1,12 @@ +class Test { + + static class Inner{ + public void get(List list, I i) { + extracted(list, i); + } + + private void extracted(List list, I i) { + list.get(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget.java new file mode 100644 index 000000000000..2cb82c2b663c --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget.java @@ -0,0 +1,8 @@ +class Test { + + static class Inner{ + public void get(List list, I i) { + list.get(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget_after.java new file mode 100644 index 000000000000..0500fdf8ca5e --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/TypeParametersInNonStaticTarget_after.java @@ -0,0 +1,12 @@ +class Test { + + static class Inner{ + public void get(List list, I i) { + extracted(list, i); + } + + private static void extracted(List list, I i) { + list.get(i); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt index 89804426c764..a6d342519380 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt @@ -492,6 +492,18 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() { doTest() } + fun testTypeParametersInNonStaticTarget(){ + JavaRefactoringSettings.getInstance().EXTRACT_STATIC_METHOD = true + shouldSelectTargetClass("Inner in Test") + doTest() + } + + fun testNonStaticExtractFromStaticInner(){ + shouldSelectTargetClass("Inner in Test") + JavaRefactoringSettings.getInstance().EXTRACT_STATIC_METHOD = false + doTest() + } + fun testRefactoringListener(){ templateTest { configureByFile("$BASE_PATH/${getTestName(false)}.java")