enable annotate externally for disabled property but configured annotation roots (IDEA-CR-21393)

This commit is contained in:
Anna Kozlova
2017-05-26 17:52:44 +03:00
parent ea03900b48
commit c5c4b4debc
4 changed files with 33 additions and 5 deletions
@@ -728,6 +728,19 @@ public class ExternalAnnotationsManagerImpl extends ReadableExternalAnnotationsM
return null;
}
@Override
public boolean hasAnnotationRootsForFile(@NotNull VirtualFile file) {
if (hasAnyAnnotationsRoots()) {
ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myPsiManager.getProject()).getFileIndex();
for (OrderEntry entry : fileIndex.getOrderEntriesForFile(file)) {
if (!(entry instanceof ModuleOrderEntry) && AnnotationOrderRootType.getUrls(entry).length > 0) {
return true;
}
}
}
return false;
}
@Override
protected void duplicateError(@NotNull PsiFile file, @NotNull String externalName, @NotNull String text) {
String message = text + "; for signature: '" + externalName + "' in the file " + file.getVirtualFile().getPresentableUrl();
@@ -19,12 +19,14 @@ import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiModifierListOwner;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -43,11 +45,16 @@ public class MakeAnnotationExternal extends BaseIntentionAction {
PsiAnnotation annotation = PsiTreeUtil.getParentOfType(file.findElementAt(editor.getCaretModel().getOffset()), PsiAnnotation.class);
if (annotation != null && annotation.getQualifiedName() != null &&
annotation.getManager().isInProject(annotation) &&
CodeStyleSettingsManager.getSettings(project).USE_EXTERNAL_ANNOTATIONS &&
PsiTreeUtil.getParentOfType(annotation, PsiModifierListOwner.class) != null) {
setText("Annotate externally");
return true;
annotation.getManager().isInProject(annotation)) {
PsiModifierListOwner modifierListOwner = PsiTreeUtil.getParentOfType(annotation, PsiModifierListOwner.class);
if (modifierListOwner != null) {
VirtualFile virtualFile = PsiUtilCore.getVirtualFile(modifierListOwner);
if (CodeStyleSettingsManager.getSettings(project).USE_EXTERNAL_ANNOTATIONS ||
virtualFile != null && ExternalAnnotationsManager.getInstance(project).hasAnnotationRootsForFile(virtualFile)) {
setText("Annotate externally");
return true;
}
}
}
return false;
}
@@ -18,6 +18,7 @@ package com.intellij.codeInsight;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NotNullLazyKey;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.util.messages.Topic;
import org.jetbrains.annotations.NotNull;
@@ -42,6 +43,8 @@ public abstract class ExternalAnnotationsManager {
return INSTANCE_KEY.getValue(project);
}
public abstract boolean hasAnnotationRootsForFile(@NotNull VirtualFile file);
public abstract boolean isExternalAnnotation(@NotNull PsiAnnotation annotation);
@Nullable
@@ -73,6 +73,11 @@ public abstract class BaseExternalAnnotationsManager extends ExternalAnnotations
protected abstract boolean hasAnyAnnotationsRoots();
@Override
public boolean hasAnnotationRootsForFile(@NotNull VirtualFile file) {
return hasAnyAnnotationsRoots();
}
@Override
public boolean isExternalAnnotation(@NotNull PsiAnnotation annotation) {
return annotation.getUserData(EXTERNAL_ANNO_MARKER) != null;