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