WI-14660 PHAR: Find in Path and Replace in Path don't work

This commit is contained in:
Shaverdova Elena
2013-01-24 20:22:49 +04:00
parent f134f45f41
commit 6fd045efd8
5 changed files with 29 additions and 3 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.openapi.vfs;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
@@ -25,4 +26,7 @@ public interface LocalFileProvider{
@Nullable
VirtualFile getLocalVirtualFileFor(@Nullable VirtualFile entryVFile);
@Nullable
VirtualFile findLocalVirtualFileByPath(@NotNull String path);
}
@@ -15,10 +15,15 @@
*/
package com.intellij.openapi.vfs.ex;
import com.intellij.openapi.vfs.LocalFileProvider;
import com.intellij.openapi.vfs.VirtualFileManager;
import java.util.List;
public abstract class VirtualFileManagerEx extends VirtualFileManager {
public abstract void fireBeforeRefreshStart(boolean asynchronous);
public abstract void fireAfterRefreshFinish(boolean asynchronous);
public abstract List<LocalFileProvider> getLocalFileProviders();
}
@@ -250,6 +250,11 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx {
return 0;
}
@Override
public List<LocalFileProvider> getLocalFileProviders(){
return ContainerUtil.findAll(myPhysicalFileSystems, LocalFileProvider.class);
}
private static class LoggingListener implements VirtualFileListener {
@Override
public void propertyChanged(VirtualFilePropertyEvent event) {
@@ -49,6 +49,7 @@ import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.util.text.TrigramBuilder;
import com.intellij.openapi.vfs.*;
import com.intellij.openapi.vfs.ex.VirtualFileManagerEx;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.*;
@@ -136,10 +137,12 @@ public class FindInProjectUtil {
String path = directoryName.replace(File.separatorChar, '/');
VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByPath(path);
if (virtualFile == null || !virtualFile.isDirectory()) {
if (!path.contains(JarFileSystem.JAR_SEPARATOR)) {
path += JarFileSystem.JAR_SEPARATOR;
for (LocalFileProvider provider : ((VirtualFileManagerEx)VirtualFileManager.getInstance()).getLocalFileProviders()) {
virtualFile = provider.findLocalVirtualFileByPath(path);
if (virtualFile != null && virtualFile.isDirectory()) {
break;
}
}
virtualFile = JarFileSystem.getInstance().findFileByPath(path);
}
return virtualFile == null ? null : psiManager.findDirectory(virtualFile);
}
@@ -47,4 +47,13 @@ public abstract class JarFileSystem extends NewVirtualFileSystem implements JarC
public VirtualFile getLocalVirtualFileFor(@Nullable VirtualFile entryVFile) {
return getVirtualFileForJar(entryVFile);
}
@Nullable
@Override
public VirtualFile findLocalVirtualFileByPath(@NotNull String path) {
if (!path.contains(JAR_SEPARATOR)) {
path += JAR_SEPARATOR;
}
return findFileByPath(path);
}
}