blob: fdae3317e74ec370266578f577a0f9ce765daf06 [file] [log] [blame]
/*
* 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.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
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);
/**
* 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 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);
}