From 67eacaef00558e3d9203e0093b9468fa6732a3ab Mon Sep 17 00:00:00 2001 From: aboyko Date: Tue, 15 Oct 2024 12:54:26 -0400 Subject: [PATCH] CRON inlay-hints on/off setting --- .../org/springframework/tooling/boot/ls/Constants.java | 2 ++ .../boot/ls/DelegatingStreamConnectionProvider.java | 5 +++++ .../tooling/boot/ls/prefs/BootJavaPreferencesPage.java | 3 +++ .../tooling/boot/ls/prefs/PrefsInitializer.java | 1 + .../ide/vscode/boot/app/BootJavaConfig.java | 4 ++++ .../vscode/boot/app/BootLanguageServerInitializer.java | 9 ++++++--- .../springframework/ide/vscode/boot/app/JdtConfig.java | 4 ++-- .../java/cron/CronExpressionsInlayHintsProvider.java | 9 ++++++++- vscode-extensions/vscode-spring-boot/package.json | 5 +++++ 9 files changed, 36 insertions(+), 6 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java index fd44f6500..f15454f0b 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/Constants.java @@ -49,5 +49,7 @@ public class Constants { public static final String PREF_JPQL = "boot-java.jpql"; public static final String PREF_PROPS_COMPLETIONS_ELIDE_PREFIX = "boot-java.properties.completions.elide-prefix"; + + public static final String PREF_CRON_INLAY_HINTS = "boot-java.cron.inlay-hints"; } diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java index cef1dcbb8..831ae5786 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java @@ -229,6 +229,11 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi ) )); + bootJavaObj.put("cron", Map.of( + "inlay-hints", preferenceStore.getBoolean(Constants.PREF_CRON_INLAY_HINTS) + ) + ); + settings.put("boot-java", bootJavaObj); settings.put("http", createHttpProxySettings()); diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java index 272f90d16..2e6a6e1c7 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/BootJavaPreferencesPage.java @@ -46,6 +46,9 @@ public class BootJavaPreferencesPage extends FieldEditorPreferencePage implement // JPQL Support switch addField(new BooleanFieldEditor(Constants.PREF_JPQL, "JPA Query language support", fieldEditorParent)); + // CRON expressions inlay-hints on/off + addField(new BooleanFieldEditor(Constants.PREF_CRON_INLAY_HINTS, "Show CRON expressions inlay-hints", fieldEditorParent)); + // Properties Completions - Elide common prefix addField(new BooleanFieldEditor(Constants.PREF_PROPS_COMPLETIONS_ELIDE_PREFIX, "Elide common prefix in property key auto completions", fieldEditorParent)); diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java index 9fab28f68..f09f9c9d7 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/prefs/PrefsInitializer.java @@ -68,6 +68,7 @@ public class PrefsInitializer extends AbstractPreferenceInitializer { preferenceStore.setDefault(Constants.PREF_PROPS_COMPLETIONS_ELIDE_PREFIX, false); + preferenceStore.setDefault(Constants.PREF_CRON_INLAY_HINTS, true); } } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java index ea79e3e41..e28d0cf8c 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java @@ -84,6 +84,10 @@ public class BootJavaConfig implements InitializingBean { return enabled != null && enabled.booleanValue(); } + public boolean isCronInlayHintsEnabled() { + return Boolean.TRUE.equals(settings.getBoolean("boot-java", "cron", "inlay-hints")); + } + public boolean isShowingAllJvmProcesses() { Boolean isAll = settings.getBoolean("boot-java", "live-information", "all-local-java-processes"); return isAll != null && isAll.booleanValue(); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java index bb60d37b3..64d15da6a 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerInitializer.java @@ -163,7 +163,7 @@ public class BootLanguageServerInitializer implements InitializingBean { components.getSemanticTokensHandler().ifPresent(documents::onSemanticTokens); - startListeningToPerformReconcile(); + startListening(); server.onCommand("sts/show/document", p -> { ShowDocumentParams showDocParams = new Gson().fromJson((JsonElement)p.getArguments().get(0), ShowDocumentParams.class); @@ -184,7 +184,7 @@ public class BootLanguageServerInitializer implements InitializingBean { } - private void startListeningToPerformReconcile() { + private void startListening() { components.getReconcileEngine().ifPresent(reconcileEngine -> { server.getTextDocumentService().onDidChangeContent(params -> { TextDocument doc = params.getDocument(); @@ -193,7 +193,10 @@ public class BootLanguageServerInitializer implements InitializingBean { // ServerUtils.listenToClassFileChanges(server.getWorkspaceService().getFileObserver(), projectFinder, project -> validateAll(components, server, project)); }); - config.addListener(evt -> reconcile()); + config.addListener(evt -> { + server.getClient().refreshInlayHints(); + reconcile(); + }); params.projectObserver.addListener(reconcileDocumentsForProjectChange(server, components, params.projectFinder)); // // TODO: index update even happens on every file save. Very expensive to blindly reconcile all projects. diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java index 646883083..82fa28848 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/JdtConfig.java @@ -140,8 +140,8 @@ public class JdtConfig { return new JdtDataQueriesInlayHintsProvider(semanticTokensProvider); } - @Bean CronExpressionsInlayHintsProvider cronExpressionsInlayHintsProvider() { - return new CronExpressionsInlayHintsProvider(); + @Bean CronExpressionsInlayHintsProvider cronExpressionsInlayHintsProvider(BootJavaConfig config) { + return new CronExpressionsInlayHintsProvider(config); } @Bean JdtQueryDocHighlightsProvider jdtDocHighlightsProvider(JdtDataQuerySemanticTokensProvider semanticTokensProvider) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionsInlayHintsProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionsInlayHintsProvider.java index c9a8cfd08..fbcbaf42f 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionsInlayHintsProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronExpressionsInlayHintsProvider.java @@ -26,6 +26,7 @@ import org.eclipse.lsp4j.InlayHintKind; import org.eclipse.lsp4j.jsonrpc.messages.Either; 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.JdtInlayHintsProvider; import org.springframework.ide.vscode.commons.java.IJavaProject; @@ -46,12 +47,18 @@ public class CronExpressionsInlayHintsProvider implements JdtInlayHintsProvider private static final String SCHEDULED = "Scheduled"; + private final BootJavaConfig config; + public record EmbeddedCronExpression(Expression expression, String text, int offset) { }; + public CronExpressionsInlayHintsProvider(BootJavaConfig config) { + this.config = config; + } + @Override public boolean isApplicable(IJavaProject project) { - return true; + return config.isCronInlayHintsEnabled(); } @Override diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index cea4e05c2..acb31f2aa 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -353,6 +353,11 @@ "default": true, "description": "JPA Query language support" }, + "boot-java.cron.inlay-hints": { + "type": "boolean", + "default": true, + "description": "Show CRON expressions inlay-hints" + }, "boot-java.change-detection.on": { "type": "boolean", "default": false,