diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/DataRepositoryQueryStartCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/DataRepositoryQueryStartCompletionProvider.java index 8edfab548..e3c68809e 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/DataRepositoryQueryStartCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/DataRepositoryQueryStartCompletionProvider.java @@ -31,7 +31,7 @@ public class DataRepositoryQueryStartCompletionProvider implements DataRepositor String localPrefix = DataRepositoryPrefixSensitiveCompletionProvider.findLastJavaIdentifierPart(prefix); for(QueryMethodSubject queryMethodSubject : QueryMethodSubject.QUERY_METHOD_SUBJECTS){ String toInsert = queryMethodSubject.key() + "By"; - if(prefix == null || toInsert.startsWith(localPrefix)||isOffsetAfterWhitespace(doc, offset)) { + if(prefix == null || (toInsert.length() > localPrefix.length() && toInsert.startsWith(localPrefix)) || isOffsetAfterWhitespace(doc, offset)) { completions.add(FindByCompletionProposal.createProposal(offset, CompletionItemKind.Text, prefix, toInsert, toInsert, true)); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/prefixsensitive/DataRepositoryPrefixSensitiveCompletionProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/prefixsensitive/DataRepositoryPrefixSensitiveCompletionProvider.java index 20ab699f1..335b4f704 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/prefixsensitive/DataRepositoryPrefixSensitiveCompletionProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/providers/prefixsensitive/DataRepositoryPrefixSensitiveCompletionProvider.java @@ -42,10 +42,12 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo DataRepositoryMethodNameParseResult parseResult = new DataRepositoryMethodParser(localPrefix, repoDef).parseLocalPrefixForCompletion(); if(parseResult != null && parseResult.performFullCompletion()){ Map propertiesByName = getPropertiesByName(repoDef.getDomainType().getProperties()); - addMethodCompletionProposal(completions, offset, repoDef, localPrefix, prefix, parseResult, propertiesByName); + if (parseResult.lastWord() != null || !localPrefix.endsWith("By")) { + addMethodCompletionProposal(completions, offset, repoDef, localPrefix, prefix, parseResult, propertiesByName); + } if (parseResult.lastWord() == null || !propertiesByName.containsKey(parseResult.lastWord())) { - addPropertyProposals(completions, offset, repoDef, parseResult); + addPropertyProposals(completions, offset, propertiesByName, parseResult); } addPredicateKeywordProposals(completions, offset, prefix, parseResult, propertiesByName); } @@ -79,9 +81,9 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo return lastWord; } - private void addPropertyProposals(Collection completions, int offset, DataRepositoryDefinition repoDef, DataRepositoryMethodNameParseResult parseResult) { - for(DomainProperty property : repoDef.getDomainType().getProperties()){ - String toReplace = property.getName(); + private void addPropertyProposals(Collection completions, int offset, Map propertiesByName, DataRepositoryMethodNameParseResult parseResult) { + for (Map.Entry e : propertiesByName.entrySet()) { + String toReplace = e.getKey(); createLastWordReplacementCompletion(completions, offset, parseResult, parseResult.lastWord(), toReplace); } }