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 af2893077386..affeb60e2595 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -265,7 +265,8 @@ public class ExtractMethodProcessor implements MatchProvider { PsiType returnStatementType = null; if (myHasReturnStatement) { - returnStatementType = myCodeFragmentMember instanceof PsiMethod ? ((PsiMethod)myCodeFragmentMember).getReturnType() : null; + returnStatementType = myCodeFragmentMember instanceof PsiMethod ? ((PsiMethod)myCodeFragmentMember).getReturnType() + : myCodeFragmentMember instanceof PsiLambdaExpression ? LambdaUtil.getFunctionalInterfaceReturnType((PsiLambdaExpression)myCodeFragmentMember) : null; } myHasReturnStatementOutput = returnStatementType != null && returnStatementType != PsiType.VOID; diff --git a/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn.java b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn.java new file mode 100644 index 000000000000..c3ba26d9f751 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn.java @@ -0,0 +1,10 @@ +class Test { + interface I { + String foo(); + } + public void foo(int ii) { + I r = () -> { + return "42"; + }; + } +} diff --git a/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn_after.java b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn_after.java new file mode 100644 index 000000000000..9b5d3d680a66 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/FromLambdaBodyWithReturn_after.java @@ -0,0 +1,14 @@ +class Test { + interface I { + String foo(); + } + public void foo(int ii) { + I r = () -> { + return newMethod(); + }; + } + + private String newMethod() { + return "42"; + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index 2caded9f6e63..f8da2ddc14b9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -555,6 +555,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doTest(); } + public void testFromLambdaBodyWithReturn() throws Exception { + doTest(); + } + public void testOneLineLambda() throws Exception { doTest(); }