AOT gen data query codelens preference

This commit is contained in:
aboyko
2025-05-22 15:32:12 -07:00
parent c7ffd3ee5a
commit 732d030c5a
8 changed files with 36 additions and 7 deletions

View File

@@ -56,4 +56,6 @@ public class Constants {
public static final String PREF_SYMBOLS_FROM_NEW_INDEX = "boot-java.java.symbols-from-new-index";
public static final String PREF_CODELENS_QUERY_METHODS = "boot-java.java.codelens-over-query-methods";
}

View File

@@ -203,6 +203,7 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi
javaSettings.put("symbols-from-new-index", preferenceStore.getBoolean(Constants.PREF_SYMBOLS_FROM_NEW_INDEX));
javaSettings.put("completions", javaCompletionSettings);
javaSettings.put("reconcilers", preferenceStore.getBoolean(Constants.PREF_JAVA_RECONCILE));
javaSettings.put("codelens-over-query-methods", preferenceStore.getBoolean(Constants.PREF_CODELENS_QUERY_METHODS));
bootJavaObj.put("jpql", preferenceStore.getBoolean(Constants.PREF_JPQL));
bootJavaObj.put("live-information", liveInformation);

View File

@@ -56,6 +56,9 @@ public class BootJavaPreferencesPage extends FieldEditorPreferencePage implement
// Experimental Bean Injections completion in Java editor
addField(new BooleanFieldEditor(Constants.PREF_COMPLETION_JAVA_INJECT_BEAN, "Inject Bean completion proposals in Java editor", fieldEditorParent));
// Show AOT generated query over Data Query methods
addField(new BooleanFieldEditor(Constants.PREF_CODELENS_QUERY_METHODS, "Show CodeLens with AOT generated query over Data Query methods", fieldEditorParent));
// Experimental Beans tree
addField(new BooleanFieldEditor(Constants.PREF_BEANS_STRUCTURE_TREE, "Beans structure tree in the outline view (experimental)", fieldEditorParent));

View File

@@ -66,6 +66,7 @@ public class PrefsInitializer extends AbstractPreferenceInitializer {
preferenceStore.setDefault(Constants.PREF_COMPLETION_JAVA_INJECT_BEAN, true);
preferenceStore.setDefault(Constants.PREF_BEANS_STRUCTURE_TREE, true);
preferenceStore.setDefault(Constants.PREF_SYMBOLS_FROM_NEW_INDEX, true);
preferenceStore.setDefault(Constants.PREF_CODELENS_QUERY_METHODS, true);
}
}

View File

@@ -224,6 +224,11 @@ public class BootJavaConfig implements InitializingBean {
return Boolean.TRUE.equals(b);
}
public boolean isEnabledCodeLensOverDataQueryMethods() {
Boolean b = settings.getBoolean("boot-java", "java", "codelens-over-query-methods");
return Boolean.TRUE.equals(b);
}
public Settings getRawSettings() {
return settings;
}

View File

@@ -182,7 +182,8 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
spelSemanticTokens = appContext.getBean(SpelSemanticTokens.class);
dataRepositoryAotMetadataService = appContext.getBean(DataRepositoryAotMetadataService.class);
codeLensHandler = createCodeLensEngine(springIndex, projectFinder, server, spelSemanticTokens, dataRepositoryAotMetadataService, appContext.getBean(RewriteRefactorings.class));
codeLensHandler = createCodeLensEngine(springIndex, projectFinder, server, spelSemanticTokens, dataRepositoryAotMetadataService,
appContext.getBean(RewriteRefactorings.class), config);
highlightsEngine = createDocumentHighlightEngine(appContext);
documents.onDocumentHighlight(highlightsEngine);
@@ -317,12 +318,13 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent
}
protected BootJavaCodeLensEngine createCodeLensEngine(SpringMetamodelIndex springIndex, JavaProjectFinder projectFinder, SimpleLanguageServer server,
SpelSemanticTokens spelSemanticTokens, DataRepositoryAotMetadataService repositoryAotMetadataService, RewriteRefactorings refactorings) {
SpelSemanticTokens spelSemanticTokens, DataRepositoryAotMetadataService repositoryAotMetadataService, RewriteRefactorings refactorings,
BootJavaConfig config) {
Collection<CodeLensProvider> codeLensProvider = new ArrayList<>();
codeLensProvider.add(new WebfluxHandlerCodeLensProvider(springIndex));
codeLensProvider.add(new CopilotCodeLensProvider(projectFinder, server, spelSemanticTokens));
codeLensProvider.add(new DataRepositoryAotMetadataCodeLensProvider(projectFinder, repositoryAotMetadataService, refactorings));
codeLensProvider.add(new DataRepositoryAotMetadataCodeLensProvider(projectFinder, repositoryAotMetadataService, refactorings, config));
return new BootJavaCodeLensEngine(this, codeLensProvider);
}

View File

@@ -30,6 +30,7 @@ import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.jsonrpc.CancelChecker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ide.vscode.boot.app.BootJavaConfig;
import org.springframework.ide.vscode.boot.java.Annotations;
import org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchies;
import org.springframework.ide.vscode.boot.java.handlers.CodeLensProvider;
@@ -54,15 +55,21 @@ public class DataRepositoryAotMetadataCodeLensProvider implements CodeLensProvid
private final DataRepositoryAotMetadataService repositoryMetadataService;
private final JavaProjectFinder projectFinder;
private final RewriteRefactorings refactorings;
private final BootJavaConfig config;
public DataRepositoryAotMetadataCodeLensProvider(JavaProjectFinder projectFinder, DataRepositoryAotMetadataService repositoryMetadataService, RewriteRefactorings refactorings) {
public DataRepositoryAotMetadataCodeLensProvider(JavaProjectFinder projectFinder, DataRepositoryAotMetadataService repositoryMetadataService,
RewriteRefactorings refactorings, BootJavaConfig config) {
this.projectFinder = projectFinder;
this.repositoryMetadataService = repositoryMetadataService;
this.refactorings = refactorings;
this.config = config;
}
@Override
public void provideCodeLenses(CancelChecker cancelToken, TextDocument document, CompilationUnit cu, List<CodeLens> resultAccumulator) {
if (!config.isEnabledCodeLensOverDataQueryMethods()) {
return;
}
cu.accept(new ASTVisitor() {
@Override
public boolean visit(MethodDeclaration node) {
@@ -158,9 +165,12 @@ public class DataRepositoryAotMetadataCodeLensProvider implements CodeLensProvid
codeLenses.add(new CodeLens(range, impl, null));
if (!isQueryAnnotated) {
Command queryTitle = new Command();
queryTitle.setTitle(methodMetadata.get().getQueryStatement(metadata));
codeLenses.add(new CodeLens(range, queryTitle, null));
String queryStatement = methodMetadata.get().getQueryStatement(metadata);
if (queryStatement != null) {
Command queryTitle = new Command();
queryTitle.setTitle(queryStatement);
codeLenses.add(new CodeLens(range, queryTitle, null));
}
}
}
} catch (BadLocationException e) {

View File

@@ -383,6 +383,11 @@
"default": true,
"description": "Generate workspace symbols from index (experimental)"
},
"boot-java.java.codelens-over-query-methods": {
"type": "boolean",
"default": true,
"description": "Show CodeLens with AOT generated query over Data Query methods"
},
"boot-java.remote-apps": {
"type": "array",
"items": {