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