From d52b374d26afe14baa8507a37a532929761512da Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 22 Dec 2022 16:53:16 +0100 Subject: [PATCH] GH-925: do not use LS wrapper internal API to start boot ls to not run into frequent restarts --- .../tooling/boot/ls/Startup.java | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java index 2c5b251a1..fbc84c8d0 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Startup.java @@ -13,7 +13,6 @@ package org.springframework.tooling.boot.ls; import java.io.IOException; import java.util.List; -import org.eclipse.lsp4e.LanguageServerWrapper; import org.eclipse.lsp4e.LanguageServersRegistry; import org.eclipse.lsp4e.LanguageServersRegistry.LanguageServerDefinition; import org.eclipse.lsp4e.LanguageServiceAccessor; @@ -25,33 +24,26 @@ import org.springframework.tooling.jdt.ls.commons.Logger; public class Startup implements IStartup { private static final String BOOT_LS_DEFINITION_ID = "org.eclipse.languageserver.languages.springboot"; - - private LanguageServerWrapper lsWrapper = null; + private boolean started; @Override public void earlyStartup() { if (BootLanguageServerPlugin.getDefault().getPreferenceStore().getBoolean(Constants.PREF_START_LS_EARLY)) { + new BootProjectTracker(Logger.forEclipsePlugin(() -> BootLanguageServerPlugin.getDefault()), List.of(springProjects -> { - if (springProjects.isEmpty()) { - if (lsWrapper != null) { - lsWrapper.stop(); - lsWrapper = null; - } - } else { - if (lsWrapper == null) { - LanguageServerDefinition serverDefinition = LanguageServersRegistry.getInstance() - .getDefinition(BOOT_LS_DEFINITION_ID); - try { - lsWrapper = LanguageServiceAccessor.getLSWrapper( - springProjects.iterator().next().getProject(), serverDefinition); - lsWrapper.start(); - } catch (IOException e1) { - BootLanguageServerPlugin.getDefault().getLog() - .error("Failed to launch Boot Language Server", e1); - } + if (!started && !springProjects.isEmpty()) { + LanguageServerDefinition serverDefinition = LanguageServersRegistry.getInstance() + .getDefinition(BOOT_LS_DEFINITION_ID); + + try { + LanguageServiceAccessor.startLanguageServer(serverDefinition); + started = true; + } catch (IOException e1) { + BootLanguageServerPlugin.getDefault().getLog().error("Failed to launch Boot Language Server", e1); } + } })); }