use of org.eclipse.lsp4j.jsonrpc.Launcher in project sonarlint-core by SonarSource.
the class ServerMainTest method startServer.
@BeforeClass
public static void startServer() throws Exception {
System.out.println("Max memory: " + Runtime.getRuntime().maxMemory());
System.setProperty(SonarLintTelemetry.DISABLE_PROPERTY_KEY, "true");
serverSocket = new ServerSocket(0);
int port = serverSocket.getLocalPort();
client = new FakeLanguageClient();
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<LanguageServer> callable = () -> {
Socket socket = serverSocket.accept();
Launcher<LanguageServer> launcher = LSPLauncher.createClientLauncher(client, socket.getInputStream(), socket.getOutputStream());
launcher.startListening();
return launcher.getRemoteProxy();
};
Future<LanguageServer> future = executor.submit(callable);
executor.shutdown();
String js = new File("target/plugins/javascript.jar").getAbsoluteFile().toURI().toURL().toString();
String php = new File("target/plugins/php.jar").getAbsoluteFile().toURI().toURL().toString();
String py = new File("target/plugins/python.jar").getAbsoluteFile().toURI().toURL().toString();
String ts = new File("target/plugins/typescript.jar").getAbsoluteFile().toURI().toURL().toString();
Path fakeTypeScriptProjectPath = globalTemp.newFolder().toPath();
Path packagejson = fakeTypeScriptProjectPath.resolve("package.json");
FileUtils.write(packagejson.toFile(), "{" + "\"devDependencies\": {\n" + " \"typescript\": \"2.6.1\"\n" + " }" + "}", StandardCharsets.UTF_8);
ProcessBuilder pb = new ProcessBuilder("npm" + (SystemUtils.IS_OS_WINDOWS ? ".cmd" : ""), "install").directory(fakeTypeScriptProjectPath.toFile()).inheritIO();
Process process = pb.start();
if (process.waitFor() != 0) {
fail("Unable to run npm install");
}
try {
ServerMain.main("" + port, js, php, py, ts);
} catch (Exception e) {
e.printStackTrace();
future.get(1, TimeUnit.SECONDS);
if (!future.isDone()) {
future.cancel(true);
}
throw e;
}
lsProxy = future.get();
InitializeParams initializeParams = new InitializeParams();
initializeParams.setInitializationOptions(ImmutableMap.builder().put(TEST_FILE_PATTERN, "{**/test/**,**/*test*,**/*Test*}").put(TYPESCRIPT_LOCATION, fakeTypeScriptProjectPath.resolve("node_modules").toString()).put(DISABLE_TELEMETRY, true).put("telemetryStorage", "not/exists").put("productName", "SLCORE tests").put("productVersion", "0.1").build());
lsProxy.initialize(initializeParams).get();
}
use of org.eclipse.lsp4j.jsonrpc.Launcher in project ballerina by ballerina-lang.
the class BallerinaLangServerService method launchRPCServer.
private <T> Launcher<T> launchRPCServer(Object localService, Class<T> remoteInterface) {
Consumer<GsonBuilder> configureGson = (gsonBuilder) -> {
};
Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap();
supportedMethods.putAll(ServiceEndpoints.getSupportedMethods(remoteInterface));
if (localService instanceof JsonRpcMethodProvider) {
JsonRpcMethodProvider rpcMethodProvider = (JsonRpcMethodProvider) localService;
supportedMethods.putAll(rpcMethodProvider.supportedMethods());
} else {
supportedMethods.putAll(ServiceEndpoints.getSupportedMethods(localService.getClass()));
}
MessageJsonHandler jsonHandler = new MessageJsonHandler(supportedMethods, configureGson);
MessageConsumer outGoingMessageStream = new WSRPCMessageConsumer(this, jsonHandler);
RemoteEndpoint serverEndpoint = new RemoteEndpoint(outGoingMessageStream, ServiceEndpoints.toEndpoint(localService));
jsonHandler.setMethodProvider(serverEndpoint);
final MessageConsumer messageConsumer = serverEndpoint;
final MessageProducer reader = new WSRPCMessageProducer(this, jsonHandler);
final T remoteProxy = ServiceEndpoints.toServiceObject(serverEndpoint, remoteInterface);
return new Launcher<T>() {
public Future<?> startListening() {
return ConcurrentMessageProcessor.startProcessing(reader, messageConsumer, Executors.newCachedThreadPool());
}
public T getRemoteProxy() {
return remoteProxy;
}
};
}
use of org.eclipse.lsp4j.jsonrpc.Launcher in project sts4 by spring-projects.
the class LaunguageServerApp method startAsServer.
/**
* starts up the language server and let it listen for connections from the outside
* instead of connecting itself to an existing port or channel.
*
* This is meant for development only, to reduce turnaround times while working
* on the language server from within an IDE, so that you can start the language
* server right away in debug mode and let the vscode extension connect to that
* instance instead of vice versa.
*
* Source of inspiration:
* https://github.com/itemis/xtext-languageserver-example/blob/master/org.xtext.example.mydsl.ide/src/org/xtext/example/mydsl/ide/RunServer.java
*/
public void startAsServer() throws IOException, InterruptedException {
Log.info("Starting LS as standlone server");
Function<MessageConsumer, MessageConsumer> wrapper = consumer -> {
MessageConsumer result = consumer;
return result;
};
SimpleLanguageServer languageServer = createServer();
Launcher<STS4LanguageClient> launcher = createSocketLauncher(languageServer, STS4LanguageClient.class, new InetSocketAddress("localhost", SERVER_STANDALONE_PORT), createServerThreads(), wrapper);
languageServer.connect(launcher.getRemoteProxy());
Future<?> future = launcher.startListening();
while (!future.isDone()) {
Thread.sleep(10_000l);
}
}
Aggregations