Skip to content

Commit 8ad8979

Browse files
Use backend capabilities enum set during initialization
1 parent c54d56f commit 8ad8979

File tree

2 files changed

+85
-8
lines changed

2 files changed

+85
-8
lines changed

src/main/java/org/sonarsource/sonarlint/ls/backend/BackendServiceFacade.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.nio.file.Paths;
2828
import java.time.Duration;
2929
import java.util.EnumMap;
30+
import java.util.EnumSet;
3031
import java.util.List;
3132
import java.util.Map;
3233
import java.util.Optional;
@@ -44,8 +45,8 @@
4445
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingConfigurationDto;
4546
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.scope.ConfigurationScopeDto;
4647
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.scope.DidAddConfigurationScopesParams;
48+
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability;
4749
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.ClientConstantInfoDto;
48-
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.FeatureFlagsDto;
4950
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.HttpConfigurationDto;
5051
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.InitializeParams;
5152
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.JsTsRequirementsDto;
@@ -159,8 +160,7 @@ private void initOnce(Map<String, ServerConnectionSettings> connections) {
159160
}
160161

161162
private InitializeParams toInitParams(BackendInitParams initParams) {
162-
var telemetryEnabled = telemetry != null && telemetry.enabled();
163-
var monitoringEnabled = shouldEnableMonitoring();
163+
var backendCapabilities = getBackendCapabilities(initParams);
164164
var clientNodeJsPath = StringUtils.isEmpty(initParams.getClientNodePath()) ? null : Path.of(initParams.getClientNodePath());
165165
var eslintBridgeServerBundlePath = StringUtils.isEmpty(initParams.getEslintBridgeServerPath()) ? null : Path.of(initParams.getEslintBridgeServerPath());
166166
var languageSpecificRequirements = getLanguageSpecificRequirements(clientNodeJsPath, eslintBridgeServerBundlePath);
@@ -173,8 +173,7 @@ private InitializeParams toInitParams(BackendInitParams initParams) {
173173
telemetryInitParams.additionalAttributes()),
174174
getHttpConfiguration(),
175175
getSonarCloudAlternativeEnvironment(),
176-
new FeatureFlagsDto(true, true, true,
177-
true, initParams.isEnableSecurityHotspots(), true, true, true, telemetryEnabled, true, monitoringEnabled),
176+
backendCapabilities,
178177
initParams.getStorageRoot(),
179178
Path.of(initParams.getSonarlintUserHome()),
180179
initParams.getEmbeddedPluginPaths(),
@@ -193,6 +192,23 @@ private InitializeParams toInitParams(BackendInitParams initParams) {
193192
);
194193
}
195194

