draft of another quickfix: if parameter is explicitly checked for null add @Nullable to its declaration
(previous commit was incomplete)
+ apply the new quickfix both for == null and != null.
diff --git a/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/NullAnnotationsCleanUp.java b/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/NullAnnotationsCleanUp.java
index 58e93fb..ddb34ce 100644
--- a/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/NullAnnotationsCleanUp.java
+++ b/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/NullAnnotationsCleanUp.java
@@ -148,7 +148,7 @@
if ( isEnabled(CleanUpConstants.ADD_MISSING_ANNOTATIONS)
&& ( ((id == DefiniteNullFromNonNullMethod) && isEnabled(CleanUpConstants.ADD_DEFINITELY_MISSING_RETURN_ANNOTATION_NULLABLE))
|| ((id == PotentialNullFromNonNullMethod) && isEnabled(CleanUpConstants.ADD_POTENTIALLY_MISSING_RETURN_ANNOTATION_NULLABLE))
- || ((id == IProblem.NonNullLocalVariableComparisonYieldsFalse) && isEnabled(CleanUpConstants.ADD_DEFINITELY_MISSING_PARAMETER_ANNOTATION_NULLABLE))))
+ || (QuickFixes.mayIndicateParameterNullcheck(id) && isEnabled(CleanUpConstants.ADD_DEFINITELY_MISSING_PARAMETER_ANNOTATION_NULLABLE))))
{
// FIXME search specifically: return param (which??)
// if (QuickFixes.hasExplicitNullnessAnnotation(compilationUnit, problem.getOffset()))
@@ -177,7 +177,7 @@
int id= problems[i].getID();
if ( (addDefinitelyMissingReturnNullable && id == DefiniteNullFromNonNullMethod)
|| (addPotentiallyMissingReturnNullable && id == PotentialNullFromNonNullMethod)
- || (addDefinitelyMissingParamNullable && id == IProblem.NonNullLocalVariableComparisonYieldsFalse))
+ || (addDefinitelyMissingParamNullable && QuickFixes.mayIndicateParameterNullcheck(id)))
if (!QuickFixes.hasExplicitNullnessAnnotation((ICompilationUnit) compilationUnit.getJavaElement(), problems[i].getSourceStart()))
result++;
}
diff --git a/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/QuickFixes.java b/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/QuickFixes.java
index f9565c2..9a377f5 100644
--- a/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/QuickFixes.java
+++ b/plugins/org.eclipse.objectteams.jdt.nullity/src/org/eclipse/objectteams/internal/jdt/nullity/quickfix/QuickFixes.java
@@ -71,6 +71,7 @@
case DefiniteNullFromNonNullMethod:
case PotentialNullFromNonNullMethod:
case IProblem.NonNullLocalVariableComparisonYieldsFalse:
+ case IProblem.RedundantNullCheckOnNonNullLocalVariable:
return true;
default:
return base.hasCorrections(cu, problemId);
@@ -93,6 +94,7 @@
addNullableAnnotationInSignatureProposal(context, problem, proposals);
break;
case IProblem.NonNullLocalVariableComparisonYieldsFalse:
+ case IProblem.RedundantNullCheckOnNonNullLocalVariable:
if (isComplainingAboutArgument(context, problem))
addNullableAnnotationInSignatureProposal(context, problem, proposals);
break;
@@ -112,7 +114,7 @@
options.put(CleanUpConstants.ADD_DEFINITELY_MISSING_RETURN_ANNOTATION_NULLABLE, CleanUpOptions.TRUE);
if (problem.getProblemId() == PotentialNullFromNonNullMethod)
options.put(CleanUpConstants.ADD_POTENTIALLY_MISSING_RETURN_ANNOTATION_NULLABLE, CleanUpOptions.TRUE);
- if (problem.getProblemId() == IProblem.NonNullLocalVariableComparisonYieldsFalse)
+ if (mayIndicateParameterNullcheck(problem.getProblemId()))
options.put(CleanUpConstants.ADD_DEFINITELY_MISSING_PARAMETER_ANNOTATION_NULLABLE, CleanUpOptions.TRUE);
FixCorrectionProposal proposal= new FixCorrectionProposal(fix, new NullAnnotationsCleanUp(options, this), 15, image, context);
proposals.add(proposal);
@@ -170,7 +172,7 @@
for (int i= 0; i < problems.length; i++) {
if ( (addDefinitelyMissingReturnAnnotations && (problems[i].getID() == DefiniteNullFromNonNullMethod))
|| (addPotentiallyMissingReturnAnnotations && (problems[i].getID() == PotentialNullFromNonNullMethod))
- || (addDefinitelyMissingParamAnnotations && (problems[i].getID() == IProblem.NonNullLocalVariableComparisonYieldsFalse)))
+ || (addDefinitelyMissingParamAnnotations && mayIndicateParameterNullcheck(problems[i].getID())))
locations[i]= new ProblemLocation(problems[i]);
}
}
@@ -221,7 +223,7 @@
MethodDeclaration declaration= (MethodDeclaration) declaringNode;
RewriteOperations.SignatureAnnotationRewriteOperation result = null;
- if (problem.getProblemId() == IProblem.NonNullLocalVariableComparisonYieldsFalse) {
+ if (mayIndicateParameterNullcheck(problem.getProblemId())) {
if (selectedNode.getNodeType() == ASTNode.SIMPLE_NAME && declaration.getNodeType() == ASTNode.METHOD_DECLARATION) {
IBinding binding = ((SimpleName)selectedNode).resolveBinding();
if (binding.getKind() == IBinding.VARIABLE && ((IVariableBinding)binding).isParameter())
@@ -245,7 +247,12 @@
}
static boolean isMissingNullableAnnotationProblem(int id) {
- return id == DefiniteNullFromNonNullMethod || id == PotentialNullFromNonNullMethod || id == IProblem.NonNullLocalVariableComparisonYieldsFalse;
+ return id == DefiniteNullFromNonNullMethod || id == PotentialNullFromNonNullMethod
+ || mayIndicateParameterNullcheck(id);
+ }
+
+ static boolean mayIndicateParameterNullcheck(int problemId) {
+ return problemId == IProblem.NonNullLocalVariableComparisonYieldsFalse || problemId == IProblem.RedundantNullCheckOnNonNullLocalVariable;
}
static boolean hasExplicitNullnessAnnotation(ICompilationUnit compilationUnit, int offset) {