diff --git a/java/openapi/src/com/intellij/psi/util/PsiUtil.java b/java/openapi/src/com/intellij/psi/util/PsiUtil.java index cd7566de5f25..cf82697d098a 100644 --- a/java/openapi/src/com/intellij/psi/util/PsiUtil.java +++ b/java/openapi/src/com/intellij/psi/util/PsiUtil.java @@ -20,7 +20,7 @@ import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.JarFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; @@ -662,8 +662,8 @@ public final class PsiUtil extends PsiUtilCore { @Nullable public static VirtualFile getJarFile(PsiElement candidate) { VirtualFile file = candidate.getContainingFile().getVirtualFile(); - if (file != null && file.getFileSystem() instanceof JarFileSystem) { - return JarFileSystem.getInstance().getVirtualFileForJar(file); + if (file != null && file.getFileSystem().getProtocol().equals("jar")) { + return VfsUtilCore.getVirtualFileForJar(file); } return file; } diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VfsUtilCore.java b/platform/core-api/src/com/intellij/openapi/vfs/VfsUtilCore.java index b5fadb731fbe..a13c5e7dbd46 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VfsUtilCore.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VfsUtilCore.java @@ -80,4 +80,15 @@ public class VfsUtilCore { } return new String(chars); } + + @Nullable + public static VirtualFile getVirtualFileForJar(@Nullable VirtualFile entryVFile) { + if (entryVFile == null) return null; + final String path = entryVFile.getPath(); + final int separatorIndex = path.indexOf("!/"); + if (separatorIndex < 0) return null; + + String localPath = path.substring(0, separatorIndex); + return VirtualFileManager.getInstance().findFileByUrl("file://" + localPath); + } }