From cff34afdd5d2e5b7b46773c5440f7a73a5b90b0f Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Wed, 4 Oct 2017 14:44:05 -0700 Subject: [PATCH] Add back 'fake' highlighter for testing. Make it disabled by default (small code edit needed to enable it). --- .../boot/java/BootJavaLanguageServer.java | 11 +++- .../ide/vscode/boot/java/WordHighlighter.java | 55 +++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/WordHighlighter.java diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java index f9b7ba00f..945f8cd04 100644 --- a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServer.java @@ -44,6 +44,7 @@ import org.springframework.ide.vscode.boot.java.value.ValuePropertyReferencesPro import org.springframework.ide.vscode.boot.metadata.SpringPropertyIndexProvider; import org.springframework.ide.vscode.commons.gradle.GradleCore; import org.springframework.ide.vscode.commons.gradle.GradleProjectFinderStrategy; +import org.springframework.ide.vscode.commons.languageserver.HighlightParams; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine; import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter; import org.springframework.ide.vscode.commons.languageserver.java.DefaultJavaProjectFinder; @@ -80,6 +81,8 @@ public class BootJavaLanguageServer extends SimpleLanguageServer { private final SpringIndexer indexer; private final SpringLiveHoverWatchdog liveHoverWatchdog; + private final WordHighlighter testHightlighter = null; //new WordHighlighter("foo"); + public BootJavaLanguageServer(JavaProjectFinder javaProjectFinder, SpringPropertyIndexProvider indexProvider) { super("vscode-boot-java"); @@ -106,8 +109,12 @@ public class BootJavaLanguageServer extends SimpleLanguageServer { liveHoverWatchdog = new SpringLiveHoverWatchdog(this, hoverInfoProvider); documents.onDidChangeContent(params -> { TextDocument doc = params.getDocument(); - liveHoverWatchdog.watchDocument(doc.getUri()); - liveHoverWatchdog.update(doc.getUri()); + if (testHightlighter!=null) { + getClient().highlight(new HighlightParams(params.getDocument().getId(), testHightlighter.apply(doc))); + } else { + liveHoverWatchdog.watchDocument(doc.getUri()); + liveHoverWatchdog.update(doc.getUri()); + } }); ReferencesHandler referencesHandler = createReferenceHandler(this, javaProjectFinder); diff --git a/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/WordHighlighter.java b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/WordHighlighter.java new file mode 100644 index 000000000..b43d35ffb --- /dev/null +++ b/headless-services/boot-java-language-server/src/main/java/org/springframework/ide/vscode/boot/java/WordHighlighter.java @@ -0,0 +1,55 @@ +/******************************************************************************* + * 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; + +import java.util.List; +import java.util.function.Function; + +import org.eclipse.lsp4j.Range; +import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; +import org.springframework.ide.vscode.commons.util.BadLocationException; +import org.springframework.ide.vscode.commons.util.Log; +import org.springframework.ide.vscode.commons.util.text.TextDocument; + +import com.google.common.collect.ImmutableList; + +/** + * Sample implementation of a 'highlighter' that can be used with {@link SimpleLanguageServer}.highlightWith. + *

+ * Finds every occurence of a given word and highlights it. + * + * @author Kris De Volder + */ +public class WordHighlighter implements Function> { + + private final String word; + + public WordHighlighter(String word) { + super(); + this.word = word; + } + + @Override + public List apply(TextDocument doc) { + String text = doc.get(); + int wordStart = text.indexOf(word); + ImmutableList.Builder highlights = ImmutableList.builder(); + while (wordStart>=0) { + try { + highlights.add(doc.toRange(wordStart, word.length())); + } catch (BadLocationException e) { + Log.log(e); + } + wordStart = text.indexOf(word, wordStart+word.length()); + } + return highlights.build(); + } +}