[java] remove redundant import when "Remove annotation" quick fix is applied (IDEA-288488)

GitOrigin-RevId: 562cf18eafa636a761c75ae3e9630bdab3eff760
This commit is contained in:
Nikolay Chashnikov
2022-02-11 09:25:51 +00:00
committed by intellij-monorepo-bot
parent 6f8b8172ac
commit 9c66641799
7 changed files with 25 additions and 7 deletions
@@ -9,13 +9,16 @@ import com.intellij.java.analysis.JavaAnalysisBundle;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Collectors;
public class RemoveAnnotationQuickFix implements LocalQuickFix {
@@ -74,7 +77,13 @@ public class RemoveAnnotationQuickFix implements LocalQuickFix {
if (!FileModificationService.getInstance().preparePsiElementsForWrite(physical)) {
return;
}
WriteAction.run(() -> physical.forEach(PsiAnnotation::delete));
WriteAction.run(() -> {
Set<PsiJavaFile> containingFiles = physical.stream().map(PsiAnnotation::getContainingFile)
.filter(PsiJavaFile.class::isInstance).map(PsiJavaFile.class::cast)
.collect(Collectors.toSet());
physical.forEach(PsiAnnotation::delete);
containingFiles.forEach(JavaCodeStyleManager.getInstance(project)::removeRedundantImports);
});
if (qualifiedName != null) {
for (PsiModifierListOwner owner : externalOwners) {
@@ -1,7 +1,5 @@
// "Remove annotation" "true"
import org.jetbrains.annotations.*;
class Foo {
<caret>int foo(){return 0;}
}
@@ -0,0 +1,6 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
class RemoveAnnotationWithImportQuickFix {
<warning descr="Cannot annotate with both @NotNull and @Nullable">@<caret>NotNull</warning> <warning descr="Cannot annotate with both @Nullable and @NotNull">@Nullable</warning> String s;
}
@@ -0,0 +1,5 @@
import org.jetbrains.annotations.Nullable;
class RemoveAnnotationWithImportQuickFix {
@Nullable String s;
}
@@ -1,5 +1,3 @@
import org.jetbrains.annotations.*;
interface Foo {
long getTime();
}
@@ -1,5 +1,3 @@
import org.jetbrains.annotations.*;
interface Foo {
void getTime(int a);
}
@@ -374,6 +374,10 @@ public class NullableStuffInspectionTest extends LightJavaCodeInsightFixtureTest
}
}
public void testRemoveAnnotationWithImportQuickFix() {
doTestWithFix("Remove annotation");
}
public void testQuickFixOnTypeArgumentNullable() {
DataFlowInspection8Test.setupTypeUseAnnotations("typeUse", myFixture);
NullableNotNullManager manager = NullableNotNullManager.getInstance(getProject());