diff --git a/max_opened_projects/build.gradle b/max_opened_projects/build.gradle
index c61b2a0fe..f01cc9d93 100644
--- a/max_opened_projects/build.gradle
+++ b/max_opened_projects/build.gradle
@@ -6,7 +6,7 @@ plugins {
}
group 'org.intellij.sdk'
-version '2.0.0'
+version '2.1.0'
sourceCompatibility = 1.8
@@ -17,7 +17,7 @@ repositories {
// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
version '2019.3.3'
- updateSinceUntilBuild = false
+ sameSinceUntilBuild = true
}
patchPluginXml {
version = project.version
diff --git a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MaxProject.java b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MaxProject.java
deleted file mode 100644
index 5a419831e..000000000
--- a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MaxProject.java
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-
-package org.intellij.sdk.maxOpenPrj;
-
-import com.intellij.openapi.components.*;
-import com.intellij.openapi.project.*;
-import com.intellij.openapi.ui.Messages;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Created by IntelliJ IDEA.
- * User: Alexey.Chursin
- * Date: Aug 13, 2010
- * Time: 3:50:25 PM
- * To change this template use File | Settings | File Templates.
- */
-public class MaxProject implements ProjectComponent {
- public MaxProject(Project project) {
- }
-
- public void initComponent() {
- // TODO: insert component initialization logic here
- }
-
- public void disposeComponent() {
- // TODO: insert component disposal logic here
- }
-
- @NotNull
- public String getComponentName() {
- return "MaxProject";
- }
-
- public void projectOpened() {
- // called when project is opened
- MyCounter CommandCounter = ServiceManager.getService(MyCounter.class);
-
- if (CommandCounter.IncreaseCounter() == -1) {
- Messages.showMessageDialog(
- "The maximum number of opened projects exceeds " + String.valueOf(CommandCounter.MaxCount) +
- " projects!", "Error", Messages.getErrorIcon());
- ProjectManager PM = ProjectManager.getInstance();
- Project[] AllProjects = PM.getOpenProjects();
- Project project = AllProjects[AllProjects.length - 1];
- PM.closeProject(project);
- }
- }
-
-
- public void projectClosed() {
- // called when project is being closed
- MyCounter CommandCounter = ServiceManager.getService(MyCounter.class);
- CommandCounter.DecreaseCounter();
- }
-}
diff --git a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MyCounter.java b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MyCounter.java
deleted file mode 100644
index f8221f567..000000000
--- a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/MyCounter.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-
-package org.intellij.sdk.maxOpenPrj;
-
-/**
- * Created by IntelliJ IDEA.
- * User: Alexey.Chursin
- * Date: Aug 13, 2010
- * Time: 3:49:33 PM
- * To change this template use File | Settings | File Templates.
- */
-public class MyCounter {
- private int Count = 0;
- // Sets the maximum allowed number of opened projects.
- public final int MaxCount = 3;
-
- public MyCounter() {
-
-
- }
-
- public int IncreaseCounter() {
- Count++;
- return (Count > MaxCount) ? -1 : Count;
- }
-
- public int DecreaseCounter() {
- Count--;
- return (Count > MaxCount) ? -1 : Count;
- }
-
-}
diff --git a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectCountingService.java b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectCountingService.java
new file mode 100644
index 000000000..afce843f6
--- /dev/null
+++ b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectCountingService.java
@@ -0,0 +1,21 @@
+// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package org.intellij.sdk.maxOpenPrj;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.ProjectManager;
+
+/**
+ * Application service implementation to keep a running count of
+ * how many projects are open at a given time.
+ */
+public class ProjectCountingService {
+ // Sets the maximum allowed number of opened projects.
+ private final int MAX_OPEN_PRJ_LIMIT = 3;
+
+ public boolean projLimitExceeded() {
+ ProjectManager prjMgr = ProjectManager.getInstance();
+ return prjMgr.getOpenProjects().length > MAX_OPEN_PRJ_LIMIT;
+ }
+
+}
diff --git a/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectOpenListener.java b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectOpenListener.java
new file mode 100644
index 000000000..62d49c6fb
--- /dev/null
+++ b/max_opened_projects/src/main/java/org/intellij/sdk/maxOpenPrj/ProjectOpenListener.java
@@ -0,0 +1,38 @@
+// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+
+package org.intellij.sdk.maxOpenPrj;
+
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.ProjectManager;
+import com.intellij.openapi.project.ProjectManagerListener;
+import com.intellij.openapi.ui.Messages;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Listener to detect opening of projects.
+ */
+public class ProjectOpenListener implements ProjectManagerListener {
+
+ /**
+ * Invoked on project open.
+ *
+ * @param project opening project
+ */
+ @Override
+ public void projectOpened(@NotNull Project project) {
+ // Get the counting service
+ ProjectCountingService prjCountingSrvc = ServiceManager.getService(ProjectCountingService.class);
+ // See if the total # of projects violates the limit.
+ if (prjCountingSrvc.projLimitExceeded()) {
+ Messages.showMessageDialog(
+ "The number of open projects exceeds the SDK plugin max_opened_projects limit. Close at least one open project and try again.",
+ "Cannot open project \"" + project.getName() + "\"",
+ Messages.getErrorIcon());
+ ProjectManager prjMgr = ProjectManager.getInstance();
+ boolean closedSuccessfully = prjMgr.closeProject(project);
+ System.out.println(String.format("Project closing was %s", closedSuccessfully));
+ }
+ }
+
+}
diff --git a/max_opened_projects/src/main/resources/META-INF/plugin.xml b/max_opened_projects/src/main/resources/META-INF/plugin.xml
index ef621a3ff..b767d8652 100644
--- a/max_opened_projects/src/main/resources/META-INF/plugin.xml
+++ b/max_opened_projects/src/main/resources/META-INF/plugin.xml
@@ -8,11 +8,10 @@
SDK: Maximum Open Projects Sample
-
- 2.0.0
+
-
-
+
+
com.intellij.modules.platform
@@ -20,12 +19,13 @@
+ 2.1.0 Remove project component and use listener instead.
2.0.0 Convert to Gradle-based plugin.
1.0.0 Release 2018.3 and earlier.
@@ -35,14 +35,11 @@
IntelliJ Platform SDK
-
-
- org.intellij.sdk.maxOpenPrj.MaxProject
-
-
+
+
+
-
+
\ No newline at end of file