[spring-data] Completion label includes signature. Limit method proposal
This commit is contained in:
@@ -17,6 +17,7 @@ import org.springframework.ide.vscode.boot.java.data.DataRepositoryDefinition;
|
||||
import org.springframework.ide.vscode.boot.java.data.DomainProperty;
|
||||
import org.springframework.ide.vscode.boot.java.data.DomainType;
|
||||
import org.springframework.ide.vscode.boot.java.data.FindByCompletionProposal;
|
||||
import org.springframework.ide.vscode.boot.java.data.providers.prefixsensitive.DataRepositoryPrefixSensitiveCompletionProvider;
|
||||
import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal;
|
||||
import org.springframework.ide.vscode.commons.util.text.IDocument;
|
||||
import org.springframework.util.StringUtils;
|
||||
@@ -26,11 +27,15 @@ import org.springframework.util.StringUtils;
|
||||
* @author Martin Lippert
|
||||
*/
|
||||
public class DataRepositoryStandardCompletionProvider implements DataRepositoryCompletionProvider {
|
||||
|
||||
private static final String FIND_BY = "findBy";
|
||||
|
||||
public void addProposals(Collection<ICompletionProposal> completions, IDocument doc, int offset, String prefix, DataRepositoryDefinition repo) {
|
||||
DomainType domainType = repo.getDomainType();
|
||||
for (DomainProperty property : domainType.getPropertiesByName().values()) {
|
||||
completions.add(generateCompletionProposal(offset, prefix, repo, property));
|
||||
if (FIND_BY.startsWith(DataRepositoryPrefixSensitiveCompletionProvider.findLastJavaIdentifierPart(prefix))) {
|
||||
DomainType domainType = repo.getDomainType();
|
||||
for (DomainProperty property : domainType.getPropertiesByName().values()) {
|
||||
completions.add(generateCompletionProposal(offset, prefix, repo, property));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo
|
||||
DataRepositoryMethodNameParseResult parseResult = new DataRepositoryMethodParser(localPrefix, repoDef).parseLocalPrefixForCompletion();
|
||||
if(parseResult != null && parseResult.performFullCompletion()){
|
||||
Map<String, DomainProperty> propertiesByName = repoDef.getDomainType().getPropertiesByName();
|
||||
if (parseResult.lastWord() != null || !localPrefix.endsWith("By")) {
|
||||
if (isEndingWithProperty(parseResult, propertiesByName) || isEndingWithPredicateKeyWord(localPrefix, propertiesByName)) {
|
||||
addMethodCompletionProposal(completions, offset, repoDef, localPrefix, prefix, parseResult, propertiesByName);
|
||||
}
|
||||
|
||||
@@ -51,6 +51,21 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo
|
||||
addPredicateKeywordProposals(completions, offset, prefix, parseResult, propertiesByName);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isEndingWithPredicateKeyWord(String localPrefix, Map<String, DomainProperty> propertiesByName) {
|
||||
for (QueryPredicateKeywordInfo predicate : QueryPredicateKeywordInfo.PREDICATE_KEYWORDS) {
|
||||
if (predicate.type() == DataRepositoryMethodKeywordType.TERMINATE_EXPRESSION
|
||||
&& localPrefix.endsWith(predicate.keyword())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isEndingWithProperty(DataRepositoryMethodNameParseResult parseResult, Map<String, DomainProperty> propertiesByName) {
|
||||
return parseResult.lastWord() != null
|
||||
&& (propertiesByName.containsKey(parseResult.lastWord()) || findExpressionType(propertiesByName, parseResult.lastWord()) != null);
|
||||
}
|
||||
|
||||
private void addPredicateKeywordProposals(Collection<ICompletionProposal> completions, int offset, String prefix, DataRepositoryMethodNameParseResult parseResult, Map<String, DomainProperty> propertiesByName) {
|
||||
String lastWord = findLastWordWithoutPrefixingProperty(parseResult, propertiesByName);
|
||||
@@ -118,7 +133,7 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo
|
||||
int replaceStart = calculateReplaceOffset(offset, localPrefix, fullPrefix, returnType);
|
||||
edits.replace(replaceStart, offset, newText.toString());
|
||||
DocumentEdits additionalEdits = new DocumentEdits(null, false);
|
||||
ICompletionProposal proposal = new FindByCompletionProposal(methodName, CompletionItemKind.Method, edits, null, null, Optional.of(additionalEdits), signature, false);
|
||||
ICompletionProposal proposal = new FindByCompletionProposal(signature, CompletionItemKind.Method, edits, null, null, Optional.of(additionalEdits), signature, false);
|
||||
completions.add(proposal);
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ public class DataRepositoryCompletionProcessorTest {
|
||||
|
||||
@Test
|
||||
void testUnknownAttribute() throws Exception {
|
||||
checkCompletions("findByUnknownObject", "List<Customer> findByUnknownObject(Object unknownObject);");
|
||||
checkCompletions("findByUnknownObject");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user