diff --git a/platform/lang-api/src/com/intellij/psi/impl/include/FileIncludeManager.java b/platform/lang-api/src/com/intellij/psi/impl/include/FileIncludeManager.java index 7d56a7e75cb2..3d3e7a04fd1c 100644 --- a/platform/lang-api/src/com/intellij/psi/impl/include/FileIncludeManager.java +++ b/platform/lang-api/src/com/intellij/psi/impl/include/FileIncludeManager.java @@ -23,6 +23,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileSystemItem; import com.intellij.util.Processor; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** @@ -34,9 +35,9 @@ public abstract class FileIncludeManager { return ServiceManager.getService(project, FileIncludeManager.class); } - public abstract VirtualFile[] getIncludedFiles(VirtualFile file, boolean compileTimeOnly); + public abstract VirtualFile[] getIncludedFiles(@NotNull VirtualFile file, boolean compileTimeOnly); - public abstract VirtualFile[] getIncludingFiles(VirtualFile file, boolean compileTimeOnly); + public abstract VirtualFile[] getIncludingFiles(@NotNull VirtualFile file, boolean compileTimeOnly); public abstract void processIncludingFiles(PsiFile context, Processor> processor); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java index 01340d441c00..c141d5b270a4 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java @@ -21,10 +21,7 @@ import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.openapi.vfs.VirtualFileWithId; +import com.intellij.openapi.vfs.*; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; import com.intellij.psi.PsiFileSystemItem; @@ -38,6 +35,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FactoryMap; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.MultiMap; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -136,7 +134,7 @@ public class FileIncludeManagerImpl extends FileIncludeManager { } @Override - public VirtualFile[] getIncludedFiles(VirtualFile file, boolean compileTimeOnly) { + public VirtualFile[] getIncludedFiles(@NotNull VirtualFile file, boolean compileTimeOnly) { if (file instanceof VirtualFileWithId) { return myIncludedHolder.getAllFiles(file, compileTimeOnly); } @@ -146,7 +144,7 @@ public class FileIncludeManagerImpl extends FileIncludeManager { } @Override - public VirtualFile[] getIncludingFiles(VirtualFile file, boolean compileTimeOnly) { + public VirtualFile[] getIncludingFiles(@NotNull VirtualFile file, boolean compileTimeOnly) { return myIncludingHolder.getAllFiles(file, compileTimeOnly); } @@ -204,13 +202,13 @@ public class FileIncludeManagerImpl extends FileIncludeManager { RUNTIME_KEY = Key.create(runtimeKey); } - public VirtualFile[] getAllFiles(VirtualFile file, boolean compileTimeOnly) { + private VirtualFile[] getAllFiles(@NotNull VirtualFile file, boolean compileTimeOnly) { Set result = new HashSet(); getFilesRecursively(file, compileTimeOnly, result); - return VfsUtil.toVirtualFileArray(result); + return VfsUtilCore.toVirtualFileArray(result); } - private void getFilesRecursively(VirtualFile file, boolean compileTimeOnly, Set result) { + private void getFilesRecursively(@NotNull VirtualFile file, boolean compileTimeOnly, Set result) { if (result.contains(file)) return; PsiFile psiFile = myPsiManager.findFile(file); if (psiFile == null) return; diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/RelaxIncludeIndex.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/RelaxIncludeIndex.java index 0d8c9c5de2cc..ab9beda8cc01 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/RelaxIncludeIndex.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/model/resolve/RelaxIncludeIndex.java @@ -23,20 +23,23 @@ import org.jetbrains.annotations.NotNull; */ public class RelaxIncludeIndex { public static boolean processForwardDependencies(XmlFile file, final PsiElementProcessor processor) { + VirtualFile virtualFile = file.getVirtualFile(); + if (virtualFile == null) { + return processor.execute(file); + } final Project project = file.getProject(); - final VirtualFile[] files = FileIncludeManager.getManager(project).getIncludedFiles(file.getVirtualFile(), true); + final VirtualFile[] files = FileIncludeManager.getManager(project).getIncludedFiles(virtualFile, true); return processRelatedFiles(file, files, processor); } public static boolean processBackwardDependencies(@NotNull XmlFile file, PsiElementProcessor processor) { - return processBackwardDependencies((PsiFile)file, processor); - } - - - private static boolean processBackwardDependencies(@NotNull PsiFile file, PsiElementProcessor processor) { + VirtualFile virtualFile = file.getVirtualFile(); + if (virtualFile == null) { + return processor.execute(file); + } final Project project = file.getProject(); - final VirtualFile[] files = FileIncludeManager.getManager(project).getIncludingFiles(file.getVirtualFile(), true); + final VirtualFile[] files = FileIncludeManager.getManager(project).getIncludingFiles(virtualFile, true); return processRelatedFiles(file, files, processor); } @@ -51,25 +54,28 @@ public class RelaxIncludeIndex { }); for (final PsiFile psiFile : psiFiles) { - final FileType type = file.getFileType(); - if (type == XmlFileType.INSTANCE && isRngFile(psiFile)) { - if (!processor.execute((XmlFile)psiFile)) { - return false; - } - } else if (type == RncFileType.getInstance()) { - if (!processor.execute((XmlFile)psiFile)) { - return false; - } + if (!processFile(psiFile, processor)) { + return false; + } + } + return true; + } + + private static boolean processFile(PsiFile psiFile, PsiElementProcessor processor) { + final FileType type = psiFile.getFileType(); + if (type == XmlFileType.INSTANCE && isRngFile(psiFile)) { + if (!processor.execute((XmlFile)psiFile)) { + return false; + } + } else if (type == RncFileType.getInstance()) { + if (!processor.execute((XmlFile)psiFile)) { + return false; } } return true; } static boolean isRngFile(PsiFile psiFile) { - try { - return DomManager.getDomManager(psiFile.getProject()).getFileElement((XmlFile)psiFile, RngGrammar.class) != null; - } catch (ClassCastException e) { - return false; // fileType == XML && !instanceof XmlFile - } + return psiFile instanceof XmlFile && DomManager.getDomManager(psiFile.getProject()).getFileElement((XmlFile)psiFile, RngGrammar.class) != null; } }