refactor AnnotationAttributeCompletionProviders to also return labels

This commit is contained in:
vudayani
2024-09-25 21:08:24 +05:30
committed by Martin Lippert
parent 46778a7d8a
commit 4a63ffd5e7
10 changed files with 53 additions and 76 deletions

View File

@@ -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<String> candidates = completionProvider.getCompletionCandidates(project);
if (completionProvider instanceof CronExpressionCompletionProvider) {
Map<String, String> proposals = completionProvider.getCompletionCandidatesWithLabels(project);
Map<String, String> 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<String, String> 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<String, String> proposals = completionProvider.getCompletionCandidates(project);
Map<String, String> 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<String, String> 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<String> 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);
}
}
}
}

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
return new ArrayList<>();
}
default Map<String, String> getCompletionCandidatesWithLabels(IJavaProject project) {
return new HashMap<>();
}
Map<String, String> getCompletionCandidates(IJavaProject project);
}

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> getCompletionCandidates(IJavaProject project) {
return Arrays.stream(this.springIndex.getBeansOfProject(project.getElementName()))
.map(bean -> bean.getName())
.distinct()
.toList();
.collect(Collectors.toMap(key -> key, value -> value));
}

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> 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<String> findAllNamedValues(Bean[] beans) {

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> getCompletionCandidates(IJavaProject project) {
Bean[] beans = this.springIndex.getBeansOfProject(project.getElementName());
return findAllProfiles(beans)
.distinct()
.toList();
.collect(Collectors.toMap(key -> key, value -> value));
}
private Stream<String> findAllProfiles(Bean[] beans) {

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> 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<String> findAllQualifiers(Bean[] beans) {

View File

@@ -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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> 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));
}
}

View File

@@ -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<String> findResources(IJavaProject project) {
List<String> resources = IClasspathUtil.getClasspathResources(project.getClasspath()).stream()
private Map<String, String> findResources(IJavaProject project) {
Map<String, String> resources = IClasspathUtil.getClasspathResources(project.getClasspath()).stream()
.distinct()
.sorted(new Comparator<String>() {
@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<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> getCompletionCandidates(IJavaProject project) {
return findResources(project);
}

View File

@@ -39,7 +39,7 @@ public class CronExpressionCompletionProvider implements AnnotationAttributeComp
@Override
public Map<String, String> getCompletionCandidatesWithLabels(IJavaProject project) {
public Map<String, String> getCompletionCandidates(IJavaProject project) {
return CRON_EXPRESSIONS_MAP;
}
}

View File

@@ -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<String> SCOPE_COMPLETIONS = List.of(
"application",
"globalSession",
"prototype",
"request",
"session",
"singleton",
"websocket"
);
private static final Map<String, String> SCOPE_COMPLETIONS = Map.of(
"application", "application",
"globalSession", "globalSession",
"prototype", "prototype",
"request", "request",
"session", "session",
"singleton", "singleton",
"websocket", "websocket"
);
@Override
public List<String> getCompletionCandidates(IJavaProject project) {
public Map<String, String> getCompletionCandidates(IJavaProject project) {
return SCOPE_COMPLETIONS;
}