package com.haskforce.index; import com.haskforce.HaskellFileType; import com.haskforce.psi.HaskellFile; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.indexing.FileBasedIndex; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; public final class HaskellFileIndex { public static Collection<VirtualFile> getVirtualFiles(@NotNull Project project) { return FileBasedIndex.getInstance().getContainingFiles( FileTypeIndex.NAME, HaskellFileType.INSTANCE, GlobalSearchScope.projectScope(project) ); } public static List<HaskellFile> getPsiFiles(@NotNull Project project) { final PsiManager psiManager = PsiManager.getInstance(project); return ContainerUtil.map( getVirtualFiles(project), new Function<VirtualFile, HaskellFile>() { @Override public HaskellFile fun(VirtualFile vFile) { PsiFile psiFile = psiManager.findFile(vFile); if (psiFile == null) { throw new AssertionError("Could not find psi file for " + vFile); } if (psiFile instanceof HaskellFile) return (HaskellFile) psiFile; throw new AssertionError("Expected HaskellFile, got " + psiFile + " from " + vFile); } } ); } }