From 1cb46aa444985cefc6ff8a3838cf8e780c46d9a5 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 22 Nov 2018 16:03:39 -0800 Subject: [PATCH] Add some logging to track completion handling --- .../commons/javadoc/JdtLsJavadocProvider.java | 5 +++- .../VscodeCompletionEngineAdapter.java | 16 +++++++----- .../util/SimpleLanguageServer.java | 3 +-- .../util/SimpleTextDocumentService.java | 26 +++++++++++++------ .../commons/util/text/DocumentRegion.java | 1 - 5 files changed, 32 insertions(+), 19 deletions(-) diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/javadoc/JdtLsJavadocProvider.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/javadoc/JdtLsJavadocProvider.java index 461485d22..58afb77cb 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/javadoc/JdtLsJavadocProvider.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/javadoc/JdtLsJavadocProvider.java @@ -58,11 +58,14 @@ public class JdtLsJavadocProvider implements IJavadocProvider { } private IJavadoc javadoc(IJavaElement element) { + long start = System.currentTimeMillis(); try { + log.info("Fetching javadoc {}", element.getBindingKey()); JavadocResponse response = client.javadoc(new JavadocParams(projectUri, element.getBindingKey())).get(10, TimeUnit.SECONDS); + log.info("Fetching javadoc {} took {} ms", element.getBindingKey(), System.currentTimeMillis()-start); return produceJavadocFromMd(response); } catch (InterruptedException | ExecutionException | TimeoutException e) { - log.error("", e); + log.error("Fetching javadoc {} failed", e); return null; } } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java index 8899bb095..ea8601a93 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java @@ -50,7 +50,7 @@ import reactor.core.scheduler.Schedulers; */ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { - private static final Supplier LOG = Suppliers.memoize(() -> LoggerFactory.getLogger(VscodeCompletionEngineAdapter.class)); + private static final Logger log = LoggerFactory.getLogger(VscodeCompletionEngineAdapter.class); public static class LazyCompletionResolver { private int nextId = 0; //Used to assign unique id to completion items. @@ -70,7 +70,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { try { resolveItem(doc, completion, unresolved); } catch (Exception e) { - LOG.get().error("", e); + log.error("", e); } }); return id; @@ -84,7 +84,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { resolver.accept(unresolved); unresolved.setData(null); //No longer needed after item is resolved. } else { - LOG.get().warn("Couldn't resolve completion item. Did it already get flushed from the resolver's cache? "+unresolved.getLabel()); + log.warn("Couldn't resolve completion item. Did it already get flushed from the resolver's cache? "+unresolved.getLabel()); } } } @@ -96,7 +96,6 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { private final static int DEFAULT_MAX_COMPLETIONS = 50; private int maxCompletions = DEFAULT_MAX_COMPLETIONS; //TODO: move this to CompletionEngineOptions. - final static Logger logger = LoggerFactory.getLogger(VscodeCompletionEngineAdapter.class); private SimpleLanguageServer server; private ICompletionEngine engine; @@ -129,6 +128,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { if (documents.get(params) != null) { TextDocument doc = documents.getDocumentSnapshot(params.getTextDocument()); return Mono.fromCallable(() -> { + log.info("Starting completion handling"); if (resolver!=null) { //Assumes we don't have more than one completion request in flight from the client. // So when a new request arrives we can forget about the old unresolved items: @@ -155,12 +155,14 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { try { items.add(adaptItem(doc, c, sortkeys)); } catch (Exception e) { - logger.error("error computing completion", e); + log.error("error computing completion", e); } } list.setItems(items); return list; }) + .doOnNext(x -> log.info("Got {} completions", x.getItems().size())) + .doAfterTerminate(() -> log.info("Completion handling terminated!")) .subscribeOn(Schedulers.elastic()); //!!! without this the mono will just be computed on the same thread that calls it. } return Mono.just(SimpleTextDocumentService.NO_COMPLETIONS); @@ -246,7 +248,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { return Optional.of(vscodeEdit); } } catch (Exception e) { - LOG.get().error("{}", e); + log.error("{}", e); return Optional.empty(); } } @@ -269,7 +271,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { return StringUtil.stripIndentation(refIndent, newText); } } catch (BadLocationException e) { - LOG.get().error("{}", e); + log.error("{}", e); } return newText; } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index ac7b1b09d..08e7dd97d 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -10,8 +10,6 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.languageserver.util; -import static org.springframework.ide.vscode.commons.util.AsyncRunner.thenLog; - import java.lang.management.ManagementFactory; import java.net.URI; import java.nio.file.Paths; @@ -264,6 +262,7 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC if (ih!=null){ ih.accept(params); } + log.info("Returning server capabilities to client: {}", result.getCapabilities()); return CompletableFuture.completedFuture(result); } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index c81d1274e..e470dd5aa 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.springframework.ide.vscode.commons.languageserver.util; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -55,6 +54,8 @@ import org.eclipse.lsp4j.WorkspaceEdit; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.services.LanguageClient; import org.eclipse.lsp4j.services.TextDocumentService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.ide.vscode.commons.languageserver.quickfix.Quickfix; import org.springframework.ide.vscode.commons.util.Assert; import org.springframework.ide.vscode.commons.util.AsyncRunner; @@ -69,6 +70,8 @@ import com.google.common.collect.ImmutableList; public class SimpleTextDocumentService implements TextDocumentService, DocumentEventListenerManager { + private static Logger log = LoggerFactory.getLogger(SimpleTextDocumentService.class); + final private SimpleLanguageServer server; private Map documents = new HashMap<>(); private ListenerList documentChangeListeners = new ListenerList<>(); @@ -278,6 +281,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE @Override public CompletableFuture, CompletionList>> completion(CompletionParams position) { + log.info("completion request received"); CompletionHandler h = completionHandler; if (h!=null) { return completionHandler.handle(position) @@ -289,13 +293,19 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE @Override public CompletableFuture resolveCompletionItem(CompletionItem unresolved) { - return async.invoke(() -> { - CompletionResolveHandler h = completionResolveHandler; - if (h!=null) { - return h.handle(unresolved); - } - return null; - }); + log.info("Completion item resolve request received: {}", unresolved.getLabel()); + return async.invoke(() -> { + try { + CompletionResolveHandler h = completionResolveHandler; + if (h!=null) { + log.info("Completion item resolve request starting {}", unresolved.getLabel()); + return h.handle(unresolved); + } + } finally { + log.info("Completion item resolve request terminated."); + } + return null; + }); } @Override diff --git a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentRegion.java b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentRegion.java index 015bb237f..2165d1dcf 100644 --- a/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentRegion.java +++ b/headless-services/commons/commons-util/src/main/java/org/springframework/ide/vscode/commons/util/text/DocumentRegion.java @@ -8,7 +8,6 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ - package org.springframework.ide.vscode.commons.util.text; import java.util.ArrayList;