[ls] Added a launching option to enable/disable tracing

Signed-off-by: Anton Kosiakov <anton.kosyakov@typefox.io>
This commit is contained in:
Anton Kosiakov 2017-06-06 09:54:41 +05:00
parent a74a9108f1
commit 5bfb9dfdeb
2 changed files with 63 additions and 20 deletions

View file

@ -27,29 +27,40 @@ class ServerLauncher {
public static val OPTION_PREFIX = '-Dorg.eclipse.xtext.ide.server.'
public static val LOG_STANDARD_STREAMS = OPTION_PREFIX + 'logStandardStreams'
public static val TRACE = OPTION_PREFIX + 'trace'
def static void main(String[] args) {
val stdin = System.in
val stdout = System.out
redirectStandardStreams(args)
val trace = args.trace
val launcher = Guice.createInjector(new ServerModule).getInstance(ServerLauncher)
launcher.start(stdin, stdout)
launcher.start(stdin, stdout, trace)
}
@Inject LanguageServerImpl languageServer
def void start(InputStream in, OutputStream out) {
println("Starting Xtext Language Server.")
val launcher = Launcher.createLauncher(languageServer, LanguageClient, in, out, true,
new PrintWriter(System.out))
def void start(InputStream in, OutputStream out, PrintWriter trace) {
println("Xtext Language Server is starting.")
val launcher = Launcher.createLauncher(languageServer, LanguageClient, in, out, true, trace)
languageServer.connect(launcher.remoteProxy)
val future = launcher.startListening
println("started.")
println("Xtext Language Server has been started.")
while (!future.done) {
Thread.sleep(10_000l)
}
}
def static PrintWriter getTrace(String[] args) {
if (shouldTrace(args))
return createTrace
}
def static PrintWriter createTrace() {
return new PrintWriter(System.out)
}
def static redirectStandardStreams(String[] args) {
redirectStandardStreams(ServerLauncher.name, args)
}
@ -62,12 +73,20 @@ class ServerLauncher {
}
}
def static boolean shouldLogStandardStreams(String[] args) {
return args.exists[shouldLogStandardStreams]
def static boolean shouldTrace(String[] args) {
return args.testArg(TRACE)
}
def static boolean shouldLogStandardStreams(String arg) {
return arg == LOG_STANDARD_STREAMS || arg == 'debug'
def static boolean shouldLogStandardStreams(String[] args) {
return args.testArg(LOG_STANDARD_STREAMS, 'debug')
}
def static boolean testArg(String[] args, String ... values) {
return args.exists[testArg(values)]
}
def static boolean testArg(String arg, String ... values) {
return values.exists[value|value === arg]
}
def static void logStandardStreams(String prefix) {

View file

@ -7,7 +7,6 @@
*/
package org.eclipse.xtext.ide.server;
import com.google.common.base.Objects;
import com.google.common.io.ByteStreams;
import com.google.inject.Guice;
import com.google.inject.Inject;
@ -38,26 +37,28 @@ public class ServerLauncher {
public final static String LOG_STANDARD_STREAMS = (ServerLauncher.OPTION_PREFIX + "logStandardStreams");
public final static String TRACE = (ServerLauncher.OPTION_PREFIX + "trace");
public static void main(final String[] args) {
final InputStream stdin = System.in;
final PrintStream stdout = System.out;
ServerLauncher.redirectStandardStreams(args);
final PrintWriter trace = ServerLauncher.getTrace(args);
ServerModule _serverModule = new ServerModule();
final ServerLauncher launcher = Guice.createInjector(_serverModule).<ServerLauncher>getInstance(ServerLauncher.class);
launcher.start(stdin, stdout);
launcher.start(stdin, stdout, trace);
}
@Inject
private LanguageServerImpl languageServer;
public void start(final InputStream in, final OutputStream out) {
public void start(final InputStream in, final OutputStream out, final PrintWriter trace) {
try {
InputOutput.<String>println("Starting Xtext Language Server.");
PrintWriter _printWriter = new PrintWriter(System.out);
final Launcher<LanguageClient> launcher = Launcher.<LanguageClient>createLauncher(this.languageServer, LanguageClient.class, in, out, true, _printWriter);
InputOutput.<String>println("Xtext Language Server is starting.");
final Launcher<LanguageClient> launcher = Launcher.<LanguageClient>createLauncher(this.languageServer, LanguageClient.class, in, out, true, trace);
this.languageServer.connect(launcher.getRemoteProxy());
final Future<?> future = launcher.startListening();
InputOutput.<String>println("started.");
InputOutput.<String>println("Xtext Language Server has been started.");
while ((!future.isDone())) {
Thread.sleep(10_000l);
}
@ -66,6 +67,18 @@ public class ServerLauncher {
}
}
public static PrintWriter getTrace(final String[] args) {
boolean _shouldTrace = ServerLauncher.shouldTrace(args);
if (_shouldTrace) {
return ServerLauncher.createTrace();
}
return null;
}
public static PrintWriter createTrace() {
return new PrintWriter(System.out);
}
public static void redirectStandardStreams(final String[] args) {
ServerLauncher.redirectStandardStreams(ServerLauncher.class.getName(), args);
}
@ -79,15 +92,26 @@ public class ServerLauncher {
}
}
public static boolean shouldTrace(final String[] args) {
return ServerLauncher.testArg(args, ServerLauncher.TRACE);
}
public static boolean shouldLogStandardStreams(final String[] args) {
return ServerLauncher.testArg(args, ServerLauncher.LOG_STANDARD_STREAMS, "debug");
}
public static boolean testArg(final String[] args, final String... values) {
final Function1<String, Boolean> _function = (String it) -> {
return Boolean.valueOf(ServerLauncher.shouldLogStandardStreams(it));
return Boolean.valueOf(ServerLauncher.testArg(values));
};
return IterableExtensions.<String>exists(((Iterable<String>)Conversions.doWrapArray(args)), _function);
}
public static boolean shouldLogStandardStreams(final String arg) {
return (Objects.equal(arg, ServerLauncher.LOG_STANDARD_STREAMS) || Objects.equal(arg, "debug"));
public static boolean testArg(final String arg, final String... values) {
final Function1<String, Boolean> _function = (String value) -> {
return Boolean.valueOf((value == arg));
};
return IterableExtensions.<String>exists(((Iterable<String>)Conversions.doWrapArray(values)), _function);
}
public static void logStandardStreams(final String prefix) {