AnnotateCapitalizationIntention

This commit is contained in:
Dmitry Avdeev
2015-01-22 14:55:39 +03:00
parent 642fabe946
commit 49e2e5444d
4 changed files with 20 additions and 19 deletions
@@ -23,18 +23,17 @@ import com.intellij.psi.PsiModifierListOwner;
import com.intellij.psi.PsiNameValuePair;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author ven
*/
public class AddAnnotationFix extends AddAnnotationPsiFix implements IntentionAction {
public AddAnnotationFix(@NotNull String fqn, @Nullable PsiModifierListOwner modifierListOwner, @NotNull String... annotationsToRemove) {
public AddAnnotationFix(@NotNull String fqn, @NotNull PsiModifierListOwner modifierListOwner, @NotNull String... annotationsToRemove) {
this(fqn, modifierListOwner, PsiNameValuePair.EMPTY_ARRAY, annotationsToRemove);
}
public AddAnnotationFix(@NotNull String fqn,
@Nullable PsiModifierListOwner modifierListOwner,
@NotNull PsiModifierListOwner modifierListOwner,
@NotNull PsiNameValuePair[] values,
@NotNull String... annotationsToRemove) {
super(fqn, modifierListOwner, values, annotationsToRemove);
@@ -37,10 +37,10 @@ public class AddAnnotationPsiFix extends LocalQuickFixOnPsiElement {
protected final String myAnnotation;
protected final String[] myAnnotationsToRemove;
protected final PsiNameValuePair[] myPairs; // not used when registering local quick fix
protected String myText;
protected final String myText;
public AddAnnotationPsiFix(@NotNull String fqn,
@Nullable PsiModifierListOwner modifierListOwner,
@NotNull PsiModifierListOwner modifierListOwner,
@NotNull PsiNameValuePair[] values,
@NotNull String... annotationsToRemove) {
super(modifierListOwner);
@@ -117,29 +117,26 @@ public class AddAnnotationPsiFix extends LocalQuickFixOnPsiElement {
@NotNull PsiFile file,
@NotNull PsiElement startElement,
@NotNull PsiElement endElement) {
final PsiModifierListOwner myModifierListOwner = (PsiModifierListOwner)startElement;
invoke(project, file, (PsiModifierListOwner)startElement, myPairs);
}
protected void invoke(@NotNull Project project, @NotNull PsiFile file, PsiModifierListOwner myModifierListOwner, PsiNameValuePair[] pairs) {
final ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(project);
final PsiModifierList modifierList = myModifierListOwner.getModifierList();
LOG.assertTrue(modifierList != null);
if (modifierList.findAnnotation(myAnnotation) != null) return;
final ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(project);
final ExternalAnnotationsManager.AnnotationPlace annotationAnnotationPlace = annotationsManager.chooseAnnotationsPlace(myModifierListOwner);
if (annotationAnnotationPlace == ExternalAnnotationsManager.AnnotationPlace.NOWHERE) return;
if (annotationAnnotationPlace == ExternalAnnotationsManager.AnnotationPlace.EXTERNAL) {
for (String fqn : myAnnotationsToRemove) {
annotationsManager.deannotate(myModifierListOwner, fqn);
}
annotationsManager.annotateExternally(myModifierListOwner, myAnnotation, file, pairs);
annotationsManager.annotateExternally(myModifierListOwner, myAnnotation, file, myPairs);
}
else {
final PsiFile containingFile = myModifierListOwner.getContainingFile();
if (!FileModificationService.getInstance().preparePsiElementForWrite(containingFile)) return;
removePhysicalAnnotations(myModifierListOwner, myAnnotationsToRemove);
PsiAnnotation inserted = addPhysicalAnnotation(myAnnotation, pairs, modifierList);
PsiAnnotation inserted = addPhysicalAnnotation(myAnnotation, myPairs, modifierList);
JavaCodeStyleManager.getInstance(project).shortenClassReferences(inserted);
if (containingFile != file) {
UndoUtil.markPsiFileForUndo(file);
@@ -22,14 +22,13 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.SmartPointerManager;
import com.intellij.psi.SmartPsiElementPointer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class LocalQuickFixOnPsiElement implements LocalQuickFix {
protected static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.LocalQuickFixAndIntentionAction");
protected final SmartPsiElementPointer<PsiElement> myStartElement;
protected final SmartPsiElementPointer<PsiElement> myEndElement;
protected LocalQuickFixOnPsiElement(@Nullable PsiElement element) {
protected LocalQuickFixOnPsiElement(@NotNull PsiElement element) {
this(element, element);
}
@@ -17,6 +17,7 @@ package org.jetbrains.idea.devkit.inspections;
import com.intellij.codeInsight.AnnotationUtil;
import com.intellij.codeInsight.intention.AddAnnotationFix;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.editor.Editor;
@@ -34,10 +35,9 @@ import org.jetbrains.annotations.Nullable;
/**
* @author Dmitry Avdeev
*/
public class AnnotateCapitalizationIntention extends AddAnnotationFix {
public class AnnotateCapitalizationIntention implements IntentionAction {
public AnnotateCapitalizationIntention() {
super(Nls.class.getName(), null);
}
@Override
@@ -46,10 +46,16 @@ public class AnnotateCapitalizationIntention extends AddAnnotationFix {
if (element == null ||
(!ApplicationManager.getApplication().isUnitTestMode() && element.getManager().isInProject(element)) ||
AnnotationUtil.findAnnotation(element, Nls.class.getName()) != null) return false;
myText = "Annotate capitalization type";
return true;
}
@Nls
@NotNull
@Override
public String getText() {
return getFamilyName();
}
@NotNull
@Override
public String getFamilyName() {
@@ -57,7 +63,7 @@ public class AnnotateCapitalizationIntention extends AddAnnotationFix {
}
@Override
public void invoke(@NotNull final Project project, Editor editor, final PsiFile file) throws IncorrectOperationException {
public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException {
final PsiModifierListOwner modifierListOwner = getElement(editor, file);
if (modifierListOwner == null) throw new IncorrectOperationException();
@@ -72,7 +78,7 @@ public class AnnotateCapitalizationIntention extends AddAnnotationFix {
PsiAnnotation annotation = JavaPsiFacade.getInstance(project).getElementFactory()
.createAnnotationFromText("@" + nls + "(capitalization = " +
nls + ".Capitalization." + selectedValue.toString() + ")", modifierListOwner);
invoke(project, file, modifierListOwner, annotation.getParameterList().getAttributes());
new AddAnnotationFix(Nls.class.getName(), modifierListOwner, annotation.getParameterList().getAttributes()).applyFix();
}
}.execute();
return FINAL_CHOICE;