Open
Description
I have language server and language client written in Java using LSP4j.
Language Client
class WPLSPClient implements LanguageClient {
private static final Logger logger = LoggerFactory.getLogger(WPLSPClient.class);
@Override
public void telemetryEvent(Object object) {
logger.info("TELEMETRY");
}
.................................
}
Language Server
public class WPLanguageServer extends AbstractLanguageServer implements LanguageServer, LanguageClientAware {
private static final Logger logger = LoggerFactory.getLogger( WPLanguageServer.class );
private final Runnable shutdownHandler;
LanguageClient client;
public WPLanguageServer( Runnable shutdownHandler ) {
super.setTextDocumentService(new WpTextDocumentService(this));
super.setWorkspaceService(new WpWorkspaceService(this));
this.shutdownHandler = shutdownHandler;
}
@Override
public void connect( LanguageClient client ) {
this.client = client;
}
@Override
public CompletableFuture<InitializeResult> initialize(InitializeParams params) {
Integer processId = params.getProcessId();
if(processId != null) {
setParentProcessId(processId.longValue());
} else {
logger.info("Missing Parent process ID!!");
setParentProcessId(0);
}
ServerCapabilities capabilities = createServerCapabilities();
InitializeResult result = new InitializeResult( capabilities );
return CompletableFuture.completedFuture( result );
}
@Override
public void initialized( InitializedParams params ) {
client.logMessage( new MessageParams( MessageType.Info, "web performer LSP Server Initialized" ) );
}
.............................................
}
Server Runner
ServerSocket serverSocket = new ServerSocket( 8080 );
Socket socket = serverSocket.accept();
WPLanguageServer server = new WPLanguageServer( () -> {
try {
socket.shutdownInput();
} catch ( IOException e ) {
logger.warn(e.getMessage());
throw new UncheckedIOException( e );
}
} );
Launcher<LanguageClient> launcher = LSPLauncher.createServerLauncher( server, socket.getInputStream(), socket.getOutputStream() );
LanguageClient client = launcher.getRemoteProxy();
server.connect( client );
server.startServer();
launcher.startListening();
Note: I have read the documentation and according implemented the above code without server.startServer();
it did not work for me.
Client launcher
clientSocket = new Socket("localhost", 8080);
InputStream in = clientSocket.getInputStream();
OutputStream out = clientSocket.getOutputStream();
Launcher<LanguageServer> launcher = LSPLauncher.createClientLauncher(new WPLSPClient(), in, out, true, null);
launcher.startListening();
logger.info("launched listening started");
OutputStreamWriter responseWriter = new OutputStreamWriter(out);
Map<String, JsonRpcMethod> methods = ServiceEndpoints.getSupportedMethods(LanguageServer.class);
MessageJsonHandler jsonHandler = new MessageJsonHandler(methods);
InitializeParams iParams = getInitializeParams();
RequestMessage message = new RequestMessage();
message.setJsonrpc("2.0");
message.setMethod("initialize");
message.setId(12);
message.setParams(iParams);
String json = jsonHandler.serialize(message);
String header = String.format("Content-Length: %d\r\n\r\n", json.getBytes().length);
responseWriter.write(header);
responseWriter.write(json);
responseWriter.flush();
problems
-
Language server is not starting and initialized ()
Note:initialize(InitializeParams params)
is called on getting the client request, but methodinitialized
is nevercalled. Hence client doesn't receive message that server Initialized. (please refer Server Implementation) -
I have tried initializing from client but failed (Please refer Client launcher code )
3)Getting an following warning at client program
WARNING: Unmatched response message: {
"jsonrpc": "2.0",
"id": 12,
"result": {
"capabilities": {
"textDocumentSync": 1,
"hoverProvider": true,
"completionProvider": {
"resolveProvider": true,
"triggerCharacters": [
".",
":",
"?",
"\u0026",
"\"",
"\u003d"
]
},
"definitionProvider": true,
"referencesProvider": true,
"documentSymbolProvider": true
}
}
}
Please help me to understand the problem. I am new to LSP and LSP 4j.