mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
IDEA-63333 JS library is not visible under the External Libraries node [r=K.Safonov]
This commit is contained in:
@@ -38,10 +38,7 @@ import com.intellij.util.PathUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
public class ExternalLibrariesNode extends ProjectViewNode<String> {
|
||||
public ExternalLibrariesNode(Project project, ViewSettings viewSettings) {
|
||||
@@ -109,14 +106,13 @@ public class ExternalLibrariesNode extends ProjectViewNode<String> {
|
||||
}
|
||||
|
||||
private static boolean hasExternalEntries(ProjectFileIndex index, LibraryOrderEntry orderEntry) {
|
||||
VirtualFile[] files = orderEntry.getRootFiles(OrderRootType.CLASSES);
|
||||
for (VirtualFile file : files) {
|
||||
for (VirtualFile file : LibraryGroupNode.getLibraryRoots(orderEntry)) {
|
||||
if (!index.isInContent(PathUtil.getLocalFile(file))) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void update(PresentationData presentation) {
|
||||
presentation.setPresentableText(IdeBundle.message("node.projectview.external.libraries"));
|
||||
|
||||
@@ -25,15 +25,19 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.impl.libraries.LibraryEx;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryType;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.util.Icons;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@@ -80,13 +84,21 @@ public class LibraryGroupNode extends ProjectViewNode<LibraryGroupElement> {
|
||||
|
||||
public static void addLibraryChildren(final OrderEntry entry, final List<AbstractTreeNode> children, Project project, ProjectViewNode node) {
|
||||
final PsiManager psiManager = PsiManager.getInstance(project);
|
||||
final VirtualFile[] files = entry.getFiles(OrderRootType.CLASSES);
|
||||
VirtualFile[] files =
|
||||
entry instanceof LibraryOrderEntry ? getLibraryRoots((LibraryOrderEntry)entry) : entry.getFiles(OrderRootType.CLASSES);
|
||||
for (final VirtualFile file : files) {
|
||||
final PsiDirectory psiDir = psiManager.findDirectory(file);
|
||||
if (psiDir == null) {
|
||||
continue;
|
||||
if (file.isDirectory()) {
|
||||
final PsiDirectory psiDir = psiManager.findDirectory(file);
|
||||
if (psiDir == null) {
|
||||
continue;
|
||||
}
|
||||
children.add(new PsiDirectoryNode(project, psiDir, node.getSettings()));
|
||||
}
|
||||
else {
|
||||
final PsiFile psiFile = psiManager.findFile(file);
|
||||
if (psiFile == null) continue;
|
||||
children.add(new PsiFileNode(project, psiFile, node.getSettings()));
|
||||
}
|
||||
children.add(new PsiDirectoryNode(project, psiDir, node.getSettings()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,4 +128,26 @@ public class LibraryGroupNode extends ProjectViewNode<LibraryGroupElement> {
|
||||
Module module = getValue().getModule();
|
||||
ProjectSettingsService.getInstance(myProject).openModuleLibrarySettings(module);
|
||||
}
|
||||
|
||||
static VirtualFile[] getLibraryRoots(LibraryOrderEntry orderEntry) {
|
||||
final ArrayList<VirtualFile> files = new ArrayList<VirtualFile>();
|
||||
final Library library = orderEntry.getLibrary();
|
||||
OrderRootType[] rootTypes = LibraryType.DEFAULT_EXTERNAL_ROOT_TYPES;
|
||||
if (library instanceof LibraryEx) {
|
||||
LibraryType libraryType = ((LibraryEx)library).getType();
|
||||
if (libraryType != null) {
|
||||
rootTypes = libraryType.getExternalRootTypes();
|
||||
if (libraryType.isFileBased()) {
|
||||
for (OrderRootType rootType : rootTypes) {
|
||||
files.addAll(Arrays.asList(library.getFiles(rootType)));
|
||||
}
|
||||
return files.toArray(new VirtualFile[files.size()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (OrderRootType rootType : rootTypes) {
|
||||
files.addAll(Arrays.asList(orderEntry.getRootFiles(rootType)));
|
||||
}
|
||||
return files.toArray(new VirtualFile[files.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,4 +89,11 @@ public abstract class LibraryType<P extends LibraryProperties> extends LibraryPr
|
||||
public OrderRootType[] getAdditionalRootTypes() {
|
||||
return new OrderRootType[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return True if library roots are files, not directories (for e.g., JavaScript files)
|
||||
*/
|
||||
public boolean isFileBased() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user