Search in sources :

Example 1 with Endpoint

use of org.eclipse.lsp4j.jsonrpc.Endpoint in project xtext-core by eclipse.

the class LanguageServerImpl method supportedMethods.

@Override
public Map<String, JsonRpcMethod> supportedMethods() {
    if (supportedMethods != null) {
        return supportedMethods;
    }
    synchronized (extensionProviders) {
        Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>();
        supportedMethods.putAll(ServiceEndpoints.getSupportedMethods(getClass()));
        Map<String, JsonRpcMethod> extensions = new LinkedHashMap<>();
        for (IResourceServiceProvider resourceServiceProvider : getAllLanguages()) {
            ILanguageServerExtension ext = resourceServiceProvider.get(ILanguageServerExtension.class);
            if (ext != null) {
                ext.initialize(access);
                Map<String, JsonRpcMethod> supportedExtensions = ext instanceof JsonRpcMethodProvider ? ((JsonRpcMethodProvider) ext).supportedMethods() : ServiceEndpoints.getSupportedMethods(ext.getClass());
                for (Map.Entry<String, JsonRpcMethod> entry : supportedExtensions.entrySet()) {
                    if (supportedMethods.containsKey(entry.getKey())) {
                        LOG.error("The json rpc method \'" + entry.getKey() + "\' can not be an extension as it is already defined in the LSP standard.");
                    } else {
                        JsonRpcMethod existing = extensions.put(entry.getKey(), entry.getValue());
                        if (existing != null && !Objects.equal(existing, entry.getValue())) {
                            LOG.error("An incompatible LSP extension \'" + entry.getKey() + "\' has already been registered. Using 1 ignoring 2. \n1 : " + existing + " \n2 : " + entry.getValue());
                            extensions.put(entry.getKey(), existing);
                        } else {
                            Endpoint endpoint = ServiceEndpoints.toEndpoint(ext);
                            extensionProviders.put(entry.getKey(), endpoint);
                            supportedMethods.put(entry.getKey(), entry.getValue());
                        }
                    }
                }
            }
        }
        this.supportedMethods = supportedMethods;
        return supportedMethods;
    }
}
Also used : JsonRpcMethodProvider(org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider) IResourceServiceProvider(org.eclipse.xtext.resource.IResourceServiceProvider) Endpoint(org.eclipse.lsp4j.jsonrpc.Endpoint) JsonRpcMethod(org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod) Map(java.util.Map) LinkedHashMap(java.util.LinkedHashMap) TreeMap(java.util.TreeMap) ImmutableMap(com.google.common.collect.ImmutableMap) LinkedHashMap(java.util.LinkedHashMap)

Example 2 with Endpoint

use of org.eclipse.lsp4j.jsonrpc.Endpoint in project xtext-core by eclipse.

the class LanguageServerImpl method request.

@Override
public CompletableFuture<?> request(final String method, final Object parameter) {
    boolean _containsKey = this.extensionProviders.containsKey(method);
    boolean _not = (!_containsKey);
    if (_not) {
        throw new UnsupportedOperationException((("The json request \'" + method) + "\' is unknown."));
    }
    Collection<Endpoint> _get = this.extensionProviders.get(method);
    for (final Endpoint endpoint : _get) {
        try {
            return endpoint.request(method, parameter);
        } catch (final Throwable _t) {
            if (_t instanceof UnsupportedOperationException) {
                final UnsupportedOperationException e = (UnsupportedOperationException) _t;
                if ((e != ILanguageServerExtension.NOT_HANDLED_EXCEPTION)) {
                    throw e;
                }
            } else {
                throw Exceptions.sneakyThrow(_t);
            }
        }
    }
    return null;
}
Also used : Endpoint(org.eclipse.lsp4j.jsonrpc.Endpoint)

Example 3 with Endpoint

use of org.eclipse.lsp4j.jsonrpc.Endpoint in project ballerina by ballerina-lang.

the class CommonUtil method getLanguageServerResponseMessageAsString.

