diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java index 1be9e92ed..ab3846f0c 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/config/LanguageServerProperties.java @@ -17,6 +17,14 @@ public class LanguageServerProperties { */ private int standalonePort = 5007; + /** + * Extension id is a unique identifier associated with a type of language server. + * It is used to derive furether unique ids that should be 'scoped' to a particular + * language server. For example ids for vscode comands used to define code actions + * are derived by appending command names with this id. + */ + private String extensionId; + public boolean isStandalone() { return standalone; } @@ -32,4 +40,13 @@ public class LanguageServerProperties { public void setStandalonePort(int standalonePort) { this.standalonePort = standalonePort; } + + public String getExtensionId() { + return extensionId; + } + + public void setExtensionId(String extensionId) { + this.extensionId = extensionId; + } + } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index d7b6a98c7..ce8c7d1ab 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -183,6 +183,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA } public SimpleLanguageServer(String extensionId) { + Assert.isNotNull(extensionId); this.EXTENSION_ID = extensionId; this.CODE_ACTION_COMMAND_ID = "sts."+EXTENSION_ID+".codeAction"; } diff --git a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java index 61e17acf2..64db73ab5 100644 --- a/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java +++ b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java @@ -10,9 +10,8 @@ *******************************************************************************/ package org.springframework.ide.vscode.languageserver.starter; -import javax.inject.Provider; - import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -32,4 +31,9 @@ public class LanguageServerAutoconf { return new LanguageServerRunner(serverName, properties, languageServerFactory); } + @ConditionalOnMissingBean + @Bean public SimpleLanguageServer languageServer(LanguageServerProperties props) { + return new SimpleLanguageServer(props.getExtensionId()); + } + }