Kris De Volder
2018-07-06 12:31:45 -07:00
parent 78f2d3c716
commit ffe5675bcb
2 changed files with 19 additions and 16 deletions

View File

@@ -31,23 +31,26 @@ import org.springframework.tooling.ls.eclipse.commons.console.preferences.Langua
public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConnectionProvider {
private static LanguageServerProcessReaper processReaper = new LanguageServerProcessReaper();
private Supplier<Console> consoles = null;
public STS4LanguageServerProcessStreamConnector(ServerInfo server) {
this.consoles = LanguageServerConsoles.getConsoleFactory(server);
}
@Override
public void start() throws IOException {
super.start();
Process process = LanguageServerProcessReaper.getProcess(this);
processReaper.addProcess(process);
if (consoles!=null) {
forwardTo(getLanguageServerLog(), consoles.get().out);
Console console = consoles.get();
if (console!=null) {
forwardTo(getLanguageServerLog(), console.out);
}
}
}
@Override
protected ProcessBuilder createProcessBuilder() {
if (consoles==null) {
@@ -59,7 +62,7 @@ public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConne
//builder.redirectError(ProcessBuilder.Redirect.INHERIT);
return builder;
}
private void forwardTo(InputStream is, OutputStream os) {
Job consoleJob = new Job("Forward Language Server log output to console") {
@Override
@@ -78,7 +81,7 @@ public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConne
}
return Status.OK_STATUS;
}
void pipe(InputStream input, OutputStream output) throws IOException {
try {
byte[] buf = new byte[1024*4];
@@ -101,15 +104,15 @@ public class STS4LanguageServerProcessStreamConnector extends ProcessStreamConne
private InputStream getLanguageServerLog() {
return super.getErrorStream();
}
@Override
public void stop() {
super.stop();
processReaper.removeProcess(LanguageServerProcessReaper.getProcess(this));
}
protected String getWorkingDirLocation() {
return System.getProperty("user.dir");
}
}

View File

@@ -22,11 +22,8 @@ import com.google.common.base.Supplier;
public class LanguageServerConsoles {
private static Map<String, Supplier<Console>> managers;
public static synchronized Supplier<Console> getConsoleFactory(ServerInfo server) {
if (!isConsoleEnabled(server)) {
return null;
}
if (managers==null) {
managers = new HashMap<>();
}
@@ -34,10 +31,13 @@ public class LanguageServerConsoles {
ConsoleUtil consoleMgr = new ConsoleUtil(); //one console manager per language server type. This way each has their
// own history (which limits number of open consoles per type)
int consoleCounter = 0;
@Override
public Console get() {
return consoleMgr.getConsole(server.label+" Language Server "+consoleCounter());
if (isConsoleEnabled(server)) {
return consoleMgr.getConsole(server.label+" Language Server "+consoleCounter());
}
return null;
}
private synchronized int consoleCounter() {