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