added support for code lenses

This commit is contained in:
Martin Lippert
2017-09-12 10:25:31 +02:00
parent 197315a845
commit d87a7c2d5c
6 changed files with 183 additions and 3 deletions

View File

@@ -13,6 +13,7 @@ package org.springframework.ide.vscode.boot.java;
import java.util.HashMap;
import java.util.Map;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCodeLensEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaCompletionEngine;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaDocumentSymbolHandler;
import org.springframework.ide.vscode.boot.java.handlers.BootJavaHoverProvider;
@@ -89,6 +90,10 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
documents.onReferences(referencesHandler);
documents.onDocumentSymbol(createDocumentSymbolHandler(this, javaProjectFinder));
BootJavaCodeLensEngine codeLensHandler = createCodeLensEngine(this, javaProjectFinder);
documents.onCodeLens(codeLensHandler::createCodeLenses);
documents.onCodeLensResolve(codeLensHandler::resolveCodeLens);
workspaceService.onWorkspaceSymbol(createWorkspaceSymbolHandler(this, javaProjectFinder));
}
@@ -148,4 +153,9 @@ public class BootJavaLanguageServer extends SimpleLanguageServer {
return new BootJavaReferencesHandler(server, projectFinder, providers);
}
protected BootJavaCodeLensEngine createCodeLensEngine(SimpleLanguageServer server, JavaProjectFinder projectFinder) {
return new BootJavaCodeLensEngine(server, projectFinder);
}
}

View File

@@ -0,0 +1,82 @@
/*******************************************************************************
* Copyright (c) 2017 Pivotal, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.handlers;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.eclipse.lsp4j.CodeLens;
import org.eclipse.lsp4j.CodeLensParams;
import org.eclipse.lsp4j.Command;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.Range;
import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer;
import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
/**
* @author Martin Lippert
*/
public class BootJavaCodeLensEngine {
private final SimpleLanguageServer server;
private final JavaProjectFinder projectFinder;
public BootJavaCodeLensEngine(SimpleLanguageServer server, JavaProjectFinder projectFinder) {
this.server = server;
this.projectFinder = projectFinder;
}
public CompletableFuture<List<? extends CodeLens>> createCodeLenses(CodeLensParams params) {
SimpleTextDocumentService documents = server.getTextDocumentService();
String docURI = params.getTextDocument().getUri();
if (documents.get(docURI) != null) {
TextDocument doc = documents.get(docURI).copy();
try {
CompletableFuture<List<? extends CodeLens>> codeLensesResult = provideCodeLenses(doc);
if (codeLensesResult != null) {
return codeLensesResult;
}
}
catch (Exception e) {
}
}
return SimpleTextDocumentService.NO_CODELENS;
}
private CompletableFuture<List<? extends CodeLens>> provideCodeLenses(TextDocument doc) {
List<CodeLens> result = new ArrayList<>();
CodeLens codeLens = new CodeLens();
Range range = new Range();
range.setStart(new Position(5, 0));
range.setEnd(new Position(5, 10));
codeLens.setRange(range);
Command command = new Command("my first awesome code lens", "my first code lens command");
codeLens.setCommand(command);
codeLens.setData("some data");
result.add(codeLens);
return CompletableFuture.completedFuture(result);
}
public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) {
return null;
}
}