diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java index ff163c725..fda7a6c49 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguagServerBootApp.java @@ -83,7 +83,7 @@ public class BootLanguagServerBootApp { @Bean InitializingBean initializeValueProviders(ValueProviderRegistry r, @Qualifier("adHocProperties") ProjectBasedPropertyIndexProvider adHocProperties) { return () -> { - r.def("logger-name", new LoggerNameProvider(adHocProperties).FACTORY); + r.def("logger-name", LoggerNameProvider.factory(adHocProperties)); r.def("class-reference", ClassReferenceProvider.FACTORY); }; } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/configurationmetadata/ConfigurationMetadataItem.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/configurationmetadata/ConfigurationMetadataItem.java index 6167202a3..8ca55d5af 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/configurationmetadata/ConfigurationMetadataItem.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/configurationmetadata/ConfigurationMetadataItem.java @@ -56,5 +56,4 @@ class ConfigurationMetadataItem extends ConfigurationMetadataProperty { public void setSourceMethod(String sourceMethod) { this.sourceMethod = sourceMethod; } - } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java index 80241e29b..fb8bfb194 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/LoggerNameProvider.java @@ -39,18 +39,23 @@ import reactor.util.function.Tuples; public class LoggerNameProvider extends CachingValueProvider { private static final String LOGGING_GROUPS_PREFIX = "logging.group."; - private final ProjectBasedPropertyIndexProvider adhocProperties; + private final boolean includeGroups; - public LoggerNameProvider(ProjectBasedPropertyIndexProvider adhocProperties) { + public LoggerNameProvider(ProjectBasedPropertyIndexProvider adhocProperties, boolean includeGroups) { this.adhocProperties = adhocProperties; + this.includeGroups = includeGroups; } - public final Function, ValueProviderStrategy> FACTORY = (params) -> this; + public static final Function, ValueProviderStrategy> factory(ProjectBasedPropertyIndexProvider adhocProperties) { + return (params) -> { + return new LoggerNameProvider(adhocProperties, (boolean) params.getOrDefault("group", true)); + }; + } Collection loggerGroupNames(IJavaProject jp) { Builder builder = ImmutableSet.builder(); - if (adhocProperties!=null) { + if (adhocProperties!=null && includeGroups) { SortedMap index = adhocProperties.getIndex(jp).getTreeMap(); index = index.subMap(LOGGING_GROUPS_PREFIX, LOGGING_GROUPS_PREFIX+Character.MAX_VALUE); for (String prop : index.keySet()) { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java index ae7c4b27c..a8fab984d 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java @@ -21,6 +21,7 @@ import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import org.eclipse.lsp4j.CompletionItem; import org.eclipse.lsp4j.TextDocumentIdentifier; @@ -136,6 +137,14 @@ public abstract class AbstractPropsEditorTest { assertCompletions(text /*NONE*/); } + public void assertNoCompletionWithLabel(String textBefore, String expectLabel) throws Exception { + Editor editor = newEditor(textBefore); + List completions = editor.getCompletions().stream().filter(c -> c.getLabel().equals(expectLabel)).collect(Collectors.toList()); + if (!completions.isEmpty()) { + fail("Expecting no completions with label '"+expectLabel+"', but found some"); + } + } + /** * Checks that completions contains a completion with a given display string (and check that * it applies as expected). diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java index c66cae6fb..940a853d3 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java @@ -1183,6 +1183,10 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { "logging.level.indexed=<*>" ); + //Check whether the added parameter to disable group name hints is obeyed: + assertNoCompletionWithLabel("logging.group.whatever=<*>", "foobar"); + assertNoCompletionWithLabel("logging.group.whatever=<*>", "user-defined"); + assertNoCompletionWithLabel("logging.group.whatever=<*>", "indexed"); } @Test public void userDefinedLoggingGroupsValueCompletions() throws Exception { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java index c0aba935f..bbba03c60 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java @@ -296,6 +296,16 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { " group:\n"+ " whatever: stuff,com.example.demo<*>" ); + + //Check whether the added parameter to disable group name hints is obeyed: + assertNoCompletionWithLabel( + "logging:\n" + + " group:\n"+ + " whatever: <*>" + , + "foobar" + ); + } ///////////////////// ported tests from old STS code base ////////////////////////////////////////////////