From 350560b8506c92ca5c7f48ff7bfe0127291b9d99 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 10 Apr 2019 13:42:51 +0200 Subject: [PATCH] improved XML bean class content assist for improved matching, sorting, and performance --- .../vscode/boot/xml/SpringXMLCompletionEngine.java | 5 +++-- .../ide/vscode/boot/xml/TypeCompletionProposal.java | 13 ++++++++++--- .../boot/xml/TypeCompletionProposalProvider.java | 6 +++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java index 4f8684a82..f07052060 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/SpringXMLCompletionEngine.java @@ -66,10 +66,11 @@ public class SpringXMLCompletionEngine implements ICompletionEngine { DOMAttr attributeAt = dom.findAttrAt(offset); if (attributeAt != null) { - XMLCompletionProviderKey key = new XMLCompletionProviderKey(namespace, node.getNodeName(), attributeAt.getNodeName()); + XMLCompletionProviderKey key = new XMLCompletionProviderKey(namespace, node.getLocalName(), attributeAt.getNodeName()); XMLCompletionProvider completionProvider = this.completionProviders.get(key); if (completionProvider != null) { - return completionProvider.getCompletions(doc, namespace, node, attributeAt, scanner, offset); + Collection completions = completionProvider.getCompletions(doc, namespace, node, attributeAt, scanner, offset); + return completions; } } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposal.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposal.java index 691918646..7c28b3c98 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposal.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposal.java @@ -12,27 +12,29 @@ package org.springframework.ide.vscode.boot.xml; import org.eclipse.lsp4j.CompletionItemKind; import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; -import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; +import org.springframework.ide.vscode.commons.languageserver.completion.ScoreableProposal; import org.springframework.ide.vscode.commons.util.Renderable; /** * @author Martin Lippert */ -public class TypeCompletionProposal implements ICompletionProposal { +public class TypeCompletionProposal extends ScoreableProposal { private final String label; private final CompletionItemKind kind; private final DocumentEdits edits; private final String detail; private final Renderable documentation; + private final double score; - public TypeCompletionProposal(String label, CompletionItemKind kind, DocumentEdits edits, String detail, Renderable documentation) { + public TypeCompletionProposal(String label, CompletionItemKind kind, DocumentEdits edits, String detail, Renderable documentation, double score) { super(); this.label = label; this.kind = kind; this.edits = edits; this.detail = detail; this.documentation = documentation; + this.score = score; } @Override @@ -60,4 +62,9 @@ public class TypeCompletionProposal implements ICompletionProposal { return this.documentation; } + @Override + public double getBaseScore() { + return this.score; + } + } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposalProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposalProvider.java index a74064d18..462fc441f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposalProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/xml/TypeCompletionProposalProvider.java @@ -56,8 +56,8 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider { prefix = prefix.substring(1); } - Flux> types = project.getIndex().fuzzySearchTypes(prefix, true, true); -// Flux> types = project.getIndex().camelcaseSearchTypes(prefix, true, true); +// Flux> types = project.getIndex().fuzzySearchTypes(prefix, true, true); + Flux> types = project.getIndex().camelcaseSearchTypes(prefix, true, true); return types .filter(result -> result.getT1() != null && result.getT1().getElementName() != null && result.getT1().getElementName().length() > 0) @@ -94,7 +94,7 @@ public class TypeCompletionProposalProvider implements XMLCompletionProvider { Renderable renderable = null; - return new TypeCompletionProposal(label, kind, edits, type.getFullyQualifiedName(), renderable); + return new TypeCompletionProposal(label, kind, edits, type.getFullyQualifiedName(), renderable, t.getT2()); } }