Skip to content

Commit 23ddf88

Browse files
committed
Separate "Add @query" CodeLens
1 parent 655b54e commit 23ddf88

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/DataRepositoryAotMetadataCodeLensProvider.java

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
*******************************************************************************/
1111
package org.springframework.ide.vscode.boot.java.data;
1212

13+
import java.util.ArrayList;
1314
import java.util.Arrays;
1415
import java.util.List;
1516
import java.util.Map;
@@ -25,6 +26,7 @@
2526
import org.eclipse.jdt.core.dom.MethodDeclaration;
2627
import org.eclipse.lsp4j.CodeLens;
2728
import org.eclipse.lsp4j.Command;
29+
import org.eclipse.lsp4j.Range;
2830
import org.eclipse.lsp4j.jsonrpc.CancelChecker;
2931
import org.slf4j.Logger;
3032
import org.slf4j.LoggerFactory;
@@ -44,6 +46,8 @@
4446
*/
4547
public class DataRepositoryAotMetadataCodeLensProvider implements CodeLensProvider {
4648

49+
private static final String COVERT_TO_QUERY_LABEL = "Add @Query";
50+
4751
private static final Logger log = LoggerFactory.getLogger(DataRepositoryAotMetadataCodeLensProvider.class);
4852

4953
private final DataRepositoryAotMetadataService repositoryMetadataService;
@@ -113,31 +117,29 @@ protected void provideCodeLens(CancelChecker cancelToken, MethodDeclaration node
113117

114118
if (isDataQuaryNonAnnotatedMethodCandidate(methodBinding)) {
115119
cancelToken.checkCanceled();
116-
getDataQuery(repositoryMetadataService, project, methodBinding).map(queryStatement -> createCodeLens(node, document, queryStatement)).ifPresent(resultAccumulator::add);
120+
getDataQuery(repositoryMetadataService, project, methodBinding)
121+
.map(queryStatement -> createCodeLenses(node, document, queryStatement))
122+
.ifPresent(cls -> cls.forEach(resultAccumulator::add));
117123
}
118124
}
119-
120-
private CodeLens createCodeLens(MethodDeclaration node, TextDocument document, String queryStatement) {
125+
126+
private List<CodeLens> createCodeLenses(MethodDeclaration node, TextDocument document, String queryStatement) {
127+
List<CodeLens> codeLenses = new ArrayList<>(2);
121128
try {
122129
IMethodBinding mb = node.resolveBinding();
123-
Command cmd = new Command();
124-
cmd.setTitle(queryStatement);
130+
Range range = document.toRange(node.getName().getStartPosition(), node.getName().getLength());
131+
Command queryTitle = new Command();
132+
queryTitle.setTitle(queryStatement);
133+
codeLenses.add(new CodeLens(range, queryTitle, null));
125134
if (mb != null) {
126-
cmd = refactorings.createFixCommand(queryStatement, createFixDescriptor(mb, document.getUri(), queryStatement));
135+
codeLenses.add(new CodeLens(range, refactorings.createFixCommand(COVERT_TO_QUERY_LABEL, createFixDescriptor(mb, document.getUri(), queryStatement)), null));
127136
}
128-
129-
CodeLens codeLens = new CodeLens();
130-
codeLens.setRange(document.toRange(node.getName().getStartPosition(), node.getName().getLength()));
131-
codeLens.setCommand(cmd);
132-
133-
return codeLens;
134-
135137
} catch (BadLocationException e) {
136138
log.error("bad location while calculating code lens for data repository query method", e);
137-
return null;
138139
}
140+
return codeLenses;
139141
}
140-
142+
141143
static FixDescriptor createFixDescriptor(IMethodBinding mb, String docUri, String queryStatement) {
142144
return new FixDescriptor(AddAnnotationOverMethod.class.getName(), List.of(docUri), "Convert into `@Query`")
143145
.withRecipeScope(RecipeScope.FILE)

headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/data/test/DataRepositoryAotMetadataCodeLensProviderTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ void codeLensOverMethod() throws Exception {
6565
Editor editor = harness.newEditor(LanguageId.JAVA, new String(Files.readAllBytes(filePath), StandardCharsets.UTF_8), filePath.toUri().toASCIIString());
6666

6767
editor.assertCodeLens("findUserByUsername", 1, "SELECT u FROM example.springdata.aot.User u WHERE u.username = :username");
68+
editor.assertCodeLens("findUserByUsername", 1, "Add @Query");
6869
}
6970

7071
@Test

0 commit comments

Comments
 (0)