diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java index 77948135226c..df0f20baf636 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java @@ -20,7 +20,7 @@ */ package com.intellij.openapi.roots.ui.configuration.libraryEditor; -import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; +import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.ui.SdkPathEditor; @@ -45,6 +45,6 @@ public class AnnotationsOrderRootTypeUIFactory implements OrderRootTypeUIFactory public SdkPathEditor createPathEditor(Sdk sdk) { return new SdkPathEditor(ProjectBundle.message("sdk.configure.annotations.tab"), AnnotationOrderRootType.getInstance(), - FileChooserDescriptorFactory.createSingleFolderDescriptor()); + new FileChooserDescriptor(false, true, true, false, true, false)); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java index fd399909e42f..13e176e36ad9 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExternalAnnotationsManagerImpl.java @@ -202,7 +202,9 @@ public class ExternalAnnotationsManagerImpl extends ExternalAnnotationsManager { } for (final OrderEntry entry : entries) { if (entry instanceof ModuleOrderEntry) continue; - final VirtualFile[] virtualFiles = AnnotationOrderRootType.getFiles(entry); + VirtualFile[] virtualFiles = AnnotationOrderRootType.getFiles(entry); + virtualFiles = filterByReadOnliness(virtualFiles); + if (virtualFiles.length > 0) { chooseRootAndAnnotateExternally(listOwner, annotationFQName, fromFile, project, packageName, virtualFile, virtualFiles, value); } @@ -255,7 +257,7 @@ public class ExternalAnnotationsManagerImpl extends ExternalAnnotationsManager { final Project project, final String packageName, final VirtualFile virtualFile, final VirtualFile[] virtualFiles, final PsiNameValuePair[] value) { if (virtualFiles.length > 1) { - JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep("Annotation Roots", virtualFiles){ + JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep("Annotation Roots", virtualFiles) { @Override public PopupStep onChosen(final VirtualFile file, final boolean finalChoice) { annotateExternally(file, listOwner, project, packageName, virtualFile, annotationFQName, fromFile, value); @@ -273,11 +275,23 @@ public class ExternalAnnotationsManagerImpl extends ExternalAnnotationsManager { return ICON; } }).showInBestPositionFor(DataManager.getInstance().getDataContext()); - } else { + } + else { annotateExternally(virtualFiles[0], listOwner, project, packageName, virtualFile, annotationFQName, fromFile, value); } } + @NotNull + private static VirtualFile[] filterByReadOnliness(@NotNull VirtualFile[] files) { + List result = new ArrayList(); + for (VirtualFile file : files) { + if (file.isInLocalFileSystem()) { + result.add(file); + } + } + return VfsUtil.toVirtualFileArray(result); + } + private void annotateExternally(final VirtualFile file, final PsiModifierListOwner listOwner, final Project project, final String packageName, final VirtualFile virtualFile, @@ -562,28 +576,28 @@ public class ExternalAnnotationsManagerImpl extends ExternalAnnotationsManager { } final List entries = ProjectRootManager.getInstance(project).getFileIndex().getOrderEntriesForFile(virtualFile); for (OrderEntry entry : entries) { - if (!(entry instanceof ModuleOrderEntry)) { - List possibleAnnotationsXmls = null; - final String[] externalUrls = AnnotationOrderRootType.getUrls(entry); - for (String url : externalUrls) { - final VirtualFile ext = LocalFileSystem.getInstance() - .findFileByPath(VfsUtil.urlToPath(url) + "/" + packageName.replace(".", "/") + "/" + ANNOTATIONS_XML); - if (ext != null) { - final PsiFile psiFile = myPsiManager.findFile(ext); - if (psiFile instanceof XmlFile) { - if (possibleAnnotationsXmls == null) { - possibleAnnotationsXmls = new ArrayList(); - } - possibleAnnotationsXmls.add((XmlFile)psiFile); - } - } - } - if (possibleAnnotationsXmls != null) { - myExternalAnnotations.put(fqn, possibleAnnotationsXmls); - return possibleAnnotationsXmls; - } - break; + if (entry instanceof ModuleOrderEntry) { + continue; } + List possibleAnnotationsXmls = null; + final String[] externalUrls = AnnotationOrderRootType.getUrls(entry); + for (String url : externalUrls) { + VirtualFile root = VirtualFileManager.getInstance().findFileByUrl(url); + if (root == null) continue; + final VirtualFile ext = root.findFileByRelativePath(packageName.replace(".", "/") + "/" + ANNOTATIONS_XML); + if (ext == null) continue; + final PsiFile psiFile = myPsiManager.findFile(ext); + if (!(psiFile instanceof XmlFile)) continue; + if (possibleAnnotationsXmls == null) { + possibleAnnotationsXmls = new ArrayList(); + } + possibleAnnotationsXmls.add((XmlFile)psiFile); + } + if (possibleAnnotationsXmls != null) { + myExternalAnnotations.put(fqn, possibleAnnotationsXmls); + return possibleAnnotationsXmls; + } + break; } myExternalAnnotations.put(fqn, NULL); } diff --git a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java index 6088fc72625f..c94b66320eb4 100644 --- a/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java +++ b/java/openapi/src/com/intellij/openapi/roots/AnnotationOrderRootType.java @@ -18,6 +18,7 @@ package com.intellij.openapi.roots; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Collections; @@ -43,7 +44,8 @@ public class AnnotationOrderRootType extends PersistentOrderRootType { return true; } - public static VirtualFile[] getFiles(OrderEntry entry) { + @NotNull + public static VirtualFile[] getFiles(@NotNull OrderEntry entry) { List result = new ArrayList(); RootPolicy> policy = new RootPolicy>() { @Override @@ -69,7 +71,8 @@ public class AnnotationOrderRootType extends PersistentOrderRootType { return VfsUtil.toVirtualFileArray(result); } - public static String[] getUrls(OrderEntry entry) { + @NotNull + public static String[] getUrls(@NotNull OrderEntry entry) { List result = new ArrayList(); RootPolicy> policy = new RootPolicy>() { @Override diff --git a/platform/lang-api/src/com/intellij/codeInspection/LocalInspectionToolSession.java b/platform/lang-api/src/com/intellij/codeInspection/LocalInspectionToolSession.java index 3f7635f23262..50ab0b92e180 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/LocalInspectionToolSession.java +++ b/platform/lang-api/src/com/intellij/codeInspection/LocalInspectionToolSession.java @@ -22,18 +22,20 @@ package com.intellij.codeInspection; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; public class LocalInspectionToolSession extends UserDataHolderBase { private final PsiFile myFile; private final int myStartOffset; private final int myEndOffset; - public LocalInspectionToolSession(final PsiFile file, final int startOffset, final int endOffset) { + public LocalInspectionToolSession(@NotNull PsiFile file, final int startOffset, final int endOffset) { myFile = file; myStartOffset = startOffset; myEndOffset = endOffset; } + @NotNull public PsiFile getFile() { return myFile; } diff --git a/resources-en/src/inspectionDescriptions/MagicConstant.html b/resources-en/src/inspectionDescriptions/MagicConstant.html index c45a06c7fa6a..fb5dd3775307 100644 --- a/resources-en/src/inspectionDescriptions/MagicConstant.html +++ b/resources-en/src/inspectionDescriptions/MagicConstant.html @@ -2,8 +2,9 @@ Report occurrences where usages of "magic" constants only are allowed but other expressions are used instead.
- E.g. new Font("Arial", 42)
- instead of new Font("Arial", Font.BOLD)
+ E.g.
+ new Font("Arial", 2) // not allowed
+ instead of new Font("Arial", Font.ITALIC) // OK