From 7b869fd7b19d02862e03c1f3e29369a724eab44a Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 24 Apr 2024 10:51:23 +0200 Subject: [PATCH] fix: use plugin disposable instead of project Signed-off-by: Fred Bricon --- .../ClasspathResourceChangedManager.java | 7 ++-- .../PsiMicroProfileProjectManager.java | 3 +- .../quarkus/QuarkusDeploymentSupport.java | 2 +- .../quarkus/QuarkusPluginDisposable.java | 28 +++++++++++++++ .../quarkus/QuarkusProjectService.java | 2 +- .../quarkus/lsp/QuarkusLanguageClient.java | 7 ++-- .../run/QuarkusRunConfigurationManager.java | 5 ++- .../intellij/qute/lsp/QuteLanguageClient.java | 5 ++- .../messages/LanguageServerBundle.properties | 36 ------------------- 9 files changed, 47 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusPluginDisposable.java delete mode 100644 src/main/resources/messages/LanguageServerBundle.properties diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/classpath/ClasspathResourceChangedManager.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/classpath/ClasspathResourceChangedManager.java index 58236fd60..741f91e6a 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/classpath/ClasspathResourceChangedManager.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/classpath/ClasspathResourceChangedManager.java @@ -25,6 +25,7 @@ import com.intellij.psi.PsiManager; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.messages.Topic; +import com.redhat.devtools.intellij.quarkus.QuarkusPluginDisposable; import org.jetbrains.annotations.NotNull; import java.util.Set; @@ -35,7 +36,7 @@ * * * ClasspathResourceChangeManager.Listener myListener = ... - * project.getMessageBus().connect(project).subscribe(ClasspathResourceChangeManager.TOPIC, myListener); + * project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)).subscribe(ClasspathResourceChangeManager.TOPIC, myListener); * * * @@ -72,7 +73,7 @@ public ClasspathResourceChangedManager(Project project) { // Send source files changed in debounce mode this.resourceChangedNotifier = new ClasspathResourceChangedNotifier(project); listener = new ClasspathResourceChangedListener(this); - projectConnection = project.getMessageBus().connect(); + projectConnection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); // Track end of Java libraries update LibraryTablesRegistrar.getInstance().getLibraryTable(project).addListener(listener); // Track update of Psi Java, properties files @@ -80,7 +81,7 @@ public ClasspathResourceChangedManager(Project project) { // Track modules changes projectConnection.subscribe(ProjectTopics.MODULES, listener); // Track delete, create, update of file - appConnection = ApplicationManager.getApplication().getMessageBus().connect(project); + appConnection = ApplicationManager.getApplication().getMessageBus().connect(QuarkusPluginDisposable.getInstance()); appConnection.subscribe(VirtualFileManager.VFS_CHANGES, listener); } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/project/PsiMicroProfileProjectManager.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/project/PsiMicroProfileProjectManager.java index f143d08b2..77a1bab18 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/project/PsiMicroProfileProjectManager.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/psi/core/project/PsiMicroProfileProjectManager.java @@ -20,6 +20,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.messages.MessageBusConnection; import com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedManager; +import com.redhat.devtools.intellij.quarkus.QuarkusPluginDisposable; import org.jetbrains.annotations.NotNull; import java.util.Set; @@ -84,7 +85,7 @@ private void evict(Module javaProject) { private PsiMicroProfileProjectManager(Project project) { this.project = project; microprofileProjectListener = new MicroProfileProjectListener(); - connection = project.getMessageBus().connect(project); + connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); connection.subscribe(ClasspathResourceChangedManager.TOPIC, microprofileProjectListener); connection.subscribe(ProjectTopics.MODULES, microprofileProjectListener); } diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java index ed41db7fc..544c6af54 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusDeploymentSupport.java @@ -64,7 +64,7 @@ public static QuarkusDeploymentSupport getInstance(@NotNull Project project) { public QuarkusDeploymentSupport(Project project) { this.project = project; - connection = project.getMessageBus().connect(project); + connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); connection.subscribe(ClasspathResourceChangedManager.TOPIC, this); } diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusPluginDisposable.java b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusPluginDisposable.java new file mode 100644 index 000000000..08cd579db --- /dev/null +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusPluginDisposable.java @@ -0,0 +1,28 @@ +// 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. +package com.redhat.devtools.intellij.quarkus; + +import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.components.Service; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; + +/** + * The service is intended to be used instead of a project/application as a parent disposable. + * + * copied from https://github.com/JetBrains/intellij-community/blob/idea/241.14494.240/python/openapi/src/com/jetbrains/python/PythonPluginDisposable.java + */ +@Service({Service.Level.APP, Service.Level.PROJECT}) +public final class QuarkusPluginDisposable implements Disposable { + public static @NotNull Disposable getInstance() { + return ApplicationManager.getApplication().getService(QuarkusPluginDisposable.class); + } + + public static @NotNull Disposable getInstance(@NotNull Project project) { + return project.getService(QuarkusPluginDisposable.class); + } + + @Override + public void dispose() { + } +} \ No newline at end of file diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusProjectService.java b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusProjectService.java index b3fd5f294..39693236d 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusProjectService.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/QuarkusProjectService.java @@ -52,7 +52,7 @@ public static QuarkusProjectService getInstance(@NotNull Project project) { private final MessageBusConnection connection; public QuarkusProjectService(Project project) { - connection = project.getMessageBus().connect(); + connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); connection.subscribe(ClasspathResourceChangedManager.TOPIC, this); } diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusLanguageClient.java b/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusLanguageClient.java index 17158761e..8a30793d1 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusLanguageClient.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusLanguageClient.java @@ -17,6 +17,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.profile.ProfileChangeAdapter; @@ -32,6 +33,7 @@ import com.redhat.devtools.intellij.lsp4mp4ij.settings.UserDefinedMicroProfileSettings; import com.redhat.devtools.intellij.quarkus.QuarkusDeploymentSupport; import com.redhat.devtools.intellij.quarkus.QuarkusModuleUtil; +import com.redhat.devtools.intellij.quarkus.QuarkusPluginDisposable; import com.redhat.devtools.lsp4ij.JSONUtils; import com.redhat.devtools.lsp4ij.client.CoalesceByKey; import com.redhat.devtools.lsp4ij.client.IndexAwareLanguageClient; @@ -59,10 +61,11 @@ public class QuarkusLanguageClient extends IndexAwareLanguageClient implements M public QuarkusLanguageClient(Project project) { super(project); - // Call Quarkus deployment support here to react on library changed (to evict quarkus deploiement cache) before + // Call Quarkus deployment support here to react on library changed (to evict quarkus deployment cache) before // sending an LSP microprofile/propertiesChanged notifications + Disposer.register(QuarkusPluginDisposable.getInstance(project), this); QuarkusDeploymentSupport.getInstance(project); - connection = project.getMessageBus().connect(project); + connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); connection.subscribe(ClasspathResourceChangedManager.TOPIC, this); inspectionsInfo = MicroProfileInspectionsInfo.getMicroProfileInspectionInfo(project); connection.subscribe(ProfileChangeAdapter.TOPIC, this); diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/run/QuarkusRunConfigurationManager.java b/src/main/java/com/redhat/devtools/intellij/quarkus/run/QuarkusRunConfigurationManager.java index 656e9d877..f997fcf39 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/run/QuarkusRunConfigurationManager.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/run/QuarkusRunConfigurationManager.java @@ -17,12 +17,11 @@ import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.dashboard.RunDashboardManager; import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.util.concurrency.NonUrgentExecutor; import com.intellij.util.messages.MessageBusConnection; import com.redhat.devtools.intellij.quarkus.QuarkusModuleUtil; +import com.redhat.devtools.intellij.quarkus.QuarkusPluginDisposable; import com.redhat.devtools.intellij.quarkus.buildtool.BuildToolDelegate; import com.redhat.devtools.intellij.quarkus.buildtool.ProjectImportListener; import com.redhat.devtools.intellij.quarkus.settings.UserDefinedQuarkusSettings; @@ -92,7 +91,7 @@ public QuarkusRunConfigurationManager(Project project) { @NotNull private MessageBusConnection addProjectImportListener(Project project) { - MessageBusConnection connection = project.getMessageBus().connect(); + MessageBusConnection connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); ProjectImportListener listener = new ProjectImportListener() { @Override diff --git a/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java b/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java index b40fa5ec4..4e42da15f 100644 --- a/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java +++ b/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteLanguageClient.java @@ -17,10 +17,12 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.profile.ProfileChangeAdapter; import com.intellij.util.messages.MessageBusConnection; +import com.redhat.devtools.intellij.quarkus.QuarkusPluginDisposable; import com.redhat.devtools.lsp4ij.client.CoalesceByKey; import com.redhat.devtools.lsp4ij.client.IndexAwareLanguageClient; import com.redhat.devtools.intellij.lsp4mp4ij.classpath.ClasspathResourceChangedManager; @@ -54,7 +56,8 @@ public class QuteLanguageClient extends IndexAwareLanguageClient implements Qute public QuteLanguageClient(Project project) { super(project); - connection = project.getMessageBus().connect(project); + Disposer.register(QuarkusPluginDisposable.getInstance(project), this); + connection = project.getMessageBus().connect(QuarkusPluginDisposable.getInstance(project)); connection.subscribe(ClasspathResourceChangedManager.TOPIC, this); inspectionsInfo = QuteInspectionsInfo.getQuteInspectionsInfo(project); connection.subscribe(ProfileChangeAdapter.TOPIC, this); diff --git a/src/main/resources/messages/LanguageServerBundle.properties b/src/main/resources/messages/LanguageServerBundle.properties deleted file mode 100644 index 78c45f58c..000000000 --- a/src/main/resources/messages/LanguageServerBundle.properties +++ /dev/null @@ -1,36 +0,0 @@ -############################################################################### -# Copyright (c) 2023 Red Hat Inc. and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v2.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v20.html -# -# SPDX-License-Identifier: EPL-2.0 -# -# Contributors: -# Red Hat Inc. - initial API and implementation -############################################################################### - -## Language Servers UI settings page -language.servers=Language Servers -language.server.debug.port=Debug port: -language.server.debug.suspend=Suspend and wait for a debugger? -language.server.trace=Trace: - -## LSP console -lsp.console.title=LSP Consoles -action.lsp.console.explorer.restart.text=Restart -action.lsp.console.explorer.restart.description=Restart the language server -action.lsp.console.explorer.stop.text=Stop -action.lsp.console.explorer.stop.description=Stop and disable the language server -action.lsp.console.explorer.pause.text=Pause -action.lsp.console.explorer.pause.description=Pause the language server -action.lsp.console.explorer.copy.command.text=Copy Start Command -action.lsp.console.explorer.copy.command.description=Copy the command which starts the language server -action.lsp.console.folding.text=Collapse/Expand All - -## Dialog -lsp.create.file.confirm.dialog.title=Create file? -lsp.create.file.confirm.dialog.message=Unable to open file ''{0}''. Do you want to create it? -lsp.create.file.error.dialog.title=Create file problem -lsp.create.file.error.dialog.message=Error while creating file ''{0}'' : ''{1}''. \ No newline at end of file