Generelaz live hover api to support multiple highlight ranges

This commit is contained in:
Kris De Volder
2017-10-24 13:19:59 -07:00
parent 67626d2ef9
commit 4a0fde19f9
10 changed files with 43 additions and 21 deletions

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.autowired;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -28,6 +29,8 @@ 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;
/**
* @author Martin Lippert
*/
@@ -78,7 +81,7 @@ public class AutowiredHoverProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
try {
for (SpringBootApp bootApp : runningApps) {
try {
@@ -86,7 +89,7 @@ public class AutowiredHoverProvider implements HoverProvider {
if (liveBeans != null && liveBeans.length() > 0) {
Range range = getLiveHoverHint(annotation, doc, liveBeans);
if (range != null) {
return range;
return ImmutableList.of(range);
}
}
}

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -35,6 +36,8 @@ 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;
/**
* @author Martin Lippert
*/
@@ -94,7 +97,7 @@ public class ComponentHoverProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
try {
for (SpringBootApp bootApp : runningApps) {
try {
@@ -102,7 +105,7 @@ public class ComponentHoverProvider implements HoverProvider {
if (liveBeans != null && liveBeans.length() > 0) {
Range range = getLiveHoverHint(annotation, doc, liveBeans);
if (range != null) {
return range;
return ImmutableList.of(range);
}
}
}

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.conditionals;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -34,6 +35,8 @@ 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;
/**
*
* Provides live hovers and hints for @ConditionalOn... Spring Boot annotations from running
@@ -48,14 +51,14 @@ public class ConditionalsLiveHoverProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
try {
if (runningApps.length > 0) {
ConditionalParserFromRunningApp parser = new ConditionalParserFromRunningApp();
Optional<List<RunningAppConditional>> val = parser.parse(annotation, runningApps);
if (val.isPresent()) {
Range hoverRange = doc.toRange(annotation.getStartPosition(), annotation.getLength());
return hoverRange;
return ImmutableList.of(hoverRange);
}
}
} catch (BadLocationException e) {

View File

@@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot.java.handlers;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -141,9 +142,9 @@ public class BootJavaHoverProvider implements HoverHandler {
if (qualifiedName != null) {
HoverProvider provider = this.hoverProviders.get(qualifiedName);
if (provider != null) {
Range range = provider.getLiveHoverHint(annotation, document, runningApps);
if (range != null) {
result.add(range);
Collection<Range> hints = provider.getLiveHoverHints(annotation, document, runningApps);
if (hints!=null) {
result.addAll(hints);
}
}
}

View File

@@ -10,6 +10,7 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.handlers;
import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import org.eclipse.jdt.core.dom.ASTNode;
@@ -20,12 +21,14 @@ import org.eclipse.lsp4j.Range;
import org.springframework.ide.vscode.commons.boot.app.cli.SpringBootApp;
import org.springframework.ide.vscode.commons.util.text.TextDocument;
import com.google.common.collect.ImmutableList;
/**
* @author Martin Lippert
*/
public interface HoverProvider {
CompletableFuture<Hover> provideHover(ASTNode node, Annotation annotation, ITypeBinding type, int offset, TextDocument doc, SpringBootApp[] runningApps);
Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps);
Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps);
}

View File

@@ -10,12 +10,14 @@
*******************************************************************************/
package org.springframework.ide.vscode.boot.java.profiles;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Annotation;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.lsp4j.Hover;
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
@@ -71,14 +73,15 @@ public class ActiveProfilesProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
try {
if (runningApps.length > 0) {
return doc.toRange(annotation.getStartPosition(), annotation.getLength());
Name node = annotation.getTypeName();
return ImmutableList.of(doc.toRange(node.getStartPosition(), node.getLength()));
}
} catch (BadLocationException e) {
Log.log(e);
}
return null;
return ImmutableList.of();
}
}

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.requestmapping;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
@@ -40,6 +41,8 @@ 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;
/**
* @author Martin Lippert
*/
@@ -52,13 +55,13 @@ public class RequestMappingHoverProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
try {
if (runningApps.length > 0) {
Optional<RequestMappingMethod> val = getRequestMappingMethodFromRunningApp(annotation, runningApps);
if (val.isPresent()) {
Range hoverRange = doc.toRange(annotation.getStartPosition(), annotation.getLength());
return hoverRange;
return ImmutableList.of(hoverRange);
}
}
}

View File

@@ -11,6 +11,7 @@
package org.springframework.ide.vscode.boot.java.value;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -61,7 +62,7 @@ public class ValueHoverProvider implements HoverProvider {
}
@Override
public Range getLiveHoverHint(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
public Collection<Range> getLiveHoverHints(Annotation annotation, TextDocument doc, SpringBootApp[] runningApps) {
return null;
}

View File

@@ -13,6 +13,7 @@ package org.springframework.ide.vscode.boot.java.profile;
import java.time.Duration;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.ide.vscode.commons.util.text.LanguageId;
import org.springframework.ide.vscode.languageserver.testharness.Editor;
@@ -55,7 +56,7 @@ public class ActiveProfilesHoverTest {
"import org.springframework.context.annotation.Profile;\n" +
"\n" +
"@Configuration\n" +
"@Profile(\"local\")\n" +
"@Profile({\"local-profile\", \"inactive\", \"testing-profile\"})\n" +
"public class LocalConfig {\n" +
"}"
);
@@ -64,9 +65,10 @@ public class ActiveProfilesHoverTest {
editor.assertHoverContains("@Profile", "foo.bar.RunningApp");
editor.assertHoverContains("@Profile", "22022");
editor.assertHighlights(
"@Profile(\"local\")"
);
//TODO:
// editor.assertHighlights(
// "@Profile", "local-profile", "testing-profile"
// );
}