195+
@NotNull
196+
EnumSet<BackendCapability> getBackendCapabilities(BackendInitParams initParams) {
197+
var backendCapabilities = EnumSet.of(BackendCapability.SMART_NOTIFICATIONS, BackendCapability.PROJECT_SYNCHRONIZATION,
198+
BackendCapability.EMBEDDED_SERVER, BackendCapability.SERVER_SENT_EVENTS, BackendCapability.DATAFLOW_BUG_DETECTION,
199+
BackendCapability.FULL_SYNCHRONIZATION);
200+
if (telemetry != null && telemetry.enabled()) {
201+
backendCapabilities.add(BackendCapability.TELEMETRY);
202+
}
203+
if (shouldEnableMonitoring()) {
204+
backendCapabilities.add(BackendCapability.MONITORING);
205+
}
206+
if (initParams.isEnableSecurityHotspots()) {
207+
backendCapabilities.add(BackendCapability.SECURITY_HOTSPOTS);
208+
}
209+
return backendCapabilities;
210+
}
211+
196212
boolean shouldEnableMonitoring() {
197213
var monitoringDisabledByProperty = "true".equals(System.getProperty(MONITORING_DISABLED_PROPERTY_KEY));
198214
if (monitoringDisabledByProperty) {

src/test/java/org/sonarsource/sonarlint/ls/backend/BackendServiceFacadeTests.java

Lines changed: 64 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,18 @@
1919
*/
2020
package org.sonarsource.sonarlint.ls.backend;
2121

22-
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.api.AfterEach;
2323
import org.junit.jupiter.api.Test;
2424
import org.sonarsource.sonarlint.core.rpc.client.SonarLintRpcClientDelegate;
25+
import org.sonarsource.sonarlint.core.rpc.protocol.backend.initialize.BackendCapability;
2526
import org.sonarsource.sonarlint.ls.SonarLintExtendedLanguageClient;
2627
import org.sonarsource.sonarlint.ls.log.LanguageClientLogger;
28+
import org.sonarsource.sonarlint.ls.telemetry.SonarLintTelemetry;
2729

2830
import static org.assertj.core.api.Assertions.assertThat;
2931
import static org.junit.jupiter.api.Assertions.assertThrows;
3032
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.when;
3134
import static org.sonarsource.sonarlint.ls.backend.BackendServiceFacade.MONITORING_DISABLED_PROPERTY_KEY;
3235

3336
class BackendServiceFacadeTests {
@@ -37,8 +40,8 @@ class BackendServiceFacadeTests {
3740
SonarLintRpcClientDelegate backend = mock(SonarLintRpcClientDelegate.class);
3841
BackendServiceFacade underTest = new BackendServiceFacade(backend, mock(LanguageClientLogger.class), mock(SonarLintExtendedLanguageClient.class), 0);
3942

40-
@BeforeEach
41-
void setUp() {
43+
@AfterEach
44+
void tearDown() {
4245
System.clearProperty(MONITORING_DISABLED_PROPERTY_KEY);
4346
}
4447

@@ -92,4 +95,62 @@ void shouldEnableMonitoringWhenNotDisabled() {
9295
assertThat(result).isTrue();
9396
}
9497

98+
@Test
99+
void shouldComputeBackendCapabilities() {
100+
// make sure monitoring is disabled
101+
System.setProperty(MONITORING_DISABLED_PROPERTY_KEY, "true");
102+
103+
// make sure telemetry is disabled
104+
SonarLintTelemetry telemetryService = mock(SonarLintTelemetry.class);
105+
underTest.setTelemetry(telemetryService);
106+
when(telemetryService.enabled()).thenReturn(false);
107+
108+
var backendInitParams = mock(BackendInitParams.class);
109+
when(backendInitParams.isEnableSecurityHotspots()).thenReturn(true);
110+
var backendCapabilities = underTest.getBackendCapabilities(backendInitParams);
111+
112+
assertThat(backendCapabilities)
113+
.isNotNull()
114+
.isNotEmpty()
115+
.contains(BackendCapability.SMART_NOTIFICATIONS)
116+
.contains(BackendCapability.SECURITY_HOTSPOTS)
117+
.contains(BackendCapability.PROJECT_SYNCHRONIZATION)
118+
.contains(BackendCapability.EMBEDDED_SERVER)
119+
.contains(BackendCapability.DATAFLOW_BUG_DETECTION)
120+
.contains(BackendCapability.FULL_SYNCHRONIZATION)
121+
.contains(BackendCapability.SERVER_SENT_EVENTS)
122+
.doesNotContain(BackendCapability.TELEMETRY)
123+
.doesNotContain(BackendCapability.MONITORING);
124+
125+
}
126+
127+
@Test
128+
void shouldComputeBackendCapabilities_withTelemetryAndMonitoring() {
129+
// make sure monitoring is disabled
130+
System.setProperty(MONITORING_DISABLED_PROPERTY_KEY, "false");
131+
132+
// make sure telemetry is disabled
133+
SonarLintTelemetry telemetryService = mock(SonarLintTelemetry.class);
134+
underTest.setTelemetry(telemetryService);
135+
when(telemetryService.enabled()).thenReturn(true);
136+
137+
var backendInitParams = mock(BackendInitParams.class);
138+
when(backendInitParams.isEnableSecurityHotspots()).thenReturn(true);
139+
var backendCapabilities = underTest.getBackendCapabilities(backendInitParams);
140+
141+
assertThat(backendCapabilities)
142+
.isNotNull()
143+
.isNotEmpty()
144+
.contains(BackendCapability.SMART_NOTIFICATIONS)
145+
.contains(BackendCapability.SECURITY_HOTSPOTS)
146+
.contains(BackendCapability.PROJECT_SYNCHRONIZATION)
147+
.contains(BackendCapability.EMBEDDED_SERVER)
148+
.contains(BackendCapability.DATAFLOW_BUG_DETECTION)
149+
.contains(BackendCapability.FULL_SYNCHRONIZATION)
150+
.contains(BackendCapability.SERVER_SENT_EVENTS)
151+
.contains(BackendCapability.TELEMETRY)
152+
.contains(BackendCapability.MONITORING);
153+
154+
}
155+
95156
}

0 commit comments

Comments
 (0)