From 9d3ab920881e6c0de088313df0b372daaddb035f Mon Sep 17 00:00:00 2001 From: Sven Efftinge Date: Fri, 27 May 2016 15:47:39 +0200 Subject: [PATCH] [lsp] some fixes for ServerLauncher --- .../xtext/ide/server/LanguageServerImpl.xtend | 4 +- .../xtext/ide/server/ServerLauncher.xtend | 46 +++++++++++++------ tests/org.eclipse.xtext.ide.tests/.classpath | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +-- .../META-INF/MANIFEST.MF | 2 +- tests/org.eclipse.xtext.ide.tests/pom.xml | 33 ++++++++++++- .../ide/tests/server/ServerLauncherTest.xtend | 11 +++-- 7 files changed, 76 insertions(+), 28 deletions(-) diff --git a/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.xtend b/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.xtend index 0ecc30f58..d9810bc7f 100644 --- a/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.xtend +++ b/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/LanguageServerImpl.xtend @@ -278,7 +278,7 @@ import static io.typefox.lsapi.util.LsapiFactories.* } override resolveCompletionItem(CompletionItem unresolved) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + return unresolved } override hover(TextDocumentPositionParams position) { @@ -302,7 +302,7 @@ import static io.typefox.lsapi.util.LsapiFactories.* } override resolveCodeLens(CodeLens unresolved) { - throw new UnsupportedOperationException("TODO: auto-generated method stub") + return unresolved } override formatting(DocumentFormattingParams params) { diff --git a/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ServerLauncher.xtend b/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ServerLauncher.xtend index 11839fbf3..11a96dfae 100644 --- a/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ServerLauncher.xtend +++ b/plugins/org.eclipse.xtext.ide/src/org/eclipse/xtext/ide/server/ServerLauncher.xtend @@ -16,16 +16,17 @@ import java.io.ByteArrayInputStream import java.io.FileOutputStream import java.io.PrintStream import java.util.concurrent.atomic.AtomicBoolean -import org.apache.log4j.Logger +import java.io.ByteArrayOutputStream /** * @author Sven Efftinge - Initial contribution and API */ class ServerLauncher { - val LOG = Logger.getLogger(ServerLauncher) + private static boolean IS_DEBUG = false def static void main(String[] args) { + IS_DEBUG = args.exists[it == 'debug'] val launcher = Guice.createInjector(new ServerModule).getInstance(ServerLauncher) launcher.start() } @@ -37,15 +38,13 @@ class ServerLauncher { def void start() { val stdin = System.in val stdout = System.out - - System.setIn(new ByteArrayInputStream(newByteArrayOfSize(0))) - System.setOut(new PrintStream(new FileOutputStream("out.log"))) + redirectStandardStreams() System.err.println("Starting Xtext Language Server.") val messageAcceptor = new LanguageServerToJsonAdapter(languageServer) { override protected _doAccept(NotificationMessage message) { - if (LOG.isDebugEnabled) { - LOG.debug(message) + if (IS_DEBUG) { + println(message) } if (message.method == MessageMethods.EXIT) { hasExitNotification.set(true); @@ -54,29 +53,32 @@ class ServerLauncher { } override protected sendResponse(String responseId, Object resultValue) { - if (LOG.isDebugEnabled) { - LOG.debug("response : "+resultValue) + if (IS_DEBUG) { + println("response : "+resultValue) } super.sendResponse(responseId, resultValue) } override protected sendNotification(String methodId, Object parameter) { - if (LOG.isDebugEnabled) { - LOG.debug("id"+methodId) - LOG.debug("notification : "+parameter) + if (IS_DEBUG) { + println("id"+methodId) + println("notification : "+parameter) } super.sendNotification(methodId, parameter) } override protected sendResponseError(String responseId, String errorMessage, int errorCode, Object errorData) { - if (LOG.isDebugEnabled) { - LOG.debug("id"+responseId) - LOG.debug("error : "+errorMessage) + if (IS_DEBUG) { + println("id"+responseId) + println("error : "+errorMessage) } super.sendResponseError(responseId, errorMessage, errorCode, errorData) } } + messageAcceptor.protocol.addErrorListener[p1, p2| + p2.printStackTrace(System.err) + ] messageAcceptor.connect(stdin, stdout) messageAcceptor.start System.err.println("started.") @@ -87,4 +89,18 @@ class ServerLauncher { System.err.println("Exit notification received. Good Bye!") } + def redirectStandardStreams() { + System.setIn(new ByteArrayInputStream(newByteArrayOfSize(0))) + val id = ServerLauncher.name+"-"+System.currentTimeMillis + if (IS_DEBUG) { + val stdFileOut = new FileOutputStream("out-"+id+".log") + System.setOut(new PrintStream(stdFileOut)) + val stdFileErr = new FileOutputStream("error-"+id+".log") + System.setErr(new PrintStream(stdFileErr)) + } else { + System.setOut(new PrintStream(new ByteArrayOutputStream())) + System.setErr(new PrintStream(new ByteArrayOutputStream())) + } + } + } \ No newline at end of file diff --git a/tests/org.eclipse.xtext.ide.tests/.classpath b/tests/org.eclipse.xtext.ide.tests/.classpath index f17311ffc..623969d45 100644 --- a/tests/org.eclipse.xtext.ide.tests/.classpath +++ b/tests/org.eclipse.xtext.ide.tests/.classpath @@ -1,6 +1,6 @@ - + diff --git a/tests/org.eclipse.xtext.ide.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.xtext.ide.tests/.settings/org.eclipse.jdt.core.prefs index 28c7167cf..a9dcb2a46 100644 --- a/tests/org.eclipse.xtext.ide.tests/.settings/org.eclipse.jdt.core.prefs +++ b/tests/org.eclipse.xtext.ide.tests/.settings/org.eclipse.jdt.core.prefs @@ -23,9 +23,9 @@ org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -124,7 +124,7 @@ org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disa org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.6 +org.eclipse.jdt.core.compiler.source=1.7 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 diff --git a/tests/org.eclipse.xtext.ide.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.xtext.ide.tests/META-INF/MANIFEST.MF index 730e11585..40c6820a5 100644 --- a/tests/org.eclipse.xtext.ide.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.xtext.ide.tests/META-INF/MANIFEST.MF @@ -4,7 +4,7 @@ Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.xtext.ide.tests;singleton:=true Bundle-Version: 2.10.0.qualifier Bundle-Localization: plugin -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName Require-Bundle: org.eclipse.xtext;visibility:=reexport, diff --git a/tests/org.eclipse.xtext.ide.tests/pom.xml b/tests/org.eclipse.xtext.ide.tests/pom.xml index 0e905cb54..9e812e555 100644 --- a/tests/org.eclipse.xtext.ide.tests/pom.xml +++ b/tests/org.eclipse.xtext.ide.tests/pom.xml @@ -21,8 +21,37 @@ consider - - + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4.1 + + + + jar-with-dependencies + + + + + org.eclipse.xtext.ide.server.ServerLauncher + + + + + + + make-assembly + + package + + single + + + + + + org.eclipse.xtext diff --git a/tests/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/ServerLauncherTest.xtend b/tests/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/ServerLauncherTest.xtend index aad17b16e..3b54a8579 100644 --- a/tests/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/ServerLauncherTest.xtend +++ b/tests/org.eclipse.xtext.ide.tests/src/org/eclipse/xtext/ide/tests/server/ServerLauncherTest.xtend @@ -12,6 +12,7 @@ import io.typefox.lsapi.json.JsonBasedLanguageServer import org.eclipse.xtext.ide.server.ServerLauncher import org.junit.Test import java.lang.ProcessBuilder.Redirect +import org.junit.Assert /** * @author efftinge - Initial contribution and API @@ -19,15 +20,17 @@ import java.lang.ProcessBuilder.Redirect class ServerLauncherTest { @Test def void testServerLaunch() { - val process = new ProcessBuilder("java","-cp",System.getProperty("java.class.path"), "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044", ServerLauncher.name).redirectInput(Redirect.PIPE).redirectOutput(Redirect.PIPE).start + val process = new ProcessBuilder("java","-cp",System.getProperty("java.class.path"), "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044", ServerLauncher.name +// ,"debug" + ).redirectInput(Redirect.PIPE).redirectOutput(Redirect.PIPE).start try { val client = new JsonBasedLanguageServer() client.connect(process.inputStream, process.outputStream) - - println(client.initialize(new InitializeParamsImpl() => [ + val msg = client.initialize(new InitializeParamsImpl() => [ rootPath = "." - ])) + ]) + Assert.assertTrue(msg != null) } finally { process.destroy }