027415a70e6c6ba087023f9488189c37891a37be
[idea/community.git] / platform / core-api / src / com / intellij / openapi / project / Project.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.project;
3
4 import com.intellij.openapi.components.ComponentManager;
5 import com.intellij.openapi.extensions.AreaInstance;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import org.jetbrains.annotations.NotNull;
8 import org.jetbrains.annotations.Nullable;
9 import org.jetbrains.annotations.SystemDependent;
10 import org.jetbrains.annotations.SystemIndependent;
11
12 /**
13  * An object representing an IntelliJ project.
14  *
15  * <p>To get all of its modules, use {@code ModuleManager.getInstance(project).getModules()}.
16  *
17  * <p>To iterate over all project source files and directories,
18  * use {@code ProjectFileIndex.SERVICE.getInstance(project).iterateContent(iterator)}.
19  *
20  * <p>To get the list of all open projects, use {@code ProjectManager.getInstance().getOpenProjects()}.
21  */
22 public interface Project extends ComponentManager, AreaInstance {
23   String DIRECTORY_STORE_FOLDER = ".idea";
24
25   /**
26    * Returns a name ot the project. For a directory-based project it's an arbitrary string specified by user at project creation
27    * or later in a project settings. For a file-based project it's a name of a project file without extension.
28    *
29    * @return project name
30    */
31   @NotNull
32   String getName();
33
34   /**
35    * Returns a project base directory - a parent directory of a {@code .ipr} file or {@code .idea} directory.<br/>
36    * Returns {@code null} for default project.
37    *
38    * @see com.intellij.openapi.project.ProjectUtil#guessProjectDir
39    * @see #getBasePath()
40    *
41    * @deprecated No such concept as "project root". Project consists of module set, each has own content root set.
42    */
43   @Deprecated
44   VirtualFile getBaseDir();
45
46   /**
47    * Returns a path to a project base directory (see {@linkplain #getBaseDir()}).<br/>
48    * Returns {@code null} for default project.
49    *
50    * @see com.intellij.openapi.project.ProjectUtil#guessProjectDir
51    */
52   @Nullable
53   @SystemIndependent
54   String getBasePath();
55
56   /**
57    * Returns project descriptor file:
58    * <ul>
59    *   <li>{@code path/to/project/project.ipr} - for file-based projects</li>
60    *   <li>{@code path/to/project/.idea/misc.xml} - for directory-based projects</li>
61    * </ul>
62    * Returns {@code null} for default project.
63    *
64    * @return project descriptor file, or null for default project
65    */
66   @Nullable
67   VirtualFile getProjectFile();
68
69   /**
70    * @return a path to project file (see {@linkplain #getProjectFile()}) or {@code null} for default project.
71    */
72   @Nullable
73   @SystemIndependent
74   String getProjectFilePath();
75
76   /**
77    * Returns presentable project path:
78    * {@linkplain #getProjectFilePath()} for file-based projects, {@linkplain #getBasePath()} for directory-based ones.<br/>
79    * Returns {@code null} for default project.
80    * <b>Note:</b> the word "presentable" here implies file system presentation, not a UI one.
81    */
82   @Nullable
83   @SystemDependent
84   default String getPresentableUrl() {
85     return null;
86   }
87
88   /**
89    * <p>Returns a workspace file:
90    * <ul>
91    *   <li>{@code path/to/project/project.iws} - for file-based projects</li>
92    *   <li>{@code path/to/project/.idea/workspace.xml} - for directory-based ones</li>
93    * </ul>
94    * Returns {@code null} for default project.
95    *
96    * @return workspace file, or null for default project
97    */
98   @Nullable
99   VirtualFile getWorkspaceFile();
100
101   @NotNull
102   String getLocationHash();
103
104   void save();
105
106   boolean isOpen();
107
108   boolean isInitialized();
109
110   default boolean isDefault() {
111     return false;
112   }
113 }