diff --git a/platform/core-api/src/com/intellij/openapi/vfs/StandardFileSystems.java b/platform/core-api/src/com/intellij/openapi/vfs/StandardFileSystems.java
index a930c439a9b4..64f7c8a8e367 100644
--- a/platform/core-api/src/com/intellij/openapi/vfs/StandardFileSystems.java
+++ b/platform/core-api/src/com/intellij/openapi/vfs/StandardFileSystems.java
@@ -59,11 +59,6 @@ public class StandardFileSystems {
return ourJar.getValue();
}
- @Nullable
- public static VirtualFile getJarRootForLocalFile(@NotNull VirtualFile virtualFile) {
- return jar().findFileByPath(virtualFile.getPath() + URLUtil.JAR_SEPARATOR);
- }
-
//
/** @deprecated use ArchiveFileSystem#getLocalByEntry(VirtualFile) (to remove in IDEA 2018) */
public static VirtualFile getVirtualFileForJar(@Nullable VirtualFile entryVFile) {
@@ -75,5 +70,10 @@ public class StandardFileSystems {
String localPath = path.substring(0, separatorIndex);
return local().findFileByPath(localPath);
}
+
+ /** @deprecated use ArchiveFileSystem#getRootByLocal(VirtualFile) (to remove in IDEA 2018) */
+ public static VirtualFile getJarRootForLocalFile(@NotNull VirtualFile local) {
+ return jar().findFileByPath(local.getPath() + URLUtil.JAR_SEPARATOR);
+ }
//
}
\ No newline at end of file
diff --git a/platform/core-api/src/com/intellij/util/PathsList.java b/platform/core-api/src/com/intellij/util/PathsList.java
index b49244bbacad..d5ca742f7e74 100644
--- a/platform/core-api/src/com/intellij/util/PathsList.java
+++ b/platform/core-api/src/com/intellij/util/PathsList.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2016 JetBrains s.r.o.
+ * Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
package com.intellij.util;
import com.intellij.ide.highlighter.ArchiveFileType;
-import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
@@ -25,6 +24,7 @@ import com.intellij.openapi.vfs.StandardFileSystems;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.containers.HashSet;
import com.intellij.util.containers.JBIterable;
+import com.intellij.util.io.URLUtil;
import org.jetbrains.annotations.NotNull;
import java.io.File;
@@ -41,14 +41,12 @@ public class PathsList {
private static final Function LOCAL_PATH = file -> PathUtil.getLocalPath(file);
private static final Function PATH_TO_DIR = (NullableFunction)s -> {
- final FileType fileType = FileTypeRegistry.getInstance().getFileTypeByFileName(s);
- final VirtualFile localFile = PATH_TO_LOCAL_VFILE.fun(s);
- if (localFile == null) return null;
-
- if (ArchiveFileType.INSTANCE.equals(fileType) && !localFile.isDirectory()) {
- return StandardFileSystems.getJarRootForLocalFile(localFile);
+ VirtualFile file = PATH_TO_LOCAL_VFILE.fun(s);
+ if (file == null) return null;
+ if (!file.isDirectory() && FileTypeRegistry.getInstance().getFileTypeByFileName(file.getName()) == ArchiveFileType.INSTANCE) {
+ return StandardFileSystems.jar().findFileByPath(file.getPath() + URLUtil.JAR_SEPARATOR);
}
- return localFile;
+ return file;
};
public boolean isEmpty() {
diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/ArchiveFileSystem.java b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/ArchiveFileSystem.java
index 491c70fd7a40..b9c76dc8a2b2 100644
--- a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/ArchiveFileSystem.java
+++ b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/ArchiveFileSystem.java
@@ -44,7 +44,7 @@ public abstract class ArchiveFileSystem extends NewVirtualFileSystem {
*/
@Nullable
public VirtualFile getRootByLocal(@NotNull VirtualFile file) {
- return findFileByPath(getRootPathByLocal(file));
+ return isCorrectFileType(file) ? findFileByPath(getRootPathByLocal(file)) : null;
}
@NotNull
diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java
index 550bbc31cccc..fbe27f230ded 100644
--- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java
+++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/libraries/LibraryImpl.java
@@ -15,10 +15,12 @@
*/
package com.intellij.openapi.roots.impl.libraries;
+import com.intellij.ide.highlighter.ArchiveFileType;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ComponentSerializationUtil;
import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectUtilCore;
@@ -39,6 +41,7 @@ import com.intellij.util.ArrayUtilRt;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.HashMap;
+import com.intellij.util.io.URLUtil;
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
import com.intellij.util.xmlb.XmlSerializer;
import gnu.trove.THashSet;
@@ -215,14 +218,16 @@ public class LibraryImpl extends TraceableDisposable implements LibraryEx.Modifi
return VfsUtilCore.toVirtualFileArray(expanded);
}
- public static void collectJarFiles(final VirtualFile dir, final List container, final boolean recursively) {
+ public static void collectJarFiles(VirtualFile dir, List container, boolean recursively) {
VfsUtilCore.visitChildrenRecursively(dir, new VirtualFileVisitor(SKIP_ROOT, recursively ? null : ONE_LEVEL_DEEP) {
@Override
public boolean visitFile(@NotNull VirtualFile file) {
- final VirtualFile jarRoot = file.isDirectory() ? null : StandardFileSystems.getJarRootForLocalFile(file);
- if (jarRoot != null) {
- container.add(jarRoot);
- return false;
+ if (!file.isDirectory() && FileTypeRegistry.getInstance().getFileTypeByFileName(file.getName()) == ArchiveFileType.INSTANCE) {
+ VirtualFile jarRoot = StandardFileSystems.jar().findFileByPath(file.getPath() + URLUtil.JAR_SEPARATOR);
+ if (jarRoot != null) {
+ container.add(jarRoot);
+ return false;
+ }
}
return true;
}