From f2933243102cf613db6e2bb20d36d05d574c02a8 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 1 Dec 2025 11:55:49 +0100 Subject: [PATCH] cleanup [java-intentions]: AnnotateOverriddenMethodsIntention: use ModCommands partially GitOrigin-RevId: 95174defaac20fd1711a77f15fbdfdaf0094232e --- .../AnnotateOverriddenMethodsIntention.java | 60 ++++++++----------- 1 file changed, 25 insertions(+), 35 deletions(-) diff --git a/java/java-impl/src/com/siyeh/ipp/annotation/AnnotateOverriddenMethodsIntention.java b/java/java-impl/src/com/siyeh/ipp/annotation/AnnotateOverriddenMethodsIntention.java index 43613c2a458e..e7067be36344 100644 --- a/java/java-impl/src/com/siyeh/ipp/annotation/AnnotateOverriddenMethodsIntention.java +++ b/java/java-impl/src/com/siyeh/ipp/annotation/AnnotateOverriddenMethodsIntention.java @@ -5,7 +5,9 @@ import com.intellij.codeInsight.*; import com.intellij.codeInsight.intention.BaseElementAtCaretIntentionAction; import com.intellij.codeInspection.util.IntentionName; import com.intellij.lang.java.JavaLanguage; -import com.intellij.openapi.application.WriteAction; +import com.intellij.modcommand.ActionContext; +import com.intellij.modcommand.ModCommand; +import com.intellij.modcommand.ModCommandExecutor; import com.intellij.openapi.command.undo.UndoUtil; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.progress.ProcessCanceledException; @@ -126,7 +128,7 @@ public final class AnnotateOverriddenMethodsIntention extends BaseElementAtCaret } final Collection overridingMethods = OverridingMethodsSearch.search(method).findAll(); final List prepare = new ArrayList<>(); - final ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(project); + final ModCommandAwareExternalAnnotationsManager annotationsManager = ModCommandAwareExternalAnnotationsManager.getInstance(project); final Map annotationPlaces = new LinkedHashMap<>(); for (PsiMethod overridingMethod : overridingMethods) { annotationPlaces.put(overridingMethod, annotationsManager.chooseAnnotationsPlaceNoUi(overridingMethod)); @@ -144,21 +146,13 @@ public final class AnnotateOverriddenMethodsIntention extends BaseElementAtCaret return; } final PsiNameValuePair[] attributes = annotation.getParameterList().getAttributes(); - try { - for (PsiMethod overridingMethod : overridingMethods) { - if (parameterIndex == -1) { - annotate(overridingMethod, annotationName, attributes, annotationsToRemove, annotationPlaces.get(overridingMethod), annotationsManager); - } - else { - final PsiParameterList parameterList = overridingMethod.getParameterList(); - final PsiParameter[] parameters = parameterList.getParameters(); - final PsiParameter parameter = parameters[parameterIndex]; - annotate(parameter, annotationName, attributes, annotationsToRemove, annotationPlaces.get(overridingMethod), annotationsManager); - } - } - } - catch (ExternalAnnotationsManager.CanceledConfigurationException ignored) { - //escape on configuring root cancel further annotations + ActionContext context = ActionContext.from(editor, element.getContainingFile()); + for (PsiMethod overridingMethod : overridingMethods) { + ModCommandExecutor.executeInteractively(context, getFamilyName(), editor, () -> { + PsiModifierListOwner target = + parameterIndex == -1 ? overridingMethod : overridingMethod.getParameterList().getParameter(parameterIndex); + return annotate(target, annotationName, attributes, annotationsToRemove, annotationPlaces.get(overridingMethod), annotationsManager); + }); } if (!prepare.isEmpty()) { UndoUtil.markPsiFileForUndo(annotation.getContainingFile()); @@ -186,35 +180,31 @@ public final class AnnotateOverriddenMethodsIntention extends BaseElementAtCaret } } - private static void annotate(PsiModifierListOwner modifierListOwner, - String annotationName, - PsiNameValuePair[] attributes, - List annotationsToRemove, - ExternalAnnotationsManager.AnnotationPlace annotationAnnotationPlace, - ExternalAnnotationsManager annotationsManager) throws ProcessCanceledException { + private static @NotNull ModCommand annotate(@Nullable PsiModifierListOwner modifierListOwner, + @NotNull String annotationName, + @NotNull PsiNameValuePair @NotNull [] attributes, + @NotNull List annotationsToRemove, + ExternalAnnotationsManager.@NotNull AnnotationPlace annotationAnnotationPlace, + @NotNull ModCommandAwareExternalAnnotationsManager annotationsManager) throws ProcessCanceledException { + if (modifierListOwner == null) return ModCommand.nop(); PsiAnnotationOwner target = AnnotationTargetUtil.getTarget(modifierListOwner, annotationName); - if (target == null || target.hasAnnotation(annotationName)) return; + if (target == null || target.hasAnnotation(annotationName)) return ModCommand.nop(); if (annotationAnnotationPlace == ExternalAnnotationsManager.AnnotationPlace.NOWHERE) { - return; + return ModCommand.nop(); } if (annotationAnnotationPlace == ExternalAnnotationsManager.AnnotationPlace.EXTERNAL) { - for (String annotationToRemove : annotationsToRemove) { - annotationsManager.deannotate(modifierListOwner, annotationToRemove); - } - try { - annotationsManager.annotateExternally(modifierListOwner, annotationName, modifierListOwner.getContainingFile(), attributes); - } - catch (ExternalAnnotationsManager.CanceledConfigurationException ignored) {} + return annotationsManager.annotateExternallyModCommand(modifierListOwner, annotationName, attributes, annotationsToRemove); } else { - WriteAction.run(() -> { + return ModCommand.psiUpdate(modifierListOwner, (owner, updater) -> { + PsiAnnotationOwner writableTarget = Objects.requireNonNull(AnnotationTargetUtil.getTarget(owner, annotationName)); for (String annotationToRemove : annotationsToRemove) { - final PsiAnnotation annotation = AnnotationUtil.findAnnotation(modifierListOwner, annotationToRemove); + final PsiAnnotation annotation = AnnotationUtil.findAnnotation(owner, annotationToRemove); if (annotation != null) { annotation.delete(); } } - final PsiAnnotation inserted = target.addAnnotation(annotationName); + final PsiAnnotation inserted = writableTarget.addAnnotation(annotationName); for (PsiNameValuePair pair : attributes) { inserted.setDeclaredAttributeValue(pair.getName(), pair.getValue()); }