}
return owner != null && !AnnotationUtil.isAnnotated(owner, myAnnotation, false);
}
public void invoke(@NotNull final Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
final ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(project);
if (myModifierListOwner != null) {
final PsiModifierList modifierList = myModifierListOwner.getModifierList();
LOG.assertTrue(modifierList != null);
if (modifierList.findAnnotation(myAnnotation) != null) return;
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);
}
else {
final PsiFile containingFile = myModifierListOwner.getContainingFile();
if (!containingFile.isWritable()
&& ReadonlyStatusHandler.getInstance(project).ensureFilesWritable(containingFile.getVirtualFile()).hasReadonlyFiles()) return;
for (String fqn : myAnnotationsToRemove) {
PsiAnnotation annotation = AnnotationUtil.findAnnotation(myModifierListOwner, fqn);
if (annotation != null) {
annotation.delete();
}
}
PsiManager manager = file.getManager();
PsiElementFactory factory = manager.getElementFactory();
PsiAnnotation annotation = factory.createAnnotationFromText("@" + myAnnotation, myModifierListOwner);
PsiElement inserted = modifierList.addAfter(annotation, null);
CodeStyleManager.getInstance(project).shortenClassReferences(inserted);
if (containingFile != file) {
UndoManager.getInstance(project).markDocumentForUndo(file);
}
}
}
else {
final PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
annotationsManager.annotateExternally(PsiTreeUtil.getParentOfType(element, PsiModifierListOwner.class, false), myAnnotation, file);
}
}