mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vfs] checking file type before looking for .jar root (IDEA-177078)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
//<editor-fold desc="Deprecated stuff.">
|
||||
/** @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);
|
||||
}
|
||||
//</editor-fold>
|
||||
}
|
||||
@@ -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<VirtualFile, String> LOCAL_PATH = file -> PathUtil.getLocalPath(file);
|
||||
|
||||
private static final Function<String, VirtualFile> PATH_TO_DIR = (NullableFunction<String, VirtualFile>)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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
+10
-5
@@ -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<VirtualFile> container, final boolean recursively) {
|
||||
public static void collectJarFiles(VirtualFile dir, List<VirtualFile> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user