cleanup ProjectFileIndex#isInLibrary (following IDEA-CR-13327)
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / ProjectFileIndex.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.openapi.roots;
17
18 import com.intellij.openapi.components.ServiceManager;
19 import com.intellij.openapi.fileTypes.FileTypeRegistry;
20 import com.intellij.openapi.module.Module;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.openapi.vfs.VirtualFile;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.annotations.Nullable;
25
26 import java.util.List;
27
28 /**
29  * Provides information about files contained in a project.
30  *
31  * @see ProjectRootManager#getFileIndex()
32  */
33 public interface ProjectFileIndex extends FileIndex {
34   class SERVICE {
35     private SERVICE() { }
36
37     public static ProjectFileIndex getInstance(Project project) {
38       return ServiceManager.getService(project, ProjectFileIndex.class);
39     }
40   }
41
42   /**
43    * Returns module to which the specified file belongs.
44    *
45    * @param file the file for which the module is requested.
46    * @return the module instance or null if the file does not belong to content of any module.
47    */
48   @Nullable
49   Module getModuleForFile(@NotNull VirtualFile file);
50
51   /**
52    * Returns module to which the specified file belongs.
53    *
54    * @param file the file for which the module is requested.
55    * @param honorExclusion if {@code false} the containing module will be returned even if the file is located under a folder marked as excluded
56    * @return the module instance or null if the file does not belong to content of any module.
57    */
58   @Nullable
59   Module getModuleForFile(@NotNull VirtualFile file, boolean honorExclusion);
60
61   /**
62    * Returns the order entries which contain the specified file (either in CLASSES or SOURCES).
63    *
64    * @param file the file for which the order entries are requested.
65    * @return the array of order entries containing the file.
66    */
67   @NotNull
68   List<OrderEntry> getOrderEntriesForFile(@NotNull VirtualFile file);
69
70   /**
71    * Returns a classpath entry to which the specified file or directory belongs.
72    *
73    * @param file the file or directory for which the information is requested.
74    * @return the file for the classpath entry, or null if the file is not a compiled
75    *         class file or directory belonging to a library.
76    */
77   @Nullable
78   VirtualFile getClassRootForFile(@NotNull VirtualFile file);
79
80   /**
81    * Returns the module source root or library source root to which the specified file
82    * or directory belongs.
83    *
84    * @param file the file or directory for which the information is requested.
85    * @return the file for the source root, or null if the file is not located under any
86    *         of the source roots for the module.
87    */
88   @Nullable
89   VirtualFile getSourceRootForFile(@NotNull VirtualFile file);
90
91   /**
92    * Returns the module content root to which the specified file or directory belongs.
93    *
94    * @param file the file or directory for which the information is requested.
95    * @return the file for the content root, or null if the file does not belong to this project.
96    */
97   @Nullable
98   VirtualFile getContentRootForFile(@NotNull VirtualFile file);
99
100   /**
101    * Returns the module content root to which the specified file or directory belongs.
102    *
103    * @param file the file or directory for which the information is requested.
104    * @param honorExclusion if {@code false} the containing content root will be returned even if the file is located under a folder marked as excluded
105    * @return the file for the content root, or null if the file does not belong to this project.
106    */
107   @Nullable
108   VirtualFile getContentRootForFile(@NotNull VirtualFile file, final boolean honorExclusion);
109
110   /**
111    * Returns the name of the package corresponding to the specified directory.
112    *
113    * @param dir the directory for which the package name is requested.
114    * @return the package name, or null if the directory does not correspond to any package.
115    */
116   @Nullable
117   String getPackageNameByDirectory(@NotNull VirtualFile dir); //Q: move to FileIndex?
118
119   /**
120    * Returns true if <code>file</code> is a file which belongs to the classes (not sources) of some library.
121    *
122    * @param file the file to check.
123    * @return true if the file belongs to library classes, false otherwise.
124    */
125   boolean isLibraryClassFile(@NotNull VirtualFile file);
126
127   /**
128    * Returns true if <code>fileOrDir</code> is a file or directory from the content production/test source or library source.
129    *
130    * @param fileOrDir the file or directory to check.
131    * @return true if the file or directory belongs to project or library sources, false otherwise.
132    */
133   boolean isInSource(@NotNull VirtualFile fileOrDir);
134
135   /**
136    * Returns true if <code>fileOrDir</code> is a file or directory from library classes.
137    *
138    * @param fileOrDir the file or directory to check.
139    * @return true if the file belongs to library classes, false otherwise.
140    */
141   boolean isInLibraryClasses(@NotNull VirtualFile fileOrDir);
142
143   /**
144    * @return true if the file belongs to the classes or sources of a library added to dependencies of the project,
145    *         false otherwise
146    */
147   boolean isInLibrary(@NotNull VirtualFile fileOrDir);
148
149   /**
150    * Returns true if <code>fileOrDir</code> is a file or directory from library source.
151    *
152    * @param fileOrDir the file or directory to check.
153    * @return true if the file belongs to library sources, false otherwise.
154    */
155   boolean isInLibrarySource(@NotNull VirtualFile fileOrDir);
156
157   /**
158    * @deprecated name of this method may be confusing. If you want to check if the file is excluded or ignored use {@link #isExcluded(VirtualFile)}.
159    * If you want to check if the file is ignored use {@link FileTypeRegistry#isFileIgnored(VirtualFile)}.
160    * If you want to check if the file or one of its parents is ignored use {@link #isUnderIgnored(VirtualFile)}.
161    */
162   @Deprecated
163   boolean isIgnored(@NotNull VirtualFile file);
164
165   /**
166    * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is
167    * either excluded from the project or ignored by {@link FileTypeRegistry#isFileIgnored(VirtualFile)}).
168    *
169    * @param file the file to check.
170    * @return true if <code>file</code> is excluded or ignored, false otherwise.
171    */
172   boolean isExcluded(@NotNull VirtualFile file);
173
174   /**
175    * Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is ignored
176    * by {@link FileTypeRegistry#isFileIgnored(VirtualFile)}).
177    *
178    * @param file the file to check.
179    * @return true if <code>file</code> is ignored, false otherwise.
180    */
181   boolean isUnderIgnored(@NotNull VirtualFile file);
182 }