Spring Data repo CA consecutive invocation while "query" is built

This commit is contained in:
aboyko
2023-03-06 19:29:16 -05:00
parent 86fd1e7c3a
commit c2a21e4002
8 changed files with 83 additions and 8 deletions

View File

@@ -26,9 +26,10 @@ public class FindByCompletionProposal implements ICompletionProposal {
private Renderable doc;
private Optional<DocumentEdits> additionalEdits;
private String filter;
private boolean triggerNextCompletion;
public FindByCompletionProposal(String label, CompletionItemKind kind, DocumentEdits edits, String details,
Renderable doc, Optional<DocumentEdits> additionalEdits, String filter) {
Renderable doc, Optional<DocumentEdits> additionalEdits, String filter, boolean triggerNextCompletion) {
super();
this.label = label;
this.kind = kind;
@@ -37,9 +38,10 @@ public class FindByCompletionProposal implements ICompletionProposal {
this.doc = doc;
this.additionalEdits = additionalEdits;
this.filter = filter;
this.triggerNextCompletion = triggerNextCompletion;
}
public static ICompletionProposal createProposal(int offset, CompletionItemKind completionItemKind, String prefix, String label, String completion) {
public static ICompletionProposal createProposal(int offset, CompletionItemKind completionItemKind, String prefix, String label, String completion, boolean triggerNextCompletion) {
DocumentEdits edits = new DocumentEdits(null, false);
String filter = label;
if (prefix != null && label.startsWith(prefix)) {
@@ -54,7 +56,7 @@ public class FindByCompletionProposal implements ICompletionProposal {
}
DocumentEdits additionalEdits = new DocumentEdits(null, false);
return new FindByCompletionProposal(label, completionItemKind, edits, null, null, Optional.of(additionalEdits), filter);
return new FindByCompletionProposal(label, completionItemKind, edits, null, null, Optional.of(additionalEdits), filter, triggerNextCompletion);
}
@Override
@@ -92,4 +94,9 @@ public class FindByCompletionProposal implements ICompletionProposal {
return filter;
}
@Override
public boolean isTriggeringNextCompletionRequest() {
return triggerNextCompletion;
}
}

View File

@@ -32,7 +32,7 @@ public class DataRepositoryQueryStartCompletionProvider implements DataRepositor
for(QueryMethodSubject queryMethodSubject : QueryMethodSubject.QUERY_METHOD_SUBJECTS){
String toInsert = queryMethodSubject.key() + "By";
if(prefix == null || toInsert.startsWith(localPrefix)||isOffsetAfterWhitespace(doc, offset)) {
completions.add(FindByCompletionProposal.createProposal(offset, CompletionItemKind.Text, prefix, toInsert, toInsert));
completions.add(FindByCompletionProposal.createProposal(offset, CompletionItemKind.Text, prefix, toInsert, toInsert, true));
}
}
}

View File

@@ -56,6 +56,6 @@ public class DataRepositoryStandardCompletionProvider implements DataRepositoryC
completion.append(StringUtils.uncapitalize(domainProperty.getName()));
completion.append(");");
return FindByCompletionProposal.createProposal(offset, CompletionItemKind.Method, prefix, label.toString(), completion.toString());
return FindByCompletionProposal.createProposal(offset, CompletionItemKind.Method, prefix, label.toString(), completion.toString(), false);
}
}

View File

@@ -94,7 +94,7 @@ public class DataRepositoryPrefixSensitiveCompletionProvider implements DataRepo
DocumentEdits edits = new DocumentEdits(null, false);
edits.replace(offset - lastWord.length(), offset, toReplace);
DocumentEdits additionalEdits = new DocumentEdits(null, false);
ICompletionProposal proposal = new FindByCompletionProposal(toReplace, CompletionItemKind.Text, edits, "property " + toReplace, null, Optional.of(additionalEdits), lastWord);
ICompletionProposal proposal = new FindByCompletionProposal(toReplace, CompletionItemKind.Text, edits, "property " + toReplace, null, Optional.of(additionalEdits), lastWord, true);
completions.add(proposal);
}
}
@@ -117,7 +117,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);
ICompletionProposal proposal = new FindByCompletionProposal(methodName, CompletionItemKind.Method, edits, null, null, Optional.of(additionalEdits), signature, false);
completions.add(proposal);
}