mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow for jdk annotations to reside inside jar
This commit is contained in:
+2
-2
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<VirtualFile>("Annotation Roots", virtualFiles){
|
||||
JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<VirtualFile>("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<VirtualFile> result = new ArrayList<VirtualFile>();
|
||||
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<OrderEntry> entries = ProjectRootManager.getInstance(project).getFileIndex().getOrderEntriesForFile(virtualFile);
|
||||
for (OrderEntry entry : entries) {
|
||||
if (!(entry instanceof ModuleOrderEntry)) {
|
||||
List<XmlFile> 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<XmlFile>();
|
||||
}
|
||||
possibleAnnotationsXmls.add((XmlFile)psiFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (possibleAnnotationsXmls != null) {
|
||||
myExternalAnnotations.put(fqn, possibleAnnotationsXmls);
|
||||
return possibleAnnotationsXmls;
|
||||
}
|
||||
break;
|
||||
if (entry instanceof ModuleOrderEntry) {
|
||||
continue;
|
||||
}
|
||||
List<XmlFile> 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<XmlFile>();
|
||||
}
|
||||
possibleAnnotationsXmls.add((XmlFile)psiFile);
|
||||
}
|
||||
if (possibleAnnotationsXmls != null) {
|
||||
myExternalAnnotations.put(fqn, possibleAnnotationsXmls);
|
||||
return possibleAnnotationsXmls;
|
||||
}
|
||||
break;
|
||||
}
|
||||
myExternalAnnotations.put(fqn, NULL);
|
||||
}
|
||||
|
||||
@@ -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<VirtualFile> result = new ArrayList<VirtualFile>();
|
||||
RootPolicy<List<VirtualFile>> policy = new RootPolicy<List<VirtualFile>>() {
|
||||
@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<String> result = new ArrayList<String>();
|
||||
RootPolicy<List<String>> policy = new RootPolicy<List<String>>() {
|
||||
@Override
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
<body>
|
||||
<font face="verdana" size="-1">Report occurrences where usages of "magic" constants only are allowed
|
||||
but other expressions are used instead.<br>
|
||||
E.g. <b><font color="#000080">new </font></b> Font("Arial", <b><font color="#000080">42</font></b>) <br>
|
||||
instead of <b><font color="#000080">new </font></b> Font("Arial", Font.<b><font color="#000080">BOLD</font></b>) <br>
|
||||
E.g.<br>
|
||||
<b><font color="#000080">new </font></b> Font("Arial", <b><font color="#000080">2</font></b>) // not allowed<br>
|
||||
instead of <b><font color="#000080">new </font></b> Font("Arial", Font.<b><font color="#000080">ITALIC</font></b>) // OK<br>
|
||||
|
||||
<br><br>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user