/* * Copyright 2000-2012 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. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.openapi.roots; import com.google.common.base.Predicate; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import consulo.roots.ContentFolderTypeProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; /** * Provides information about files contained in a project. * * @see ProjectRootManager#getFileIndex() */ public interface ProjectFileIndex extends FileIndex { class SERVICE { private SERVICE() { } public static ProjectFileIndex getInstance(Project project) { return ServiceManager.getService(project, ProjectFileIndex.class); } } /** * Returns module to which the specified file belongs. * * @param file the file for which the module is requested. * @return the module instance or null if the file does not belong to content of any module. */ @Nullable Module getModuleForFile(@NotNull VirtualFile file); /** * Returns module to which the specified file belongs. * * @param file the file for which the module is requested. * @param honorExclusion if {@code false} the containing module will be returned even if the file is located under a folder marked as excluded * @return the module instance or null if the file does not belong to content of any module. */ @Nullable Module getModuleForFile(@NotNull VirtualFile file, boolean honorExclusion); /** * Returns the order entries which contain the specified file (either in CLASSES or SOURCES). * * @param file the file for which the order entries are requested. * @return the array of order entries containing the file. */ @NotNull List<OrderEntry> getOrderEntriesForFile(@NotNull VirtualFile file); /** * Returns a classpath entry to which the specified file or directory belongs. * * @param file the file or directory for which the information is requested. * @return the file for the classpath entry, or null if the file is not a compiled * class file or directory belonging to a library. */ @Nullable VirtualFile getClassRootForFile(@NotNull VirtualFile file); /** * Returns the module source root or library source root to which the specified file * or directory belongs. * * @param file the file or directory for which the information is requested. * @return the file for the source root, or null if the file is not located under any * of the source roots for the module. */ @Nullable VirtualFile getSourceRootForFile(@NotNull VirtualFile file); /** * Returns the module content root to which the specified file or directory belongs. * * @param file the file or directory for which the information is requested. * @return the file for the content root, or null if the file does not belong to this project. */ @Nullable VirtualFile getContentRootForFile(@NotNull VirtualFile file); /** * Returns the module content root to which the specified file or directory belongs. * * @param file the file or directory for which the information is requested. * @param honorExclusion if {@code false} the containing content root will be returned even if the file is located under a folder marked as excluded * @return the file for the content root, or null if the file does not belong to this project. */ @Nullable VirtualFile getContentRootForFile(@NotNull VirtualFile file, final boolean honorExclusion); @Nullable ContentFolderTypeProvider getContentFolderTypeForFile(@NotNull VirtualFile file); default boolean isUnderContentFolderType(@NotNull VirtualFile virtualFile, @NotNull ContentFolderTypeProvider contentFolderTypeProvider) { ContentFolderTypeProvider contentFolderTypeForFile = getContentFolderTypeForFile(virtualFile); return contentFolderTypeProvider == contentFolderTypeForFile; } default boolean isUnderContentFolderType(@NotNull VirtualFile virtualFile, @NotNull Predicate<ContentFolderTypeProvider> predicate) { ContentFolderTypeProvider contentFolderTypeForFile = getContentFolderTypeForFile(virtualFile); return contentFolderTypeForFile != null && predicate.apply(contentFolderTypeForFile); } /** * Returns the name of the package corresponding to the specified directory. * * @param dir the directory for which the package name is requested. * @return the package name, or null if the directory does not correspond to any package. */ @Nullable String getPackageNameByDirectory(@NotNull VirtualFile dir); //Q: move to FileIndex? /** * Returns true if <code>file</code> is a file which belongs to the classes (not sources) of some library. * * @param file the file to check. * @return true if the file belongs to library classes, false otherwise. */ boolean isLibraryClassFile(@NotNull VirtualFile file); /** * Returns true if <code>fileOrDir</code> is a file or directory from the content source or library sources. * * @param fileOrDir the file or directory to check. * @return true if the file or directory belongs to project or library sources, false otherwise. */ boolean isInSource(@NotNull VirtualFile fileOrDir); /** * Returns true if <code>fileOrDir</code> is a file or directory from the resources. * * @param fileOrDir the file or directory to check. * @return true if the file or directory belongs to resources, false otherwise. */ boolean isInResource(@NotNull VirtualFile fileOrDir); /** * Returns true if <code>fileOrDir</code> is a file or directory from the test resources. * * @param fileOrDir the file or directory to check. * @return true if the file or directory belongs to resources, false otherwise. */ boolean isInTestResource(@NotNull VirtualFile fileOrDir); /** * Returns true if <code>fileOrDir</code> is a file or directory from library classes. * * @param fileOrDir the file or directory to check. * @return true if the file belongs to library classes, false otherwise. */ boolean isInLibraryClasses(@NotNull VirtualFile fileOrDir); /** * Returns true if <code>fileOrDir</code> is a file or directory from library source. * * @param fileOrDir the file or directory to check. * @return true if the file belongs to library sources, false otherwise. */ boolean isInLibrarySource(@NotNull VirtualFile fileOrDir); /** * @deprecated name of this method may be confusing. If you want to check if the file is excluded or ignored use {@link #isExcluded(com.intellij.openapi.vfs.VirtualFile)}. * If you want to check if the file is ignored use {@link com.intellij.openapi.fileTypes.FileTypeRegistry#isFileIgnored(com.intellij.openapi.vfs.VirtualFile)}. * If you want to check if the file or one of its parents is ignored use {@link #isUnderIgnored(com.intellij.openapi.vfs.VirtualFile)}. */ @Deprecated boolean isIgnored(@NotNull VirtualFile file); /** * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is * either excluded from the project or ignored by {@link com.intellij.openapi.fileTypes.FileTypeRegistry#isFileIgnored(com.intellij.openapi.vfs.VirtualFile)}). * * @param file the file to check. * @return true if <code>file</code> is excluded or ignored, false otherwise. */ boolean isExcluded(@NotNull VirtualFile file); /** * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is ignored * by {@link com.intellij.openapi.fileTypes.FileTypeRegistry#isFileIgnored(com.intellij.openapi.vfs.VirtualFile)}). * * @param file the file to check. * @return true if <code>file</code> is ignored, false otherwise. */ boolean isUnderIgnored(@NotNull VirtualFile file); }