handle(TextDocumentPositionParams position) {
- return findDefinitions(position)
- .collect(Collectors.toList()).block();
- }
-
- /**
- * This is meant to be overridden by subclass. This method provides a simple implementation
- * of 'goto definition' (which is not one you probably want to use in practice, but it
- * might be usful just to test whether things are wired up correctly to make the
- * 'goto definition' action in vscode work.
- *
- * The implementation provided here simply looks for the first occurrence of the word
- * currently pointed at in the current document using String.indexOf.
- */
- protected Flux findDefinitions(TextDocumentPositionParams params) {
+ public List handle(TextDocumentPositionParams params) {
try {
TextDocument doc = server.getTextDocumentService().get(params);
if (doc != null) {
@@ -68,20 +54,17 @@ public class SimpleDefinitionFinder implements D
String text = doc.get();
int def = text.indexOf(word);
if (def>=0) {
- return Flux.just(
- new Location(params.getTextDocument().getUri(),
- doc.toRange(def, word.length())
- )
- )
- .doOnNext((Location loc) -> {
- Log.log("definition: "+loc);
- });
+ Location loc = new Location(params.getTextDocument().getUri(),
+ doc.toRange(def, word.length())
+ );
+ Log.log("definition: "+loc);
+ return ImmutableList.of(loc);
}
}
} catch (Exception e) {
Log.log(e);
}
- return Flux.empty();
+ return Collections.emptyList();
}
}
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 4375bc31d..d7b6a98c7 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
@@ -144,7 +144,11 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
private Map commands = new HashMap<>();
- private AsyncRunner async = new AsyncRunner(Schedulers.newSingle("SimpleLanguaserver main thread"));
+ private AsyncRunner async = new AsyncRunner(Schedulers.newSingle(runable -> {
+ Thread t = new Thread(runable, "SimpleLanguaserver main thread");
+ t.setDaemon(true);
+ return t;
+ }));
private ClasspathListenerManager classpathListenerManager;
@Override
@@ -214,7 +218,7 @@ public class SimpleLanguageServer implements Sts4LanguageServer, LanguageClientA
@Override
public CompletableFuture initialize(InitializeParams params) {
- Log.debug("Initializing: "+params);
+ log.info("Initializing: "+params);
// multi-root workspace handling
List workspaceFolders = getWorkspaceFolders(params);
diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/AsyncRunner.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/AsyncRunner.java
index 7c18da400..546f4d547 100644
--- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/AsyncRunner.java
+++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/AsyncRunner.java
@@ -18,7 +18,6 @@ import org.slf4j.Logger;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Scheduler;
-import reactor.core.scheduler.Schedulers;
public class AsyncRunner {
diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/LogRedirect.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/LogRedirect.java
index 1200c15cc..893e6f619 100644
--- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/LogRedirect.java
+++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/LogRedirect.java
@@ -17,12 +17,24 @@ import java.io.PrintStream;
public class LogRedirect {
+ public static void bootRedirectToFile(String name) throws IOException {
+ String logfilePath = System.getProperty("sts.log.file");
+ if (StringUtil.hasText(logfilePath)) {
+ File logfile = new File(logfilePath);
+ System.err.println("Redirecting log output to: "+logfile);
+ PrintStream logFile = new PrintStream(new FileOutputStream(logfile, false));
+ System.setErr(logFile);
+ System.setOut(logFile); //Spring boot actually logs on sysout instead of syserr.
+ }
+ }
+
public static void redirectToFile(String name) throws IOException {
String logfilePath = System.getProperty("sts.log.file");
if (StringUtil.hasText(logfilePath)) {
File logfile = new File(logfilePath);
System.err.println("Redirecting log output to: "+logfile);
- System.setErr(new PrintStream(new FileOutputStream(logfile, false)));
+ PrintStream logFile = new PrintStream(new FileOutputStream(logfile, false));
+ System.setErr(logFile);
}
}
diff --git a/headless-services/commons/language-server-starter/pom.xml b/headless-services/commons/language-server-starter/pom.xml
new file mode 100644
index 000000000..c8e0212c3
--- /dev/null
+++ b/headless-services/commons/language-server-starter/pom.xml
@@ -0,0 +1,28 @@
+
+ 4.0.0
+ language-server-starter
+ language-server-starter
+ Spring Boot Starter for building Language Server
+
+
+ org.springframework.ide.vscode
+ commons-parent
+ 1.1.0-SNAPSHOT
+ ../pom.xml
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.ide.vscode
+ commons-language-server
+ ${project.version}
+
+
+
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
new file mode 100644
index 000000000..41e5d874d
--- /dev/null
+++ b/headless-services/commons/language-server-starter/src/main/java/org/springframework/ide/vscode/languageserver/starter/LanguageServerAutoconf.java
@@ -0,0 +1,28 @@
+package org.springframework.ide.vscode.languageserver.starter;
+
+import javax.inject.Provider;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.ide.vscode.commons.languageserver.LaunguageServerApp;
+import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
+
+@Configuration
+public class LanguageServerAutoconf {
+
+ @Bean public LaunguageServerApp serverApp(
+ @Qualifier("serverName") String serverName,
+ Provider languageServerFactory
+ ) {
+ return new LaunguageServerApp(serverName, languageServerFactory);
+ }
+
+ @Bean public CommandLineRunner serverStarter(LaunguageServerApp serverApp) {
+ return args -> {
+ serverApp.startAsync();
+ };
+ }
+
+}
diff --git a/headless-services/commons/pom.xml b/headless-services/commons/pom.xml
index bf496f260..ef8c8e2cf 100644
--- a/headless-services/commons/pom.xml
+++ b/headless-services/commons/pom.xml
@@ -9,6 +9,12 @@
1.1.0-SNAPSHOT
commons-parent
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.5.RELEASE
+
+
commons-language-server
language-server-test-harness
@@ -20,6 +26,8 @@
commons-maven
commons-gradle
commons-boot-app-cli
+
+ language-server-starter
@@ -74,14 +82,13 @@
1.17
4.11
3.5.2
- 1.7.22
+ 1.7.25
19.0
1.10.19
2.5.0
2.10
0.4.0-SNAPSHOT
3.2.7
- 2.0.4.RELEASE
3.8.0.RELEASE
3.1.5.RELEASE
@@ -111,11 +118,11 @@
slf4j-api
${slf4j-version}