Bug 539484 - [11][quick assist] Some quick assists related to var and
lambda are not available on

Change-Id: I5703201f0cd79985cec224abbd6cae5b978456a8
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index 9aa6410..66f6a0e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -1375,37 +1375,20 @@
 	}
 
 	public static boolean getAddInferredLambdaParameterTypes(IInvocationContext context, ASTNode covering, Collection<ICommandAccess> resultingCollections) {
-		LambdaExpression lambda;
-		boolean isvarTypeSingleVariableDeclaration= false;
+		LambdaExpression lambda= null;
+		boolean isLambdaParamVarType= false;
+		ASTNode parent= covering.getParent();
 		if (covering instanceof LambdaExpression) {
 			lambda= (LambdaExpression) covering;
 		} else if (covering.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY &&
 				((VariableDeclarationFragment) covering.getParent()).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
 			lambda= (LambdaExpression) covering.getParent().getParent();
 		} else if (covering.getLocationInParent() == SingleVariableDeclaration.NAME_PROPERTY &&
-				((SingleVariableDeclaration) covering.getParent()).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
-			CompilationUnit astRoot= context.getASTRoot();
-			IJavaElement root= astRoot.getJavaElement();
-			ASTNode parent= covering.getParent();
-			if (parent == null || root == null) {
-				return false;
-			}
-			IJavaProject javaProject= root.getJavaProject();
-			if (javaProject == null) {
-				return false;
-			}
-			if (!JavaModelUtil.is11OrHigher(javaProject)) {
-				return false;
-			} else {
-				SingleVariableDeclaration svDecl= (SingleVariableDeclaration) parent;
-				if (svDecl.getType() != null && svDecl.getType().isVar()) {
-					lambda= (LambdaExpression) covering.getParent().getParent();
-					isvarTypeSingleVariableDeclaration= true;
-				} else {
-					return false;
-				}
-			}
-		} else {
+				((SingleVariableDeclaration) parent).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
+			lambda= (LambdaExpression) covering.getParent().getParent();
+		}
+
+		if (lambda == null) {
 			return false;
 		}
 
@@ -1414,8 +1397,22 @@
 		if (noOfLambdaParams == 0)
 			return false;
 
-		if (lambdaParameters.get(0) instanceof SingleVariableDeclaration && !isvarTypeSingleVariableDeclaration)
-			return false;
+		VariableDeclaration firstLambdaParam= lambdaParameters.get(0);
+		if (firstLambdaParam instanceof SingleVariableDeclaration) {
+			CompilationUnit astRoot= context.getASTRoot();
+			IJavaElement root= astRoot.getJavaElement();
+			if (root != null) {
+				IJavaProject javaProject= root.getJavaProject();
+				if (javaProject != null && JavaModelUtil.is11OrHigher(javaProject)) {
+					if (((SingleVariableDeclaration) firstLambdaParam).getType().isVar()) {
+						isLambdaParamVarType= true;
+					}
+				}
+			}
+			if (!isLambdaParamVarType) {
+				return false;
+			}
+		}
 
 		IMethodBinding methodBinding= lambda.resolveMethodBinding();
 		if (methodBinding == null)
@@ -1442,7 +1439,7 @@
 
 		// add proposal
 		String label= CorrectionMessages.QuickAssistProcessor_add_inferred_lambda_parameter_types;
-		if (isvarTypeSingleVariableDeclaration) {
+		if (isLambdaParamVarType) {
 			label= CorrectionMessages.QuickAssistProcessor_replace_var_with_inferred_lambda_parameter_types;
 		}
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
@@ -1467,26 +1464,20 @@
 			return false;
 		}
 
-		LambdaExpression lambda;
-		boolean isvarTypeSingleVariableDeclaration= false;
+		LambdaExpression lambda= null;
+		boolean isLambdaParamExplicitType= false;
 		if (covering instanceof LambdaExpression) {
 			lambda= (LambdaExpression) covering;
 		} else if (covering.getLocationInParent() == VariableDeclarationFragment.NAME_PROPERTY &&
 				((VariableDeclarationFragment) parent).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
 			lambda= (LambdaExpression) covering.getParent().getParent();
-		} else {
-			if (covering.getLocationInParent() == SingleVariableDeclaration.NAME_PROPERTY &&
-					((SingleVariableDeclaration) parent).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
-				SingleVariableDeclaration svDecl= (SingleVariableDeclaration) parent;
-				if (svDecl.getType() != null && !svDecl.getType().isVar()) {
-					lambda= (LambdaExpression) covering.getParent().getParent();
-					isvarTypeSingleVariableDeclaration= true;
-				} else {
-					return false;
-				}
-			} else {
-				return false;
-			}
+		} else if (covering.getLocationInParent() == SingleVariableDeclaration.NAME_PROPERTY &&
+				((SingleVariableDeclaration) parent).getLocationInParent() == LambdaExpression.PARAMETERS_PROPERTY) {
+			lambda= (LambdaExpression) covering.getParent().getParent();
+		}
+
+		if (lambda == null) {
+			return false;
 		}
 
 		List<VariableDeclaration> lambdaParameters= lambda.parameters();
@@ -1494,8 +1485,16 @@
 		if (noOfLambdaParams == 0)
 			return false;
 
-		if (lambdaParameters.get(0) instanceof SingleVariableDeclaration && !isvarTypeSingleVariableDeclaration)
-			return false;
+
+		VariableDeclaration firstLambdaParam= lambdaParameters.get(0);
+		if (firstLambdaParam instanceof SingleVariableDeclaration) {
+			if (!((SingleVariableDeclaration) firstLambdaParam).getType().isVar()) {
+				isLambdaParamExplicitType= true;
+			} else {
+				return false;
+			}
+		}
+
 
 		IMethodBinding methodBinding= lambda.resolveMethodBinding();
 		if (methodBinding == null)
@@ -1536,7 +1535,7 @@
 		ASTRewriteCorrectionProposal proposal;
 		String label= null;
 		Image image= JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE);
-		if (isvarTypeSingleVariableDeclaration) {
+		if (isLambdaParamExplicitType) {
 			label= CorrectionMessages.QuickAssistProcessor_replace_lambda_parameter_types_with_var;
 			ASTRewriteRemoveImportsCorrectionProposal newProposal= new ASTRewriteRemoveImportsCorrectionProposal(label, context.getCompilationUnit(), rewrite,
 					IProposalRelevance.ADD_INFERRED_LAMBDA_PARAMETER_TYPES, image);