diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index 1344e4e253af..a089ba2f9d4b 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -344,7 +344,7 @@ public class ExtractMethodProcessor implements MatchProvider { @Nullable private PsiVariable getArtificialOutputVariable() { - if (myOutputVariables.length == 0) { + if (myOutputVariables.length == 0 && myExitStatements.isEmpty()) { if (myCanBeChainedConstructor) { final Set fields = new HashSet(); for (PsiElement element : myElements) { @@ -616,7 +616,7 @@ public class ExtractMethodProcessor implements MatchProvider { final List filter = ContainerUtil.filter(myExitStatements, new Condition() { @Override public boolean value(PsiStatement statement) { - return statement instanceof PsiReturnStatement; + return statement instanceof PsiReturnStatement && ((PsiReturnStatement)statement).getReturnValue() != null; } }); final List map = ContainerUtil.map(filter, new Function() { diff --git a/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested.java b/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested.java new file mode 100644 index 000000000000..317a44b48be9 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested.java @@ -0,0 +1,7 @@ +class X { + void foo() { + if (true) return; + System.out.println(); + + } +} diff --git a/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested_after.java b/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested_after.java new file mode 100644 index 000000000000..32fd24573aca --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/NoReturnTypesSuggested_after.java @@ -0,0 +1,11 @@ +class X { + void foo() { + newMethod(); + + } + + private int newMethod() { + if (true) return; + System.out.println(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index 0760bb5dda9a..bfa4d22c1ed6 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -666,6 +666,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doTestReturnTypeChanged(PsiType.INT); } + public void testNoReturnTypesSuggested() throws Exception { + doTestReturnTypeChanged(PsiType.INT); + } + public void testMultipleVarsInMethodNoReturnStatementAndAssignment() throws Exception { //return type should not be suggested but still doTestReturnTypeChanged(PsiType.INT);