Remove boto3 from suggested stub packages (PY-40997)
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / roots / ProjectRootManager.java
1 /*
2  * Copyright 2000-2015 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.project.Project;
20 import com.intellij.openapi.projectRoots.Sdk;
21 import com.intellij.openapi.projectRoots.SdkTypeId;
22 import com.intellij.openapi.util.SimpleModificationTracker;
23 import com.intellij.openapi.vfs.VirtualFile;
24 import org.jetbrains.annotations.ApiStatus;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27 import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
28
29 import java.util.Collection;
30 import java.util.List;
31 import java.util.Set;
32
33 /**
34  * Allows to query and modify the list of root files and directories belonging to a project.
35  */
36 @ApiStatus.NonExtendable
37 public abstract class ProjectRootManager extends SimpleModificationTracker {
38   /**
39    * Returns the project root manager instance for the specified project.
40    *
41    * @param project the project for which the instance is requested.
42    * @return the instance.
43    */
44   public static ProjectRootManager getInstance(@NotNull Project project) {
45     return project.getComponent(ProjectRootManager.class);
46   }
47
48   /**
49    * Returns the file index for the project.
50    *
51    * @return the file index instance.
52    */
53   @NotNull
54   public abstract ProjectFileIndex getFileIndex();
55
56   /**
57    * Creates new enumerator instance to process dependencies of all modules in the project. Only first level dependencies of
58    * modules are processed so {@link OrderEnumerator#recursively()} option is ignored and {@link OrderEnumerator#withoutDepModules()} option is forced
59    * @return new enumerator instance
60    */
61   @NotNull
62   public abstract OrderEnumerator orderEntries();
63
64   /**
65    * Creates new enumerator instance to process dependencies of several modules in the project. Caching is not supported for this enumerator
66    * @param modules modules to process
67    * @return new enumerator instance
68    */
69   @NotNull
70   public abstract OrderEnumerator orderEntries(@NotNull Collection<? extends Module> modules);
71
72   /**
73    * Unlike getContentRoots(), this includes the project base dir. Is this really necessary?
74    * TODO: remove this method?
75    */
76   public abstract VirtualFile @NotNull [] getContentRootsFromAllModules();
77
78   /**
79    * Returns the list of content root URLs for all modules in the project.
80    *
81    * @return the list of content root URLs.
82    */
83   @NotNull
84   public abstract List<String> getContentRootUrls();
85
86     /**
87     * Returns the list of content roots for all modules in the project.
88     *
89     * @return the list of content roots.
90     */
91   public abstract VirtualFile @NotNull [] getContentRoots();
92
93   /**
94    * Returns the list of source roots under the content roots for all modules in the project.
95    *
96    * @return the list of content source roots.
97    */
98   public abstract VirtualFile @NotNull [] getContentSourceRoots();
99
100   /**
101    * Returns the list of source roots from all modules which types belong to the specified set
102    *
103    * @param rootTypes types of source roots
104    * @return list of source roots
105    */
106   @NotNull
107   public abstract List<VirtualFile> getModuleSourceRoots(@NotNull Set<? extends JpsModuleSourceRootType<?>> rootTypes);
108
109   /**
110    * @return the instance of the JDK selected for the project or null
111    * if the name of the selected JDK does not correspond to any existing JDK instance
112    */
113   @Nullable
114   public abstract Sdk getProjectSdk();
115
116   /**
117    * @return the name of the SDK selected for the project
118    */
119   @Nullable
120   public abstract String getProjectSdkName();
121
122   /**
123    * @return the SDK type name (@link {@link SdkTypeId#getName()} of the current Project SDK
124    */
125   @Nullable
126   public abstract String getProjectSdkTypeName();
127
128   /**
129    * Sets the SDK to be used for the project.
130    *
131    * @param sdk the SDK instance.
132    */
133   public abstract void setProjectSdk(@Nullable Sdk sdk);
134
135   /**
136    * @deprecated use {@link #setProjectSdk(Sdk)} or {@link #setProjectSdkName(String, String)}
137    */
138   @Deprecated
139   public abstract void setProjectSdkName(@NotNull String name);
140
141   /**
142    * Sets the name of the JDK to be used for the project
143    * @param sdkTypeName the {@link SdkTypeId#getName()} of the SDK type
144    */
145   public abstract void setProjectSdkName(@NotNull String name, @NotNull String sdkTypeName);
146 }