Add statistics for venv created from requirements.txt/setup.py/environment.yml/pipfil...
[idea/community.git] / platform / projectModel-api / src / com / intellij / openapi / project / ProjectManager.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.Disposable;
5 import com.intellij.openapi.application.ApplicationManager;
6 import com.intellij.util.messages.Topic;
7 import org.jdom.JDOMException;
8 import org.jetbrains.annotations.ApiStatus;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
11
12 import java.io.IOException;
13 import java.nio.file.Path;
14
15 /**
16  * Provides project management.
17  */
18 @ApiStatus.NonExtendable
19 public abstract class ProjectManager {
20   @Topic.AppLevel
21   public static final Topic<ProjectManagerListener> TOPIC = new Topic<>(ProjectManagerListener.class);
22
23   /**
24    * @return {@code ProjectManager} instance
25    */
26   public static ProjectManager getInstance() {
27     return ApplicationManager.getApplication().getService(ProjectManager.class);
28   }
29
30   public static @Nullable ProjectManager getInstanceIfCreated() {
31     return ApplicationManager.getApplication().getServiceIfCreated(ProjectManager.class);
32   }
33
34   /**
35    * @deprecated Use {@link #TOPIC} instead
36    */
37   @Deprecated
38   public abstract void addProjectManagerListener(@NotNull ProjectManagerListener listener);
39
40   public abstract void addProjectManagerListener(@NotNull VetoableProjectManagerListener listener);
41
42   /**
43    * @deprecated Use {@link #TOPIC} instead
44    */
45   @Deprecated
46   public abstract void addProjectManagerListener(@NotNull ProjectManagerListener listener, @NotNull Disposable parentDisposable);
47
48   /**
49    * @deprecated Use {@link #TOPIC} instead
50    */
51   @Deprecated
52   public abstract void removeProjectManagerListener(@NotNull ProjectManagerListener listener);
53
54   public abstract void removeProjectManagerListener(@NotNull VetoableProjectManagerListener listener);
55
56   /**
57    * Adds listener to the specified project.
58    *
59    * @param project  project to add listener to
60    * @param listener listener to add
61    */
62   public abstract void addProjectManagerListener(@NotNull Project project, @NotNull ProjectManagerListener listener);
63
64   /**
65    * Removes listener from the specified project.
66    *
67    * @param project  project to remove listener from
68    * @param listener listener to remove
69    */
70   public abstract void removeProjectManagerListener(@NotNull Project project, @NotNull ProjectManagerListener listener);
71
72   /**
73    * Returns the list of currently opened projects.
74    * {@link Project#isDisposed()} must be checked for each project before use (if the whole operation is not under read action).
75    */
76   public abstract @NotNull Project @NotNull [] getOpenProjects();
77
78   /**
79    * Returns the project which is used as a template for new projects. The template project
80    * is always available, even when no other project is open. This {@link Project} instance is not
81    * supposed to be used for anything except template settings storage.<p/>
82    *
83    * NB: default project can be lazy loaded
84    *
85    * @return the template project instance.
86    */
87   public abstract @NotNull Project getDefaultProject();
88
89   /**
90    * Loads and opens a project with the specified path. If the project file is from an older IDEA
91    * version, prompts the user to convert it to the latest version. If the project file is from a
92    * newer version, shows a message box telling the user that the load failed.
93    *
94    * @param filePath the .ipr file path
95    * @return the opened project file, or null if the project failed to load because of version mismatch
96    *         or because the project is already open.
97    * @throws IOException          if the project file was not found or failed to read
98    * @throws JDOMException        if the project file contained invalid XML
99    */
100   public abstract @Nullable Project loadAndOpenProject(@NotNull String filePath) throws IOException, JDOMException;
101
102   /**
103    * Save, close and dispose project. Please note that only the project will be saved, but not the application.
104    * @return true on success
105    */
106   public abstract boolean closeAndDispose(@NotNull Project project);
107
108   /**
109    * @deprecated Use {@link #closeAndDispose}
110    */
111   @Deprecated
112   public abstract boolean closeProject(@NotNull Project project);
113
114   /**
115    * Asynchronously reloads the specified project.
116    *
117    * @param project the project to reload.
118    */
119   @SuppressWarnings("unused")
120   public abstract void reloadProject(@NotNull Project project);
121
122   /**
123    * @deprecated Use {@link com.intellij.openapi.project.ex.ProjectManagerEx#newProject(Path, com.intellij.ide.impl.OpenProjectTask)}
124    */
125   @Deprecated
126   public abstract @Nullable Project createProject(@Nullable String name, @NotNull String path);
127 }