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