diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/newImpl/CodeFragmentAnalyzer.kt b/java/java-impl/src/com/intellij/refactoring/extractMethod/newImpl/CodeFragmentAnalyzer.kt index 1ee2b3b3bca4..f195cabea56f 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/newImpl/CodeFragmentAnalyzer.kt +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/newImpl/CodeFragmentAnalyzer.kt @@ -83,9 +83,7 @@ class CodeFragmentAnalyzer(val elements: List) { } fun findOutputVariables(): List { - val exitPoints = IntArrayList() - ControlFlowUtil.findExitPointsAndStatements(flow, flowRange.first, flowRange.last, exitPoints, *DEFAULT_EXIT_STATEMENTS_CLASSES) - return ControlFlowUtil.getOutputVariables(flow, flowRange.first, flowRange.last, exitPoints.toIntArray()).distinct() + return ControlFlowUtil.getOutputVariables(flow, flowRange.first, flowRange.last, findExitPoints().toIntArray()).distinct() } fun findUndeclaredVariables(): List { diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872.java new file mode 100644 index 000000000000..b26fdc4412af --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872.java @@ -0,0 +1,10 @@ +class Test { + void test() { + final String str = "atata"; + do { + System.out.println(); + } while (Math.random() > 0.5); + + System.out.println(str); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872_after.java b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872_after.java new file mode 100644 index 000000000000..18c24983a595 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethodAndDuplicatesInplace/IDEA278872_after.java @@ -0,0 +1,18 @@ +import org.jetbrains.annotations.NotNull; + +class Test { + void test() { + final String str = getString(); + + System.out.println(str); + } + + @NotNull + private String getString() { + final String str = "atata"; + do { + System.out.println(); + } while (Math.random() > 0.5); + return str; + } +} \ 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 9904abdbbbd9..b8a46e1ad9cd 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/ExtractMethodAndDuplicatesInplaceTest.kt @@ -158,6 +158,10 @@ class ExtractMethodAndDuplicatesInplaceTest: LightJavaCodeInsightTestCase() { doTest() } + fun testIDEA278872(){ + doTest() + } + fun testRefactoringListener(){ templateTest { configureByFile("$BASE_PATH/${getTestName(false)}.java")