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);