Revert "prefer to use JDK utils in low-level classes, do not extend DynamicBundle...
[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.ApiStatus;
22 import org.jetbrains.annotations.NotNull;
23 import org.jetbrains.annotations.Nullable;
24 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
25
26 import java.util.List;
27 import java.util.Set;
28
29 /**
30  * Interface providing root information model for a given module.
31  * It's implemented by {@link ModuleRootManager}.
32  *
33  * @author dsl
34  */
35 @ApiStatus.NonExtendable
36 public interface ModuleRootModel {
37   /**
38    * Returns the module to which the model belongs.
39    *
40    * @return the module instance.
41    */
42   @NotNull
43   Module getModule();
44
45   /**
46    * Use this method to obtain all content entries of a module. Entries are given in
47    * lexicographical order of their paths.
48    *
49    * @return list of content entries for this module
50    * @see ContentEntry
51    */
52   ContentEntry @NotNull [] getContentEntries();
53
54   /**
55    * Use this method to obtain order of roots of a module. Order of entries is important.
56    *
57    * @return list of order entries for this module
58    */
59   OrderEntry @NotNull [] 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   VirtualFile @NotNull [] getContentRoots();
86
87   /**
88    * Returns an array of content root urls from all content entries.
89    *
90    * @return the array of content root URLs.
91    * @see #getContentEntries()
92    */
93   String @NotNull [] getContentRootUrls();
94
95   /**
96    * Returns an array of exclude roots from all content entries.
97    *
98    * @return the array of excluded roots.
99    * @see #getContentEntries()
100    */
101   VirtualFile @NotNull [] getExcludeRoots();
102
103   /**
104    * Returns an array of exclude root urls from all content entries.
105    *
106    * @return the array of excluded root URLs.
107    * @see #getContentEntries()
108    */
109   String @NotNull [] getExcludeRootUrls();
110
111   /**
112    * Returns an array of source roots from all content entries.
113    *
114    * @return the array of source roots.
115    * @see #getContentEntries()
116    * @see #getSourceRoots(boolean)
117    */
118   @NotNull VirtualFile @NotNull [] getSourceRoots();
119
120   /**
121    * Returns an array of source roots from all content entries.
122    *
123    * @param includingTests determines whether test source roots should be included in the result
124    * @return the array of source roots.
125    * @see #getContentEntries()
126    */
127   VirtualFile @NotNull [] getSourceRoots(boolean includingTests);
128
129   /**
130    * Return a list of source roots of the specified type.
131    *
132    * @param rootType type of source roots
133    * @return list of source roots
134    */
135   @NotNull
136   List<VirtualFile> getSourceRoots(@NotNull JpsModuleSourceRootType<?> rootType);
137
138   /**
139    * Return a list of source roots which types belong to the specified set.
140    *
141    * @param rootTypes types of source roots
142    * @return list of source roots
143    */
144   @NotNull
145   List<VirtualFile> getSourceRoots(@NotNull Set<? extends JpsModuleSourceRootType<?>> rootTypes);
146
147   /**
148    * Returns an array of source root urls from all content entries.
149    *
150    * @return the array of source root URLs.
151    * @see #getContentEntries()
152    * @see #getSourceRootUrls(boolean)
153    */
154   String @NotNull [] getSourceRootUrls();
155
156   /**
157    * Returns an array of source root urls from all content entries.
158    *
159    * @param includingTests determines whether test source root urls should be included in the result
160    * @return the array of source root URLs.
161    * @see #getContentEntries()
162    */
163   String @NotNull [] getSourceRootUrls(boolean includingTests);
164
165   /**
166    * Passes all order entries in the module to the specified visitor.
167    *
168    * @param policy       the visitor to accept.
169    * @param initialValue the default value to be returned by the visit process.
170    * @return the value returned by the visitor.
171    * @see OrderEntry#accept(RootPolicy, Object)
172    */
173   <R> R processOrder(@NotNull RootPolicy<R> policy, R initialValue);
174
175   /**
176    * Returns {@link OrderEnumerator} instance which can be used to process order entries of the module (with or without dependencies) and
177    * collect classes or source roots.
178    *
179    * @return {@link OrderEnumerator} instance
180    */
181   @NotNull
182   OrderEnumerator orderEntries();
183
184   /**
185    * Returns list of module names <i>this module</i> depends on.
186    *
187    * @return the list of module names this module depends on.
188    */
189   String @NotNull [] getDependencyModuleNames();
190
191   <T> T getModuleExtension(@NotNull Class<T> klass);
192
193   Module @NotNull [] getModuleDependencies();
194
195   Module @NotNull [] getModuleDependencies(boolean includeTests);
196 }