c9e27cd608982a58619be9641641e21d6c057767
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / ModuleRootModel.java
1 /*
2  * Copyright 2000-2014 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.module.Module;
19 import com.intellij.openapi.projectRoots.Sdk;
20 import com.intellij.openapi.vfs.VirtualFile;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
24
25 import java.util.List;
26 import java.util.Set;
27
28 /**
29  * Interface providing root information model for a given module.
30  * It's implemented by {@link ModuleRootManager}.
31  *
32  * @author dsl
33  */
34 public interface ModuleRootModel {
35   /**
36    * Returns the module to which the model belongs.
37    *
38    * @return the module instance.
39    */
40   @NotNull
41   Module getModule();
42
43   /**
44    * Use this method to obtain all content entries of a module. Entries are given in
45    * lexicographical order of their paths.
46    *
47    * @return list of content entries for this module
48    * @see ContentEntry
49    */
50   @NotNull
51   ContentEntry[] getContentEntries();
52
53   /**
54    * Use this method to obtain order of roots of a module. Order of entries is important.
55    *
56    * @return list of order entries for this module
57    */
58   @NotNull
59   OrderEntry[] getOrderEntries();
60
61   /**
62    * Returns the SDK used by the module.
63    *
64    * @return either module-specific or inherited SDK
65    * @see #isSdkInherited()
66    */
67   @Nullable
68   Sdk getSdk();
69
70   /**
71    * Returns {@code true} if SDK for this module is inherited from a project.
72    *
73    * @return true if the SDK is inherited, false otherwise
74    * @see ProjectRootManager#getProjectSdk()
75    * @see ProjectRootManager#setProjectSdk(Sdk)
76    */
77   boolean isSdkInherited();
78
79   /**
80    * Returns an array of content roots from all content entries.
81    *
82    * @return the array of content roots.
83    * @see #getContentEntries()
84    */
85   @NotNull
86   VirtualFile[] getContentRoots();
87
88   /**
89    * Returns an array of content root urls from all content entries.
90    *
91    * @return the array of content root URLs.
92    * @see #getContentEntries()
93    */
94   @NotNull
95   String[] getContentRootUrls();
96
97   /**
98    * Returns an array of exclude roots from all content entries.
99    *
100    * @return the array of excluded roots.
101    * @see #getContentEntries()
102    */
103   @NotNull
104   VirtualFile[] getExcludeRoots();
105
106   /**
107    * Returns an array of exclude root urls from all content entries.
108    *
109    * @return the array of excluded root URLs.
110    * @see #getContentEntries()
111    */
112   @NotNull
113   String[] getExcludeRootUrls();
114
115   /**
116    * Returns an array of source roots from all content entries.
117    *
118    * @return the array of source roots.
119    * @see #getContentEntries()
120    * @see #getSourceRoots(boolean)
121    */
122   @NotNull
123   VirtualFile[] getSourceRoots();
124
125   /**
126    * Returns an array of source roots from all content entries.
127    *
128    * @param includingTests determines whether test source roots should be included in the result
129    * @return the array of source roots.
130    * @see #getContentEntries()
131    */
132   @NotNull
133   VirtualFile[] getSourceRoots(boolean includingTests);
134
135   /**
136    * Return a list of source roots of the specified type.
137    *
138    * @param rootType type of source roots
139    * @return list of source roots
140    */
141   @NotNull
142   List<VirtualFile> getSourceRoots(@NotNull JpsModuleSourceRootType<?> rootType);
143
144   /**
145    * Return a list of source roots which types belong to the specified set.
146    *
147    * @param rootTypes types of source roots
148    * @return list of source roots
149    */
150   @NotNull
151   List<VirtualFile> getSourceRoots(@NotNull Set<? extends JpsModuleSourceRootType<?>> rootTypes);
152
153   /**
154    * Returns an array of source root urls from all content entries.
155    *
156    * @return the array of source root URLs.
157    * @see #getContentEntries()
158    * @see #getSourceRootUrls(boolean)
159    */
160   @NotNull
161   String[] getSourceRootUrls();
162
163   /**
164    * Returns an array of source root urls from all content entries.
165    *
166    * @param includingTests determines whether test source root urls should be included in the result
167    * @return the array of source root URLs.
168    * @see #getContentEntries()
169    */
170   @NotNull
171   String[] getSourceRootUrls(boolean includingTests);
172
173   /**
174    * Passes all order entries in the module to the specified visitor.
175    *
176    * @param policy       the visitor to accept.
177    * @param initialValue the default value to be returned by the visit process.
178    * @return the value returned by the visitor.
179    * @see OrderEntry#accept(RootPolicy, Object)
180    */
181   <R> R processOrder(@NotNull RootPolicy<R> policy, R initialValue);
182
183   /**
184    * Returns {@link OrderEnumerator} instance which can be used to process order entries of the module (with or without dependencies) and
185    * collect classes or source roots.
186    *
187    * @return {@link OrderEnumerator} instance
188    */
189   @NotNull
190   OrderEnumerator orderEntries();
191
192   /**
193    * Returns list of module names <i>this module</i> depends on.
194    *
195    * @return the list of module names this module depends on.
196    */
197   @NotNull
198   String[] getDependencyModuleNames();
199
200   <T> T getModuleExtension(@NotNull Class<T> klass);
201
202   @NotNull
203   Module[] getModuleDependencies();
204
205   @NotNull
206   Module[] getModuleDependencies(boolean includeTests);
207 }