Skip to content

Commit f298883

Browse files
authored
Fix NullAnnotationsRewriteOperations to handle AnnotatableType (eclipse-jdt#2080)
- add new test to QuickFixTest1d8 - fixes eclipse-jdt#2076
1 parent 0e8c1c3 commit f298883

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest1d8.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,52 @@ public class E {
18221822
assertEqualString(preview, str);
18231823
}
18241824

1825+
// remove redundant @NonNull on type
1826+
@Test
1827+
public void testRemoveRedundantNonNull2() throws Exception {
1828+
Hashtable<String, String> options= JavaCore.getOptions();
1829+
options.put(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
1830+
JavaCore.setOptions(options);
1831+
1832+
JavaProjectHelper.addLibrary(fJProject1, new Path(Java1d8ProjectTestSetup.getJdtAnnotations20Path()));
1833+
IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
1834+
String str1= """
1835+
package test1;
1836+
import java.util.List;
1837+
import org.eclipse.jdt.annotation.NonNull;
1838+
import org.eclipse.jdt.annotation.NonNullByDefault;
1839+
@NonNullByDefault
1840+
public class E {
1841+
void m(@NonNull List<String> l) {
1842+
// empty block
1843+
}
1844+
}
1845+
""";
1846+
ICompilationUnit cu= pack1.createCompilationUnit("E.java", str1, false, null);
1847+
1848+
CompilationUnit astRoot= getASTRoot(cu);
1849+
int offset= str1.indexOf("@NonNull ");
1850+
AssistContext context= new AssistContext(cu, offset, 0);
1851+
ArrayList<IJavaCompletionProposal> proposals= collectCorrections(cu, astRoot, 1, context);
1852+
assertNumberOfProposals(proposals, 4);
1853+
CUCorrectionProposal proposal= (CUCorrectionProposal)proposals.get(0);
1854+
String preview= getPreviewContent(proposal);
1855+
1856+
String str= """
1857+
package test1;
1858+
import java.util.List;
1859+
1860+
import org.eclipse.jdt.annotation.NonNullByDefault;
1861+
@NonNullByDefault
1862+
public class E {
1863+
void m(List<String> l) {
1864+
// empty block
1865+
}
1866+
}
1867+
""";
1868+
assertEqualString(preview, str);
1869+
}
1870+
18251871
@Test
18261872
public void testBug514580_avoidRedundantNonNullInChangeMethodSignatureFix() throws Exception {
18271873
Hashtable<String, String> options= JavaCore.getOptions();

org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/NullAnnotationsRewriteOperations.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.eclipse.jdt.core.compiler.IProblem;
3535
import org.eclipse.jdt.core.dom.AST;
3636
import org.eclipse.jdt.core.dom.ASTNode;
37+
import org.eclipse.jdt.core.dom.AnnotatableType;
3738
import org.eclipse.jdt.core.dom.Annotation;
3839
import org.eclipse.jdt.core.dom.ArrayType;
3940
import org.eclipse.jdt.core.dom.ChildListPropertyDescriptor;
@@ -72,6 +73,7 @@
7273
import org.eclipse.jdt.internal.corext.dom.Bindings;
7374
import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFixCore.CompilationUnitRewriteOperationWithSourceRange;
7475
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
76+
import org.eclipse.jdt.internal.corext.refactoring.structure.ImportRemover;
7577
import org.eclipse.jdt.internal.corext.util.Messages;
7678

7779
import org.eclipse.jdt.ui.text.java.IProblemLocation;
@@ -342,6 +344,7 @@ public RemoveRedundantAnnotationRewriteOperation(CompilationUnit compilationUnit
342344
public void rewriteASTInternal(CompilationUnitRewrite cuRewrite, LinkedProposalModelCore linkedModel) throws CoreException {
343345
TextEditGroup group= createTextEditGroup(FixMessages.NullAnnotationsRewriteOperations_remove_redundant_nullness_annotation, cuRewrite);
344346
ASTRewrite astRewrite= cuRewrite.getASTRewrite();
347+
ImportRemover remover= cuRewrite.getImportRemover();
345348

346349
CompilationUnit astRoot= fCompilationUnit;
347350
ASTNode selectedNode= fProblem.getCoveringNode(astRoot);
@@ -357,6 +360,8 @@ public void rewriteASTInternal(CompilationUnitRewrite cuRewrite, LinkedProposalM
357360
} else if (selectedNode instanceof MethodDeclaration) {
358361
MethodDeclaration methodDeclaration= (MethodDeclaration) selectedNode;
359362
modifiers= methodDeclaration.modifiers();
363+
} else if (selectedNode instanceof AnnotatableType annotatableType) {
364+
modifiers= annotatableType.annotations();
360365
} else {
361366
return;
362367
}
@@ -368,6 +373,7 @@ public void rewriteASTInternal(CompilationUnitRewrite cuRewrite, LinkedProposalM
368373
String name= annotationBinding.getName();
369374
if (name.equals(NullAnnotationsFix.getNonNullAnnotationName(fCompilationUnit.getJavaElement(), true))) {
370375
astRewrite.remove(annotation, group);
376+
remover.registerRemovedNode(annotation);
371377
}
372378
}
373379
}

0 commit comments

Comments
 (0)