|
1 | 1 | package processing.mode.java.lsp.proxy; |
2 | 2 |
|
3 | | -import org.eclipse.lsp4j.InitializeParams; |
4 | | -import org.eclipse.lsp4j.InitializeResult; |
5 | | -import org.eclipse.lsp4j.launch.LSPLauncher; |
6 | | -import org.eclipse.lsp4j.services.*; |
7 | | - |
8 | | -import java.util.concurrent.CompletableFuture; |
9 | | - |
10 | | -public class PdeLanguageServerProxy implements LanguageServer, LanguageClientAware { |
11 | | - static public void main(String[] args) { |
12 | | - var input = System.in; |
13 | | - var output = System.out; |
14 | | - System.setOut(System.err); |
15 | | - |
16 | | - var server = new PdeLanguageServerProxy(); |
17 | | - var launcher = |
18 | | - LSPLauncher.createServerLauncher( |
19 | | - server, |
20 | | - input, |
21 | | - output |
22 | | - ); |
23 | | - var client = launcher.getRemoteProxy(); |
24 | | - server.connect(client); |
25 | | - launcher.startListening(); |
26 | | - |
27 | | - // Approach 1: Start the PdeProxy and pipe everything else through to the Eclipse JDT LS and modify paths and such at runtime |
28 | | - // Approach 2: Manually write the actions that will send the correct data the Eclipse JDT LS |
29 | | - } |
30 | 3 |
|
31 | | - @Override |
32 | | - public void connect(LanguageClient client) { |
| 4 | +import org.eclipse.lsp4j.launch.LSPLauncher; |
33 | 5 |
|
34 | | - } |
| 6 | +import java.io.IOException; |
35 | 7 |
|
36 | | - @Override |
37 | | - public CompletableFuture<InitializeResult> initialize(InitializeParams params) { |
38 | | - return null; |
39 | | - } |
| 8 | +public class PdeLanguageServerProxy { |
| 9 | + static public void main(String[] args) throws IOException { |
| 10 | + var processBuilder = new ProcessBuilder() |
| 11 | + .command("bash", "-c", "/Applications/Processing.app/Contents/MacOS/Processing lsp"); |
| 12 | + var baseLSP = processBuilder.start(); |
40 | 13 |
|
41 | | - @Override |
42 | | - public CompletableFuture<Object> shutdown() { |
43 | | - return null; |
44 | | - } |
| 14 | + var baseIn = baseLSP.getInputStream(); |
| 15 | + var baseOut = baseLSP.getOutputStream(); |
| 16 | + var baseErr = baseLSP.getErrorStream(); |
45 | 17 |
|
46 | | - @Override |
47 | | - public void exit() { |
| 18 | + var baseClient = new BaseLanguageClient(); |
| 19 | + var baseServerLauncher = LSPLauncher.createClientLauncher(baseClient, baseIn, baseOut); |
| 20 | + var downstreamServer = baseServerLauncher.getRemoteProxy(); |
| 21 | + baseClient.setDownstream(downstreamServer); |
| 22 | + baseServerLauncher.startListening(); |
48 | 23 |
|
49 | | - } |
| 24 | + var baseServer = new BaseLanguageServer(downstreamServer); |
50 | 25 |
|
51 | | - @Override |
52 | | - public TextDocumentService getTextDocumentService() { |
53 | | - return null; |
54 | | - } |
| 26 | + var baseClientLauncher = LSPLauncher.createServerLauncher(baseServer, System.in, System.out); |
| 27 | + var upstreamClient = baseClientLauncher.getRemoteProxy(); |
| 28 | + baseServer.setUpstream(upstreamClient); |
55 | 29 |
|
56 | | - @Override |
57 | | - public WorkspaceService getWorkspaceService() { |
58 | | - return null; |
| 30 | + baseClientLauncher.startListening(); |
59 | 31 | } |
60 | 32 | } |
0 commit comments