more stuff that doesn't yet compile
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / ProjectFileIndex.java
1 /*
2  * Copyright 2000-2009 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.module.Module;
20 import com.intellij.openapi.project.Project;
21 import com.intellij.openapi.vfs.VirtualFile;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.annotations.Nullable;
24
25 import java.util.List;
26
27 /**
28  * Provides information about files contained in a project.
29  *
30  * @see ProjectRootManager#getFileIndex()
31  */
32 public interface ProjectFileIndex extends FileIndex {
33   class SERVICE {
34     private SERVICE() {
35     }
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 the order entries which contain the specified file (either in CLASSES or SOURCES).
53    *
54    * @param file the file for which the order entries are requested.
55    * @return the array of order entries containing the file.
56    */
57   @NotNull
58   List<OrderEntry> getOrderEntriesForFile(@NotNull VirtualFile file);
59
60   /**
61    * Returns a classpath entry to which the specified file or directory belongs.
62    *
63    * @param file the file or directory for which the information is requested.
64    * @return the file for the classpath entry, or null if the file is not a compiled
65    *         class file or directory belonging to a library.
66    */
67   @Nullable
68   VirtualFile getClassRootForFile(@NotNull VirtualFile file);
69
70   /**
71    * Returns the module source root or library source root to which the specified file
72    * or directory belongs.
73    *
74    * @param file the file or directory for which the information is requested.
75    * @return the file for the source root, or null if the file is not located under any
76    *         of the source roots for the module.
77    */
78   @Nullable
79   VirtualFile getSourceRootForFile(@NotNull VirtualFile file);
80
81   /**
82    * Returns the module content root to which the specified file or directory belongs.
83    *
84    * @param file the file or directory for which the information is requested.
85    * @return the file for the content root, or null if the file does not belong to this project.
86    */
87   @Nullable
88   VirtualFile getContentRootForFile(@NotNull VirtualFile file);
89
90   /**
91    * Returns the name of the package corresponding to the specified directory.
92    *
93    * @param dir the directory for which the package name is requested.
94    * @return the package name, or null if the directory does not correspond to any package.
95    */
96   @Nullable
97   String getPackageNameByDirectory(@NotNull VirtualFile dir); //Q: move to FileIndex?
98
99   /**
100    * Returns true if <code>file</code> is a compiled class file which belongs to some library.
101    *
102    * @param file the file to check.
103    * @return true if the file belongs to library classes, false otherwise.
104    */
105   boolean isLibraryClassFile(@NotNull VirtualFile file);
106
107   /**
108    * Returns true if <code>fileOrDir</code> is a file or directory from the content source or library sources.
109    *
110    * @param fileOrDir the file or directory to check.
111    * @return true if the file or directory belongs to project or library sources, false otherwise.
112    */
113   boolean isInSource(@NotNull VirtualFile fileOrDir);
114
115   /**
116    * Returns true if <code>fileOrDir</code> is a file or directory from library classes.
117    *
118    * @param fileOrDir the file or directory to check.
119    * @return true if the file belongs to library classes, false otherwise.
120    */
121   boolean isInLibraryClasses(@NotNull VirtualFile fileOrDir);
122
123   /**
124    * Returns true if <code>fileOrDir</code> is a file or directory from library source.
125    *
126    * @param fileOrDir the file or directory to check.
127    * @return true if the file belongs to library sources, false otherwise.
128    */
129   boolean isInLibrarySource(@NotNull VirtualFile fileOrDir);
130
131   /**
132    * Checks if the specified file or directory is ignored (either excluded by exclude roots
133    * or ignored by {@link com.intellij.openapi.fileTypes.FileTypeManager#isFileIgnored(String)}).
134    *
135    * @param file the file to check.
136    * @return true if <code>file</code> is ignored, false otherwise.
137    */
138   boolean isIgnored(@NotNull VirtualFile file);
139 }