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