diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProcessor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProcessor.java index 27d157374..53399807c 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProcessor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProcessor.java @@ -28,7 +28,6 @@ import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.QualifiedName; import org.eclipse.jdt.core.dom.SimpleName; import org.eclipse.jdt.core.dom.StringLiteral; -import org.springframework.ide.vscode.boot.java.cron.CronExpressionCompletionProvider; import org.springframework.ide.vscode.boot.java.handlers.CompletionProvider; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; @@ -123,40 +122,22 @@ public class AnnotationAttributeCompletionProcessor implements CompletionProvide AnnotationAttributeCompletionProvider completionProvider = this.completionProviders.get(attributeName); if (completionProvider != null) { - List candidates = completionProvider.getCompletionCandidates(project); - if (completionProvider instanceof CronExpressionCompletionProvider) { - Map proposals = completionProvider.getCompletionCandidatesWithLabels(project); - Map filteredProposals = proposals.entrySet().stream() - .filter(candidate -> candidate.getKey().toLowerCase().contains(filterPrefix.toLowerCase())) - .filter(candidate -> !alreadyMentionedValues.contains(candidate.getKey())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - double score = filteredProposals.size(); - for (Map.Entry entry : filteredProposals.entrySet()) { - String candidate = entry.getKey(); - DocumentEdits edits = new DocumentEdits(doc, false); - edits.replace(startOffset, endOffset, createReplacementText.apply(candidate)); - AnnotationAttributeCompletionProposal proposal = new AnnotationAttributeCompletionProposal(edits, - candidate, entry.getValue(), null, score--); - completions.add(proposal); + Map proposals = completionProvider.getCompletionCandidates(project); + Map filteredProposals = proposals.entrySet().stream() + .filter(candidate -> candidate.getKey().toLowerCase().contains(filterPrefix.toLowerCase())) + .filter(candidate -> !alreadyMentionedValues.contains(candidate.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + double score = filteredProposals.size(); + for (Map.Entry entry : filteredProposals.entrySet()) { + String candidate = entry.getKey(); + DocumentEdits edits = new DocumentEdits(doc, false); + edits.replace(startOffset, endOffset, createReplacementText.apply(candidate)); + + AnnotationAttributeCompletionProposal proposal = new AnnotationAttributeCompletionProposal(edits, + candidate, entry.getValue(), null, score--); + completions.add(proposal); - } - } else { - - List filteredCandidates = candidates.stream() -// .filter(candidate -> candidate.toLowerCase().startsWith(filterPrefix.toLowerCase())) - .filter(candidate -> candidate.toLowerCase().contains(filterPrefix.toLowerCase())) - .filter(candidate -> !alreadyMentionedValues.contains(candidate)).collect(Collectors.toList()); - double score = filteredCandidates.size(); - for (String candidate : filteredCandidates) { - - DocumentEdits edits = new DocumentEdits(doc, false); - edits.replace(startOffset, endOffset, createReplacementText.apply(candidate)); - - AnnotationAttributeCompletionProposal proposal = new AnnotationAttributeCompletionProposal(edits, - candidate, candidate, null, score--); - completions.add(proposal); - } } } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProvider.java index 16212224e..5a0b6d331 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/annotations/AnnotationAttributeCompletionProvider.java @@ -10,22 +10,12 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.java.annotations; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; import java.util.Map; import org.springframework.ide.vscode.commons.java.IJavaProject; public interface AnnotationAttributeCompletionProvider { - default List getCompletionCandidates(IJavaProject project) { - return new ArrayList<>(); - } - - - default Map getCompletionCandidatesWithLabels(IJavaProject project) { - return new HashMap<>(); - } + Map getCompletionCandidates(IJavaProject project); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java index 10a4539a1..13bcd3215 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/DependsOnCompletionProcessor.java @@ -11,7 +11,8 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Arrays; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; import org.springframework.ide.vscode.boot.java.annotations.AnnotationAttributeCompletionProvider; @@ -235,11 +236,11 @@ public class DependsOnCompletionProcessor implements AnnotationAttributeCompleti // } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { return Arrays.stream(this.springIndex.getBeansOfProject(project.getElementName())) .map(bean -> bean.getName()) .distinct() - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/NamedCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/NamedCompletionProvider.java index 895e27099..7d864ba43 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/NamedCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/NamedCompletionProvider.java @@ -11,7 +11,8 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Arrays; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; @@ -32,7 +33,7 @@ public class NamedCompletionProvider implements AnnotationAttributeCompletionPro } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName()); @@ -40,7 +41,7 @@ public class NamedCompletionProvider implements AnnotationAttributeCompletionPro findAllNamedValues(beans), Arrays.stream(beans).map(bean -> bean.getName())) .distinct() - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); } private Stream findAllNamedValues(Bean[] beans) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ProfileCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ProfileCompletionProvider.java index 85cc4d0dc..47d6860e4 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ProfileCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ProfileCompletionProvider.java @@ -11,7 +11,8 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Arrays; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; @@ -32,13 +33,13 @@ public class ProfileCompletionProvider implements AnnotationAttributeCompletionP } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName()); return findAllProfiles(beans) .distinct() - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); } private Stream findAllProfiles(Bean[] beans) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/QualifierCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/QualifierCompletionProvider.java index edd49d7ec..bc6daf4f2 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/QualifierCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/QualifierCompletionProvider.java @@ -11,7 +11,8 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Arrays; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; @@ -32,7 +33,7 @@ public class QualifierCompletionProvider implements AnnotationAttributeCompletio } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName()); @@ -40,7 +41,7 @@ public class QualifierCompletionProvider implements AnnotationAttributeCompletio findAllQualifiers(beans), Arrays.stream(beans).map(bean -> bean.getName())) .distinct() - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); } private Stream findAllQualifiers(Bean[] beans) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ResourceCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ResourceCompletionProvider.java index d9f51a576..d16f8b63b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ResourceCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/beans/ResourceCompletionProvider.java @@ -11,7 +11,8 @@ package org.springframework.ide.vscode.boot.java.beans; import java.util.Arrays; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import org.springframework.ide.vscode.boot.index.SpringMetamodelIndex; import org.springframework.ide.vscode.boot.java.annotations.AnnotationAttributeCompletionProvider; @@ -30,13 +31,13 @@ public class ResourceCompletionProvider implements AnnotationAttributeCompletion } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName()); return Arrays.stream(beans).map(bean -> bean.getName()) .distinct() - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/conditionalonresource/ConditionalOnResourceCompletionProcessor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/conditionalonresource/ConditionalOnResourceCompletionProcessor.java index b18d8760e..0fb39b9b2 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/conditionalonresource/ConditionalOnResourceCompletionProcessor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/conditionalonresource/ConditionalOnResourceCompletionProcessor.java @@ -12,7 +12,8 @@ package org.springframework.ide.vscode.boot.java.conditionalonresource; import java.nio.file.Paths; import java.util.Comparator; -import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import org.springframework.ide.vscode.boot.java.annotations.AnnotationAttributeCompletionProvider; import org.springframework.ide.vscode.commons.java.IClasspathUtil; @@ -23,8 +24,8 @@ import org.springframework.ide.vscode.commons.java.IJavaProject; */ public class ConditionalOnResourceCompletionProcessor implements AnnotationAttributeCompletionProvider { - private List findResources(IJavaProject project) { - List resources = IClasspathUtil.getClasspathResources(project.getClasspath()).stream() + private Map findResources(IJavaProject project) { + Map resources = IClasspathUtil.getClasspathResources(project.getClasspath()).stream() .distinct() .sorted(new Comparator() { @Override @@ -34,13 +35,13 @@ public class ConditionalOnResourceCompletionProcessor implements AnnotationAttri }) .map(r -> r.replaceAll("\\\\", "/")) .map(r -> "classpath:" + r) - .toList(); + .collect(Collectors.toMap(key -> key, value -> value)); return resources; } @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { return findResources(project); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionCompletionProvider.java index 684de6bf9..cc1994eb6 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionCompletionProvider.java @@ -39,7 +39,7 @@ public class CronExpressionCompletionProvider implements AnnotationAttributeComp @Override - public Map getCompletionCandidatesWithLabels(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { return CRON_EXPRESSIONS_MAP; } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/scope/ScopeCompletionProcessor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/scope/ScopeCompletionProcessor.java index fe51b8090..8c1510743 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/scope/ScopeCompletionProcessor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/scope/ScopeCompletionProcessor.java @@ -10,7 +10,7 @@ *******************************************************************************/ package org.springframework.ide.vscode.boot.java.scope; -import java.util.List; +import java.util.Map; import org.springframework.ide.vscode.boot.java.annotations.AnnotationAttributeCompletionProvider; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -20,18 +20,18 @@ import org.springframework.ide.vscode.commons.java.IJavaProject; */ public class ScopeCompletionProcessor implements AnnotationAttributeCompletionProvider { - private static final List SCOPE_COMPLETIONS = List.of( - "application", - "globalSession", - "prototype", - "request", - "session", - "singleton", - "websocket" - ); + private static final Map SCOPE_COMPLETIONS = Map.of( + "application", "application", + "globalSession", "globalSession", + "prototype", "prototype", + "request", "request", + "session", "session", + "singleton", "singleton", + "websocket", "websocket" + ); @Override - public List getCompletionCandidates(IJavaProject project) { + public Map getCompletionCandidates(IJavaProject project) { return SCOPE_COMPLETIONS; }