Fixed bug 407985: [1.8][extract method] Extract Method refactoring from
Lambda Expressions - updated tests and bug fix
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_in/A_test325.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_in/A_test325.java
new file mode 100644
index 0000000..1113415
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_in/A_test325.java
@@ -0,0 +1,16 @@
+package lambdaExpression18_in;
+
+@FunctionalInterface
+interface FI {
+	int foo1(int a);
+}
+
+class FI_1 {
+	void fun(int a) {
+		FI i1 = x1-> x1;
+		FI i2 = xxx-> {
+			i1.foo1(a);
+			/*]*/return xxx;/*[*/
+		};
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test306.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test306.java
index 803baed..5f97216 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test306.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test306.java
@@ -13,5 +13,8 @@
 		};		
 	}
 
-	public default int extracted(int a){/*[*/int b = a;/*]*/return b;}
+	public default int extracted(int a) {
+		/*[*/int b = a;/*]*/
+		return b;
+	}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test317.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test317.java
index 6c2ba02..000c794 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test317.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test317.java
@@ -11,5 +11,7 @@
 		return "";
 	}
 
-	default int extracted(int a){return a++;}	
+	default int extracted(int a) {
+		return a++;
+	}	
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test325.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test325.java
new file mode 100644
index 0000000..43b31fc
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractMethodWorkSpace/ExtractMethodTests/lambdaExpression18_out/A_test325.java
@@ -0,0 +1,20 @@
+package lambdaExpression18_in;
+
+@FunctionalInterface
+interface FI {
+	int foo1(int a);
+}
+
+class FI_1 {
+	void fun(int a) {
+		FI i1 = x1-> x1;
+		FI i2 = xxx-> {
+			i1.foo1(a);
+			/*]*/return extracted(xxx);/*[*/
+		};
+	}
+
+	private int extracted(int xxx) {
+		return xxx;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests18.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests18.java
index 6800f07..43eb52e 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests18.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractMethodTests18.java
@@ -234,4 +234,8 @@
 	public void test324() throws Exception {
 		performTest(fgTestSetup.getLambdaExpressionPackage(), "A", VALID_SELECTION, null);
 	}
+
+	public void test325() throws Exception {
+		lambdaExpressionTest(0, Modifier.PRIVATE);
+	}
 }
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
index 11f2e25..bfccedf 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractMethodAnalyzer.java
@@ -312,10 +312,12 @@
 				LambdaExpression enclosingLambdaExpr= ASTResolving.findEnclosingLambdaExpression(getFirstSelectedNode());
 				if (enclosingLambdaExpr != null) {
 					fReturnType= ASTNodeFactory.newReturnType(enclosingLambdaExpr, ast, rewriter, null);
+					IMethodBinding methodBinding= enclosingLambdaExpr.resolveMethodBinding();
+					fReturnTypeBinding= methodBinding != null ? methodBinding.getReturnType() : null;
 				} else if (fEnclosingBodyDeclaration.getNodeType() == ASTNode.METHOD_DECLARATION) {
 					fReturnType= ((MethodDeclaration) fEnclosingBodyDeclaration).getReturnType2();
+					fReturnTypeBinding= fReturnType != null ? fReturnType.resolveBinding() : null;
 				}
-				fReturnTypeBinding= fReturnType != null ? fReturnType.resolveBinding() : null;
 				break;
 			default:
 				fReturnType= ast.newPrimitiveType(PrimitiveType.VOID);