diff --git a/platform/lang-api/src/com/intellij/ide/projectView/ProjectViewNode.java b/platform/lang-api/src/com/intellij/ide/projectView/ProjectViewNode.java index e2e1618a19f9..b6d43e811365 100644 --- a/platform/lang-api/src/com/intellij/ide/projectView/ProjectViewNode.java +++ b/platform/lang-api/src/com/intellij/ide/projectView/ProjectViewNode.java @@ -125,21 +125,30 @@ public abstract class ProjectViewNode extends AbstractTreeNode im } public boolean someChildContainsFile(final VirtualFile file) { + return someChildContainsFile(file, true); + } + + public boolean someChildContainsFile(final VirtualFile file, boolean optimizeByCheckingFileRootsFirst) { VirtualFile parent = file.getParent(); if (parent == null) return false; boolean mayContain = false; - Collection roots = getRoots(); - for (VirtualFile eachRoot : roots) { - if (parent.equals(eachRoot.getParent())) { - mayContain = true; - break; - } - if (VfsUtil.isAncestor(eachRoot, file, true)) { - mayContain = true; - break; + if (optimizeByCheckingFileRootsFirst) { + Collection roots = getRoots(); + for (VirtualFile eachRoot : roots) { + if (parent.equals(eachRoot.getParent())) { + mayContain = true; + break; + } + + if (VfsUtil.isAncestor(eachRoot, file, true)) { + mayContain = true; + break; + } } + } else { + mayContain = true; } if (!mayContain) { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ExternalLibrariesNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ExternalLibrariesNode.java index 43d54ce388b5..ef5481db5e9b 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ExternalLibrariesNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/ExternalLibrariesNode.java @@ -47,7 +47,10 @@ public class ExternalLibrariesNode extends ProjectViewNode { @Override public boolean contains(@NotNull VirtualFile file) { - return someChildContainsFile(file); + ProjectFileIndex index = ProjectRootManager.getInstance(getProject()).getFileIndex(); + if (!index.isInLibrarySource(file) && !index.isInLibraryClasses(file)) return false; + + return someChildContainsFile(file, false); } @NotNull