Bug 513132: [quick fix] RemoveRedundantAnnotationRewriteOperation may
create a null change
Change-Id: Icfe3eff24224e55f3155a854517b5a66a6daf900
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
index 4083ed5..06bdfc3 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest18.java
@@ -39,6 +39,7 @@
import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.text.correction.AssistContext;
import junit.framework.Test;
import junit.framework.TestSuite;
@@ -1491,4 +1492,39 @@
buf.append("}\n");
assertEqualString(preview, buf.toString());
}
+
+ // remove redundant @NonNull on field type
+ public void testRemoveRedundantNonNull() throws Exception {
+ Hashtable<String, String> options= JavaCore.getOptions();
+ options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
+ JavaCore.setOptions(options);
+
+ JavaProjectHelper.addLibrary(fJProject1, new Path(Java18ProjectTestSetup.getJdtAnnotations20Path()));
+ IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+ StringBuffer buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import org.eclipse.jdt.annotation.*;\n");
+ buf.append("@NonNullByDefault\n");
+ buf.append("public class E {\n");
+ buf.append(" @NonNull Object f=new Object();\n");
+ buf.append("}\n");
+ ICompilationUnit cu= pack1.createCompilationUnit("E.java", buf.toString(), false, null);
+
+ CompilationUnit astRoot= getASTRoot(cu);
+ int offset= buf.indexOf("Object f");
+ AssistContext context= new AssistContext(cu, offset, 0);
+ ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, context);
+ assertNumberOfProposals(proposals, 3);
+ CUCorrectionProposal proposal= (CUCorrectionProposal)proposals.get(0);
+ String preview= getPreviewContent(proposal);
+
+ buf= new StringBuffer();
+ buf.append("package test1;\n");
+ buf.append("import org.eclipse.jdt.annotation.*;\n");
+ buf.append("@NonNullByDefault\n");
+ buf.append("public class E {\n");
+ buf.append(" Object f=new Object();\n");
+ buf.append("}\n");
+ assertEqualString(preview, buf.toString());
+ }
}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
index 1c8cb1f..eb9e6eb 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java
@@ -33,6 +33,7 @@
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Annotation;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IAnnotationBinding;
import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.IExtendedModifier;
@@ -371,6 +372,9 @@
if (selectedNode instanceof SingleVariableDeclaration) {
SingleVariableDeclaration singleVariableDeclaration= (SingleVariableDeclaration) selectedNode;
modifiers= singleVariableDeclaration.modifiers();
+ } else if (selectedNode instanceof FieldDeclaration) {
+ FieldDeclaration fieldDeclaration= (FieldDeclaration) selectedNode;
+ modifiers= fieldDeclaration.modifiers();
} else if (selectedNode instanceof MethodDeclaration) {
MethodDeclaration methodDeclaration= (MethodDeclaration) selectedNode;
modifiers= methodDeclaration.modifiers();