diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/LanguageServersRegistry.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/LanguageServersRegistry.java index 29ee9bf5c..882255e1a 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/LanguageServersRegistry.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/LanguageServersRegistry.java @@ -38,6 +38,9 @@ public class LanguageServersRegistry { public abstract static class LanguageServerDefinition { + enum Scope { + project, application + } private static final int DEFAULT_LAST_DOCUMENTED_DISCONNECTED_TIMEOUT = 5; public final @Nonnull @@ -51,13 +54,16 @@ public abstract static class LanguageServerDefinition { public final int lastDocumentDisconnectedTimeout; private boolean enabled; - public LanguageServerDefinition(@Nonnull String id, @Nonnull String label, String description, boolean isSingleton, Integer lastDocumentDisconnectedTimeout) { + final @Nonnull Scope scope; + + public LanguageServerDefinition(@Nonnull String id, @Nonnull String label, String description, boolean isSingleton, Integer lastDocumentDisconnectedTimeout, String scope) { this.id = id; this.label = label; this.description = description; this.isSingleton = isSingleton; this.lastDocumentDisconnectedTimeout = lastDocumentDisconnectedTimeout != null && lastDocumentDisconnectedTimeout > 0 ? lastDocumentDisconnectedTimeout : DEFAULT_LAST_DOCUMENTED_DISCONNECTED_TIMEOUT; this.languageIdMappings = new ConcurrentHashMap<>(); + this.scope = scope == null || scope.isBlank()? Scope.application : Scope.valueOf(scope); setEnabled(true); } @@ -108,7 +114,7 @@ static class ExtensionLanguageServerDefinition extends LanguageServerDefinition private final ServerExtensionPointBean extension; public ExtensionLanguageServerDefinition(ServerExtensionPointBean element) { - super(element.id, element.label, element.description, element.singleton, element.lastDocumentDisconnectedTimeout); + super(element.id, element.label, element.description, element.singleton, element.lastDocumentDisconnectedTimeout, element.scope); this.extension = element; } @@ -120,8 +126,11 @@ public StreamConnectionProvider createConnectionProvider(Project project) { "Exception occurred while creating an instance of the stream connection provider, you have to define server/@class attribute in the extension point."); //$NON-NLS-1$ } try { - return (StreamConnectionProvider) project.instantiateClass(extension.getServerImpl(), - extension.getPluginDescriptor().getPluginId()); + if (Scope.project == scope) { + return (StreamConnectionProvider) project.instantiateClassWithConstructorInjection(extension.getServerImpl(), project, + extension.getPluginDescriptor().getPluginId()); + } + return (StreamConnectionProvider) project.instantiateClass(extension.getServerImpl(), extension.getPluginDescriptor().getPluginId()); } catch (Exception e) { throw new RuntimeException( "Exception occurred while creating an instance of the stream connection provider", e); //$NON-NLS-1$ diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/ServerExtensionPointBean.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/ServerExtensionPointBean.java index 1b948face..f711dd1dc 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/ServerExtensionPointBean.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/ServerExtensionPointBean.java @@ -31,6 +31,14 @@ public class ServerExtensionPointBean extends BaseKeyedLazyInstanceproject and application
+ * When project scope is selected, the implementation of {@link StreamConnectionProvider} requires a + * constructor with a single {@link com.intellij.openapi.project.Project} parameter + */ + @Attribute("scope") + public String scope; + @Attribute("singleton") public boolean singleton; diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleToolWindowPanel.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleToolWindowPanel.java index 73083060f..5fbc6e29e 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleToolWindowPanel.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleToolWindowPanel.java @@ -170,19 +170,20 @@ private void configureToolbar(JComponent consoleComponent) { private JComponent createDetailPanel(LanguageServerTreeNode key) { LanguageServersRegistry.LanguageServerDefinition serverDefinition = key.getServerDefinition(); + Project project = LSPConsoleToolWindowPanel.this.project; ComboBox serverTraceComboBox = new ComboBox<>(new DefaultComboBoxModel<>(ServerTrace.values())); - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings initialSettings = UserDefinedLanguageServerSettings.getInstance().getLanguageServerSettings(serverDefinition.id); + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings initialSettings = UserDefinedLanguageServerSettings.getInstance(project).getLanguageServerSettings(serverDefinition.id); if (initialSettings != null && initialSettings.getServerTrace() != null) { serverTraceComboBox.setSelectedItem(initialSettings.getServerTrace()); } serverTraceComboBox.addItemListener(event -> { ServerTrace serverTrace = (ServerTrace) event.getItem(); - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance().getLanguageServerSettings(serverDefinition.id); + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(project).getLanguageServerSettings(serverDefinition.id); if (settings == null) { settings = new UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings(); } settings.setServerTrace(serverTrace); - UserDefinedLanguageServerSettings.getInstance().setLanguageServerSettings(serverDefinition.id, settings); + UserDefinedLanguageServerSettings.getInstance(project).setLanguageServerSettings(serverDefinition.id, settings); }); return FormBuilder.createFormBuilder() .setFormLeftIndent(10) diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleView.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleView.java index e91bd29b0..c70194714 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleView.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/LSPConsoleView.java @@ -110,7 +110,7 @@ protected void updateFoldings(int startLine, int endLine) { * @return true if language server settings is configured with "verbose" level trace for the language server and false otherwise. */ private boolean canApplyFolding() { - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance().getLanguageServerSettings(serverDefinition.id); + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(getProject()).getLanguageServerSettings(serverDefinition.id); if (settings == null) { return false; } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/explorer/LanguageServerExplorerLifecycleListener.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/explorer/LanguageServerExplorerLifecycleListener.java index f62d7f2a9..c507a57bc 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/explorer/LanguageServerExplorerLifecycleListener.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/console/explorer/LanguageServerExplorerLifecycleListener.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4ij.console.explorer; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.project.Project; import com.redhat.devtools.intellij.lsp4ij.ServerStatus; import com.redhat.devtools.intellij.lsp4ij.settings.ServerTrace; import com.redhat.devtools.intellij.lsp4ij.LanguageServerWrapper; @@ -56,7 +57,7 @@ public void handleLSPMessage(Message message, MessageConsumer messageConsumer, L return; } LanguageServerProcessTreeNode processTreeNode = updateServerStatus(languageServer, null, false); - ServerTrace serverTrace = getServerTrace(languageServer.serverDefinition.id); + ServerTrace serverTrace = getServerTrace(explorer.getProject(), languageServer.serverDefinition.id); if (serverTrace == ServerTrace.off) { return; } @@ -93,9 +94,9 @@ private TracingMessageConsumer getLSPRequestCacheFor(LanguageServerWrapper langu } - private static ServerTrace getServerTrace(String languageServerId) { + private static ServerTrace getServerTrace(Project project, String languageServerId) { ServerTrace serverTrace = null; - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance().getLanguageServerSettings(languageServerId); + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(project).getLanguageServerSettings(languageServerId); if (settings != null) { serverTrace = settings.getServerTrace(); } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/server/JavaProcessCommandBuilder.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/server/JavaProcessCommandBuilder.java index 014207d39..c52ea6745 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/server/JavaProcessCommandBuilder.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/server/JavaProcessCommandBuilder.java @@ -10,6 +10,7 @@ ******************************************************************************/ package com.redhat.devtools.intellij.lsp4ij.server; +import com.intellij.openapi.project.Project; import com.redhat.devtools.intellij.lsp4ij.settings.UserDefinedLanguageServerSettings; import java.io.File; @@ -32,10 +33,10 @@ public class JavaProcessCommandBuilder { private String cp; - public JavaProcessCommandBuilder(String languageId) { + public JavaProcessCommandBuilder(Project project, String languageId) { this.languageId = languageId; setJavaPath(computeJavaPath()); - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance().getLanguageServerSettings(languageId); + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(project).getLanguageServerSettings(languageId); if (settings != null) { setDebugPort(settings.getDebugPort()); setDebugSuspend(settings.isDebugSuspend()); diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerConfigurable.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerConfigurable.java index 1d574d7c4..5dcc83ca1 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerConfigurable.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerConfigurable.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4ij.settings; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.NlsContexts; @@ -33,12 +34,14 @@ public class LanguageServerConfigurable extends NamedConfigurable { private final LanguageServersRegistry.LanguageServerDefinition languageServerDefinition; + private final Project project; private LanguageServerView myView; - public LanguageServerConfigurable(LanguageServersRegistry.LanguageServerDefinition languageServerDefinition, Runnable updater) { + public LanguageServerConfigurable(LanguageServersRegistry.LanguageServerDefinition languageServerDefinition, Runnable updater, Project project) { super(false, updater); this.languageServerDefinition = languageServerDefinition; + this.project = project; } @Override @@ -77,7 +80,7 @@ public JComponent createOptionsPanel() { @Override public boolean isModified() { - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance() + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(project) .getLanguageServerSettings(languageServerDefinition.id); if (settings == null) { return true; @@ -93,13 +96,13 @@ public void apply() throws ConfigurationException { settings.setDebugPort(myView.getDebugPort()); settings.setDebugSuspend(myView.isDebugSuspend()); settings.setServerTrace(myView.getServerTrace()); - UserDefinedLanguageServerSettings.getInstance().setLanguageServerSettings(languageServerDefinition.id, settings); + UserDefinedLanguageServerSettings.getInstance(project).setLanguageServerSettings(languageServerDefinition.id, settings); } @Override public void reset() { ServerTrace serverTrace = ServerTrace.off; - UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance() + UserDefinedLanguageServerSettings.LanguageServerDefinitionSettings settings = UserDefinedLanguageServerSettings.getInstance(project) .getLanguageServerSettings(languageServerDefinition.id); if (settings != null) { myView.setDebugPort(settings.getDebugPort()); diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurable.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurable.java index 73f6323b9..306338ccd 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurable.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurable.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4ij.settings; import com.intellij.openapi.options.SearchableConfigurable; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MasterDetailsComponent; import com.intellij.openapi.util.NlsContexts; import com.intellij.ui.TreeUIHelper; @@ -41,12 +42,14 @@ public class LanguageServerListConfigurable extends MasterDetailsComponent imple @NonNls private static final String ID = "LanguageServers"; + private final Project project; private final Set languageServeDefinitions; private boolean isTreeInitialized; - public LanguageServerListConfigurable(Set languageServeDefinitions) { - this.languageServeDefinitions = languageServeDefinitions; + public LanguageServerListConfigurable(Project project) { + this.project = project; + this.languageServeDefinitions = LanguageServersRegistry.getInstance().getAllDefinitions(); } @Override @@ -83,7 +86,7 @@ protected void initTree() { } private MyNode addLanguageServerDefinitionNode(LanguageServersRegistry.LanguageServerDefinition languageServerDefinition) { - MyNode node = new MyNode(new LanguageServerConfigurable(languageServerDefinition, TREE_UPDATER)); + MyNode node = new MyNode(new LanguageServerConfigurable(languageServerDefinition, TREE_UPDATER, project)); addNode(node, myRoot); return node; } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurableProvider.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurableProvider.java deleted file mode 100644 index 676602db1..000000000 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/LanguageServerListConfigurableProvider.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023 Red Hat Inc. and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - * Contributors: - * Red Hat Inc. - initial API and implementation - *******************************************************************************/ -package com.redhat.devtools.intellij.lsp4ij.settings; - -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableProvider; -import com.redhat.devtools.intellij.lsp4ij.LanguageServersRegistry; -import org.jetbrains.annotations.NotNull; - -import java.util.Set; - -/** - * Language server list UI settings provider. - */ -public class LanguageServerListConfigurableProvider extends ConfigurableProvider { - - @Override - public boolean canCreateConfigurable() { - return !getLanguageServeDefinitions().isEmpty(); - } - - @Override - public Configurable createConfigurable() { - return new LanguageServerListConfigurable(getLanguageServeDefinitions()); - } - - private static @NotNull Set getLanguageServeDefinitions() { - return LanguageServersRegistry.getInstance().getAllDefinitions(); - } -} diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/UserDefinedLanguageServerSettings.java b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/UserDefinedLanguageServerSettings.java index c7783d245..a05df067d 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/UserDefinedLanguageServerSettings.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4ij/settings/UserDefinedLanguageServerSettings.java @@ -13,12 +13,12 @@ *******************************************************************************/ package com.redhat.devtools.intellij.lsp4ij.settings; -import com.intellij.openapi.components.PersistentStateComponent; -import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.components.State; -import com.intellij.openapi.components.Storage; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.components.*; +import com.intellij.openapi.project.Project; import com.intellij.util.xmlb.annotations.Tag; import com.intellij.util.xmlb.annotations.XCollection; +import com.redhat.devtools.intellij.lsp4ij.LanguageServiceAccessor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,14 +36,14 @@ */ @State( name = "LanguageServerSettingsState", - storages = {@Storage("LanguageServersSettings.xml")} + storages = @Storage("LanguageServersSettings.xml") ) public class UserDefinedLanguageServerSettings implements PersistentStateComponent { - public volatile MyState myState = new MyState(); + private volatile MyState myState = new MyState(); - public static UserDefinedLanguageServerSettings getInstance() { - return ServiceManager.getService(UserDefinedLanguageServerSettings.class); + public static UserDefinedLanguageServerSettings getInstance(@NotNull Project project) { + return project.getService(UserDefinedLanguageServerSettings.class); } @Nullable @@ -98,7 +98,7 @@ public void setServerTrace(ServerTrace serverTrace) { } } - static class MyState { + public static class MyState { @Tag("state") @XCollection public Map myState = new TreeMap<>(); diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/MicroProfileConfigurable.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/MicroProfileConfigurable.java index a81c51b59..cb7502ac7 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/MicroProfileConfigurable.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/MicroProfileConfigurable.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4mp4ij.settings; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.NlsContexts; import com.redhat.devtools.intellij.lsp4mp4ij.MicroProfileBundle; @@ -27,7 +28,7 @@ public class MicroProfileConfigurable extends NamedConfigurable myChangeHandlers = ContainerUtil.createConcurrentList(); - public static UserDefinedMicroProfileSettings getInstance() { - return ServiceManager.getService(UserDefinedMicroProfileSettings.class); + public static @NotNull UserDefinedMicroProfileSettings getInstance(@NotNull Project project) { + return project.getService(UserDefinedMicroProfileSettings.class); } public void addChangeHandler(Runnable runnable) { diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurable.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurable.java index 0aa24bf8c..4fc82b548 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurable.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurable.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4mp4ij.settings.java; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.NlsContexts; import com.redhat.devtools.intellij.lsp4mp4ij.MicroProfileBundle; @@ -27,17 +28,16 @@ */ public class MicroProfileJavaConfigurable extends NamedConfigurable { - private final UserDefinedMicroProfileSettings myMicroProfileSettings; + private final Project project; private MicroProfileJavaView myView; - private String myDisplayName; - public MicroProfileJavaConfigurable(UserDefinedMicroProfileSettings microProfileSettings) { - this.myMicroProfileSettings = microProfileSettings; + public MicroProfileJavaConfigurable(Project project) { + this.project = project; } @Override public UserDefinedMicroProfileSettings getEditableObject() { - return myMicroProfileSettings; + return UserDefinedMicroProfileSettings.getInstance(project); } @Override @@ -55,7 +55,6 @@ public JComponent createOptionsPanel() { @Override public void setDisplayName(String name) { - myDisplayName = name; } @Override @@ -66,24 +65,21 @@ public void setDisplayName(String name) { @Override public void reset() { if (myView == null) return; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); myView.setUrlCodeLensEnabled(settings.isUrlCodeLensEnabled()); } @Override public boolean isModified() { if (myView == null) return false; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); - if (settings == null) { - return true; - } + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); return !(myView.isUrlCodeLensEnabled()== settings.isUrlCodeLensEnabled()); } @Override public void apply() throws ConfigurationException { if (myView == null) return; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); settings.setUrlCodeLensEnabled(myView.isUrlCodeLensEnabled()); settings.fireStateChanged(); } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurableProvider.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurableProvider.java deleted file mode 100644 index 9cf64bf84..000000000 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/java/MicroProfileJavaConfigurableProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023 Red Hat Inc. and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - * Contributors: - * Red Hat Inc. - initial API and implementation - *******************************************************************************/ -package com.redhat.devtools.intellij.lsp4mp4ij.settings.java; - -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableProvider; -import com.redhat.devtools.intellij.lsp4mp4ij.settings.UserDefinedMicroProfileSettings; -import com.redhat.devtools.intellij.lsp4mp4ij.settings.java.MicroProfileJavaConfigurable; - -/** - * MicroProfile UI settings provider for Java file. - */ -public class MicroProfileJavaConfigurableProvider extends ConfigurableProvider { - - @Override - public Configurable createConfigurable() { - return new MicroProfileJavaConfigurable(UserDefinedMicroProfileSettings.getInstance()); - } - - @Override - public boolean canCreateConfigurable() { - return true; - } - -} diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurable.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurable.java index b2ff82d92..f24577b82 100644 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurable.java +++ b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurable.java @@ -14,6 +14,7 @@ package com.redhat.devtools.intellij.lsp4mp4ij.settings.properties; import com.intellij.openapi.options.ConfigurationException; +import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.NlsContexts; import com.redhat.devtools.intellij.lsp4ij.settings.UserDefinedLanguageServerSettings; @@ -27,17 +28,17 @@ */ public class MicroProfilePropertiesConfigurable extends NamedConfigurable { - private final UserDefinedMicroProfileSettings myMicroProfileSettings; + private final Project project; private MicroProfilePropertiesView myView; private String myDisplayName; - public MicroProfilePropertiesConfigurable(UserDefinedMicroProfileSettings microProfileSettings) { - this.myMicroProfileSettings = microProfileSettings; + public MicroProfilePropertiesConfigurable(Project project) { + this.project = project; } @Override public UserDefinedMicroProfileSettings getEditableObject() { - return myMicroProfileSettings; + return UserDefinedMicroProfileSettings.getInstance(project); } @Override @@ -66,14 +67,14 @@ public void setDisplayName(String name) { @Override public void reset() { if (myView == null) return; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); myView.setInlayHintEnabled(settings.isInlayHintEnabled()); } @Override public boolean isModified() { if (myView == null) return false; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); if (settings == null) { return true; } @@ -83,7 +84,7 @@ public boolean isModified() { @Override public void apply() throws ConfigurationException { if (myView == null) return; - UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(); + UserDefinedMicroProfileSettings settings = UserDefinedMicroProfileSettings.getInstance(project); settings.setInlayHintEnabled(myView.isInlayHintEnabled()); settings.fireStateChanged(); } diff --git a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurableProvider.java b/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurableProvider.java deleted file mode 100644 index d6039f829..000000000 --- a/src/main/java/com/redhat/devtools/intellij/lsp4mp4ij/settings/properties/MicroProfilePropertiesConfigurableProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2023 Red Hat Inc. and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 - * which is available at https://www.apache.org/licenses/LICENSE-2.0. - * - * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 - * - * Contributors: - * Red Hat Inc. - initial API and implementation - *******************************************************************************/ -package com.redhat.devtools.intellij.lsp4mp4ij.settings.properties; - -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurableProvider; -import com.redhat.devtools.intellij.lsp4mp4ij.settings.UserDefinedMicroProfileSettings; -import com.redhat.devtools.intellij.lsp4mp4ij.settings.properties.MicroProfilePropertiesConfigurable; - -/** - * MicroProfile UI settings provider for Properties file. - */ -public class MicroProfilePropertiesConfigurableProvider extends ConfigurableProvider { - - @Override - public Configurable createConfigurable() { - return new MicroProfilePropertiesConfigurable(UserDefinedMicroProfileSettings.getInstance()); - } - - @Override - public boolean canCreateConfigurable() { - return true; - } - -} 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 08f3863d5..7219484b3 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 @@ -48,19 +48,19 @@ public QuarkusLanguageClient(Project project) { connection = project.getMessageBus().connect(project); connection.subscribe(ClasspathResourceChangedManager.TOPIC, this); // Track MicroProfile settings changed to push them to the language server with LSP didChangeConfiguration. - UserDefinedMicroProfileSettings.getInstance().addChangeHandler(getDidChangeConfigurationListener()); + UserDefinedMicroProfileSettings.getInstance(project).addChangeHandler(getDidChangeConfigurationListener()); } @Override public void dispose() { super.dispose(); connection.disconnect(); - UserDefinedMicroProfileSettings.getInstance().removeChangeHandler(getDidChangeConfigurationListener()); + UserDefinedMicroProfileSettings.getInstance(getProject()).removeChangeHandler(getDidChangeConfigurationListener()); } @Override protected Object createSettings() { - return UserDefinedMicroProfileSettings.getInstance().toSettingsForMicroProfileLS(); + return UserDefinedMicroProfileSettings.getInstance(getProject()).toSettingsForMicroProfileLS(); } private void sendPropertiesChangeEvent(List scope, Set uris) { diff --git a/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusServer.java b/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusServer.java index 033bd8889..3f24a2047 100644 --- a/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusServer.java +++ b/src/main/java/com/redhat/devtools/intellij/quarkus/lsp/QuarkusServer.java @@ -13,6 +13,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManager; import com.intellij.openapi.extensions.PluginId; +import com.intellij.openapi.project.Project; import com.redhat.devtools.intellij.quarkus.TelemetryService; import com.redhat.devtools.intellij.lsp4ij.server.JavaProcessCommandBuilder; import com.redhat.devtools.intellij.lsp4ij.server.ProcessStreamConnectionProvider; @@ -30,12 +31,15 @@ */ public class QuarkusServer extends ProcessStreamConnectionProvider { - public QuarkusServer() { + private final Project project; + + public QuarkusServer(Project project) { + this.project = project; IdeaPluginDescriptor descriptor = PluginManager.getPlugin(PluginId.getId("com.redhat.devtools.intellij.quarkus")); File lsp4mpServerPath = new File(descriptor.getPath(), "lib/server/org.eclipse.lsp4mp.ls-uber.jar"); File quarkusServerPath = new File(descriptor.getPath(), "lib/server/com.redhat.quarkus.ls.jar"); - List commands = new JavaProcessCommandBuilder("quarkus") + List commands = new JavaProcessCommandBuilder(project,"quarkus") .setJar(lsp4mpServerPath.getAbsolutePath()) .setCp(quarkusServerPath.getAbsolutePath()) .create(); @@ -49,7 +53,7 @@ public QuarkusServer() { public Object getInitializationOptions(URI rootUri) { Map root = new HashMap<>(); - Map settings = UserDefinedMicroProfileSettings.getInstance().toSettingsForMicroProfileLS(); + Map settings = UserDefinedMicroProfileSettings.getInstance(project).toSettingsForMicroProfileLS(); root.put("settings", settings); Map extendedClientCapabilities = new HashMap<>(); diff --git a/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteServer.java b/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteServer.java index 4dd6d4806..a999a8a12 100644 --- a/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteServer.java +++ b/src/main/java/com/redhat/devtools/intellij/qute/lsp/QuteServer.java @@ -13,6 +13,7 @@ import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.ide.plugins.PluginManager; import com.intellij.openapi.extensions.PluginId; +import com.intellij.openapi.project.Project; import com.redhat.devtools.intellij.quarkus.TelemetryService; import com.redhat.devtools.intellij.lsp4ij.server.JavaProcessCommandBuilder; import com.redhat.devtools.intellij.lsp4ij.server.ProcessStreamConnectionProvider; @@ -29,11 +30,11 @@ */ public class QuteServer extends ProcessStreamConnectionProvider { - public QuteServer() { + public QuteServer(Project project) { IdeaPluginDescriptor descriptor = PluginManager.getPlugin(PluginId.getId("com.redhat.devtools.intellij.quarkus")); File quteServerPath = new File(descriptor.getPath(), "lib/server/com.redhat.qute.ls-uber.jar"); - List commands = new JavaProcessCommandBuilder("qute") + List commands = new JavaProcessCommandBuilder(project, "qute") .setJar(quteServerPath.getAbsolutePath()) .create(); commands.add("-DrunAsync=true"); diff --git a/src/main/resources/META-INF/lsp4ij-quarkus.xml b/src/main/resources/META-INF/lsp4ij-quarkus.xml index 0c56d7f04..1919422b3 100644 --- a/src/main/resources/META-INF/lsp4ij-quarkus.xml +++ b/src/main/resources/META-INF/lsp4ij-quarkus.xml @@ -6,7 +6,8 @@ label="Tools for MicroProfile" class="com.redhat.devtools.intellij.quarkus.lsp.QuarkusServer" clientImpl="com.redhat.devtools.intellij.quarkus.lsp.QuarkusLanguageClient" - serverInterface="org.eclipse.lsp4mp.ls.api.MicroProfileLanguageServerAPI"> + serverInterface="org.eclipse.lsp4mp.ls.api.MicroProfileLanguageServerAPI" + scope="project"> MicroProfile language server provides MicroProfile support in:
    @@ -24,22 +25,23 @@ - - + - + - + + diff --git a/src/main/resources/META-INF/lsp4ij-qute.xml b/src/main/resources/META-INF/lsp4ij-qute.xml index 68a5f5633..4d7b16516 100644 --- a/src/main/resources/META-INF/lsp4ij-qute.xml +++ b/src/main/resources/META-INF/lsp4ij-qute.xml @@ -6,7 +6,8 @@ label="Qute support" class="com.redhat.devtools.intellij.qute.lsp.QuteServer" clientImpl="com.redhat.devtools.intellij.qute.lsp.QuteLanguageClient" - serverInterface="com.redhat.qute.ls.api.QuteLanguageServerAPI"> + serverInterface="com.redhat.qute.ls.api.QuteLanguageServerAPI" + scope="project"> Qute language server provides Qute support in:
      diff --git a/src/main/resources/META-INF/lsp4ij.xml b/src/main/resources/META-INF/lsp4ij.xml index 859a15e23..3753131af 100644 --- a/src/main/resources/META-INF/lsp4ij.xml +++ b/src/main/resources/META-INF/lsp4ij.xml @@ -12,12 +12,13 @@ - - +