Skip to content

Commit 9703caf

Browse files
committed
Base proxy-ing setup
1 parent 2dcfd93 commit 9703caf

File tree

4 files changed

+89
-48
lines changed

4 files changed

+89
-48
lines changed

java/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
plugins {
22
id("java")
3+
kotlin("jvm") version libs.versions.kotlin
34
}
45

56
repositories{
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package processing.mode.java.lsp.proxy
2+
3+
import org.eclipse.lsp4j.MessageActionItem
4+
import org.eclipse.lsp4j.MessageParams
5+
import org.eclipse.lsp4j.PublishDiagnosticsParams
6+
import org.eclipse.lsp4j.ShowMessageRequestParams
7+
import org.eclipse.lsp4j.services.LanguageClient
8+
import org.eclipse.lsp4j.services.LanguageServer
9+
import java.util.concurrent.CompletableFuture
10+
11+
class BaseLanguageClient: LanguageClient {
12+
var downstream: LanguageServer? = null
13+
14+
override fun telemetryEvent(`object`: Any?) {
15+
println("Telemetry: $`object`")
16+
}
17+
18+
override fun publishDiagnostics(diagnostics: PublishDiagnosticsParams?) {
19+
println("Diagnostics: $diagnostics")
20+
}
21+
22+
override fun showMessage(messageParams: MessageParams?) {
23+
println("Message: $messageParams")
24+
}
25+
26+
override fun showMessageRequest(requestParams: ShowMessageRequestParams?): CompletableFuture<MessageActionItem?>? {
27+
println("Message request: $requestParams")
28+
return CompletableFuture.completedFuture(null)
29+
}
30+
31+
override fun logMessage(message: MessageParams?) {
32+
TODO("Not yet implemented")
33+
}
34+
35+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package processing.mode.java.lsp.proxy
2+
3+
import org.eclipse.lsp4j.InitializeParams
4+
import org.eclipse.lsp4j.InitializeResult
5+
import org.eclipse.lsp4j.services.LanguageClient
6+
import org.eclipse.lsp4j.services.LanguageServer
7+
import org.eclipse.lsp4j.services.TextDocumentService
8+
import org.eclipse.lsp4j.services.WorkspaceService
9+
import java.util.concurrent.CompletableFuture
10+
11+
class BaseLanguageServer(val downstream: LanguageServer) : LanguageServer {
12+
var upstream: LanguageClient? = null
13+
14+
override fun initialize(params: InitializeParams?): CompletableFuture<InitializeResult?>? {
15+
return downstream.initialize(params)
16+
}
17+
18+
override fun shutdown(): CompletableFuture<in Any>? {
19+
return downstream.shutdown()
20+
}
21+
22+
override fun exit() {
23+
return downstream.exit()
24+
}
25+
26+
override fun getTextDocumentService(): TextDocumentService? {
27+
return downstream.textDocumentService
28+
}
29+
30+
override fun getWorkspaceService(): WorkspaceService? {
31+
return downstream.workspaceService
32+
}
33+
}
Lines changed: 20 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,32 @@
11
package processing.mode.java.lsp.proxy;
22

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-
}
303

31-
@Override
32-
public void connect(LanguageClient client) {
4+
import org.eclipse.lsp4j.launch.LSPLauncher;
335

34-
}
6+
import java.io.IOException;
357

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();
4013

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();
4517

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();
4823

49-
}
24+
var baseServer = new BaseLanguageServer(downstreamServer);
5025

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);
5529

56-
@Override
57-
public WorkspaceService getWorkspaceService() {
58-
return null;
30+
baseClientLauncher.startListening();
5931
}
6032
}

0 commit comments

Comments
 (0)