/**
 * Get the definition response message as a string.
 *
 * @param position    hovering position to get the definition.
 * @param file        bal file path
 * @param fileContent bal file content
 * @param method      string name of the language feature method
 * @return json string value of the response
 */
public static String getLanguageServerResponseMessageAsString(Position position, String file, String fileContent, String method) throws InterruptedException {
    Gson gson = new Gson();
    BallerinaLanguageServer ballerinaLanguageServer = new BallerinaLanguageServer();
    Endpoint serviceEndpoint = ServiceEndpoints.toEndpoint(ballerinaLanguageServer);
    TextDocumentPositionParams positionParams = new TextDocumentPositionParams();
    TextDocumentIdentifier identifier = new TextDocumentIdentifier();
    identifier.setUri(Paths.get(file).toUri().toString());
    positionParams.setTextDocument(identifier);
    positionParams.setPosition(position);
    DidOpenTextDocumentParams documentParams = new DidOpenTextDocumentParams();
    TextDocumentItem textDocumentItem = new TextDocumentItem();
    textDocumentItem.setUri(identifier.getUri());
    textDocumentItem.setText(fileContent);
    documentParams.setTextDocument(textDocumentItem);
    serviceEndpoint.notify("textDocument/didOpen", documentParams);
    CompletableFuture result = serviceEndpoint.request(method, positionParams);
    ResponseMessage jsonrpcResponse = new ResponseMessage();
    try {
        jsonrpcResponse.setId("324");
        jsonrpcResponse.setResult(result.get());
    } catch (InterruptedException e) {
        ResponseError responseError = new ResponseError();
        responseError.setCode(-32002);
        responseError.setMessage("Attempted to retrieve the result of a task/s" + "that was aborted by throwing an exception");
        jsonrpcResponse.setError(responseError);
    } catch (ExecutionException e) {
        ResponseError responseError = new ResponseError();
        responseError.setCode(-32001);
        responseError.setMessage("Current thread was interrupted");
        jsonrpcResponse.setError(responseError);
    }
    return gson.toJson(jsonrpcResponse);
}
Also used : TextDocumentItem(org.eclipse.lsp4j.TextDocumentItem) BallerinaLanguageServer(org.ballerinalang.langserver.BallerinaLanguageServer) TextDocumentIdentifier(org.eclipse.lsp4j.TextDocumentIdentifier) CompletableFuture(java.util.concurrent.CompletableFuture) Endpoint(org.eclipse.lsp4j.jsonrpc.Endpoint) DidOpenTextDocumentParams(org.eclipse.lsp4j.DidOpenTextDocumentParams) ResponseError(org.eclipse.lsp4j.jsonrpc.messages.ResponseError) Gson(com.google.gson.Gson) TextDocumentPositionParams(org.eclipse.lsp4j.TextDocumentPositionParams) ResponseMessage(org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage) ExecutionException(java.util.concurrent.ExecutionException)

Aggregations

Endpoint (org.eclipse.lsp4j.jsonrpc.Endpoint)3 ImmutableMap (com.google.common.collect.ImmutableMap)1 Gson (com.google.gson.Gson)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1 CompletableFuture (java.util.concurrent.CompletableFuture)1 ExecutionException (java.util.concurrent.ExecutionException)1 BallerinaLanguageServer (org.ballerinalang.langserver.BallerinaLanguageServer)1 DidOpenTextDocumentParams (org.eclipse.lsp4j.DidOpenTextDocumentParams)1 TextDocumentIdentifier (org.eclipse.lsp4j.TextDocumentIdentifier)1 TextDocumentItem (org.eclipse.lsp4j.TextDocumentItem)1 TextDocumentPositionParams (org.eclipse.lsp4j.TextDocumentPositionParams)1 JsonRpcMethod (org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethod)1 JsonRpcMethodProvider (org.eclipse.lsp4j.jsonrpc.json.JsonRpcMethodProvider)1 ResponseError (org.eclipse.lsp4j.jsonrpc.messages.ResponseError)1 ResponseMessage (org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage)1 IResourceServiceProvider (org.eclipse.xtext.resource.IResourceServiceProvider)1