Skip to content

Commit 2a26abb

Browse files
SLLS-339 get connection suggestions from backend
1 parent dffe228 commit 2a26abb

File tree

5 files changed

+61
-1
lines changed

5 files changed

+61
-1
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
<properties>
2626
<jdk.min.version>17</jdk.min.version>
27-
<sonarlint.core.version>10.22.0.81176</sonarlint.core.version>
27+
<sonarlint.core.version>10.22.0.81197</sonarlint.core.version>
2828
<slf4j.version>2.0.17</slf4j.version>
2929
<!-- Version used by Xodus -->
3030
<kotlin.version>1.6.10</kotlin.version>

src/main/java/org/sonarsource/sonarlint/ls/SonarLintExtendedLanguageServer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@
3535
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetBindingSuggestionParams;
3636
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileParams;
3737
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileResponse;
38+
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.GetConnectionSuggestionsResponse;
3839
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenResponse;
3940
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.OrganizationDto;
4041
import org.sonarsource.sonarlint.core.rpc.protocol.client.binding.GetBindingSuggestionsResponse;
42+
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.GetConnectionSuggestionsParams;
4143

4244
public interface SonarLintExtendedLanguageServer extends LanguageServer {
4345

@@ -436,6 +438,9 @@ public String getUri() {
436438
@JsonRequest("sonarlint/getBindingSuggestion")
437439
CompletableFuture<GetBindingSuggestionsResponse> getBindingSuggestion(GetBindingSuggestionParams params);
438440

441+
@JsonRequest("sonarlint/getConnectionSuggestions")
442+
CompletableFuture<GetConnectionSuggestionsResponse> getConnectionSuggestions(GetConnectionSuggestionsParams params);
443+
439444
class ChangeIssueStatusParams {
440445
private final String configurationScopeId;
441446
private final String issueId;

src/main/java/org/sonarsource/sonarlint/ls/SonarLintLanguageServer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetBindingSuggestionParams;
9494
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileParams;
9595
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileResponse;
96+
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.GetConnectionSuggestionsResponse;
9697
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenResponse;
9798
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.ListUserOrganizationsResponse;
9899
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.org.OrganizationDto;
@@ -102,6 +103,7 @@
102103
import org.sonarsource.sonarlint.core.rpc.protocol.backend.hotspot.OpenHotspotInBrowserParams;
103104
import org.sonarsource.sonarlint.core.rpc.protocol.backend.issue.AddIssueCommentParams;
104105
import org.sonarsource.sonarlint.core.rpc.protocol.client.binding.GetBindingSuggestionsResponse;
106+
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.GetConnectionSuggestionsParams;
105107
import org.sonarsource.sonarlint.core.rpc.protocol.client.telemetry.FixSuggestionStatus;
106108
import org.sonarsource.sonarlint.core.rpc.protocol.common.Language;
107109
import org.sonarsource.sonarlint.ls.SonarLintExtendedLanguageClient.ConnectionCheckResult;
@@ -822,6 +824,11 @@ public CompletableFuture<GetBindingSuggestionsResponse> getBindingSuggestion(Get
822824
return backendServiceFacade.getBackendService().getBindingSuggestion(params);
823825
}
824826

827+
@Override
828+
public CompletableFuture<GetConnectionSuggestionsResponse> getConnectionSuggestions(GetConnectionSuggestionsParams params) {
829+
return backendServiceFacade.getBackendService().getConnectionSuggestions(params);
830+
}
831+
825832
@Override
826833
public void didCreateBinding(BindingCreationMode creationMode) {
827834
switch (creationMode) {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.scope.ConfigurationScopeDto;
5252
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.scope.DidAddConfigurationScopesParams;
5353
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.scope.DidRemoveConfigurationScopeParams;
54+
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.GetConnectionSuggestionsResponse;
5455
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenParams;
5556
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.auth.HelpGenerateUserTokenResponse;
5657
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto;
@@ -99,6 +100,7 @@
99100
import org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.ListAllParams;
100101
import org.sonarsource.sonarlint.core.rpc.protocol.backend.tracking.ListAllResponse;
101102
import org.sonarsource.sonarlint.core.rpc.protocol.client.binding.GetBindingSuggestionsResponse;
103+
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.GetConnectionSuggestionsParams;
102104
import org.sonarsource.sonarlint.core.rpc.protocol.common.ClientFileDto;
103105
import org.sonarsource.sonarlint.core.rpc.protocol.common.Either;
104106
import org.sonarsource.sonarlint.core.rpc.protocol.common.SonarCloudRegion;
@@ -252,6 +254,10 @@ public CompletableFuture<GetBindingSuggestionsResponse> getBindingSuggestion(Get
252254
return initializedBackend().getBindingService().getBindingSuggestions(params);
253255
}
254256

257+
public CompletableFuture<GetConnectionSuggestionsResponse> getConnectionSuggestions(GetConnectionSuggestionsParams params) {
258+
return initializedBackend().getConnectionService().getConnectionSuggestions(params);
259+
}
260+
255261
public CompletableFuture<GetSharedConnectedModeConfigFileResponse> getSharedConnectedModeConfigFileContents(GetSharedConnectedModeConfigFileParams params) {
256262
return initializedBackend().getBindingService().getSharedConnectedModeConfigFileContents(params);
257263
}

src/test/java/org/sonarsource/sonarlint/ls/mediumtests/ConnectedModeMediumTests.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@
4444
import org.eclipse.lsp4j.Command;
4545
import org.eclipse.lsp4j.Diagnostic;
4646
import org.eclipse.lsp4j.DiagnosticSeverity;
47+
import org.eclipse.lsp4j.DidChangeWatchedFilesParams;
4748
import org.eclipse.lsp4j.DidChangeWorkspaceFoldersParams;
49+
import org.eclipse.lsp4j.FileChangeType;
50+
import org.eclipse.lsp4j.FileEvent;
4851
import org.eclipse.lsp4j.MessageParams;
4952
import org.eclipse.lsp4j.MessageType;
5053
import org.eclipse.lsp4j.TextDocumentIdentifier;
@@ -66,6 +69,7 @@
6669
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetBindingSuggestionParams;
6770
import org.sonarsource.sonarlint.core.rpc.protocol.backend.binding.GetSharedConnectedModeConfigFileParams;
6871
import org.sonarsource.sonarlint.core.rpc.protocol.backend.hotspot.HotspotStatus;
72+
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.GetConnectionSuggestionsParams;
6973
import org.sonarsource.sonarlint.core.serverapi.proto.sonarqube.ws.Common;
7074
import org.sonarsource.sonarlint.core.serverapi.proto.sonarqube.ws.Components;
7175
import org.sonarsource.sonarlint.core.serverapi.proto.sonarqube.ws.Hotspots;
@@ -106,6 +110,7 @@ class ConnectedModeMediumTests extends AbstractLanguageServerMediumTests {
106110
private static final String PROJECT_NAME1 = "Project One";
107111
private static final String PROJECT_KEY2 = "project:key2";
108112
private static final String PROJECT_NAME2 = "Project Two";
113+
private static final String ORGANIZATION_KEY = "myOrganization";
109114
private static final long CURRENT_TIME = System.currentTimeMillis();
110115
private static Path omnisharpDir;
111116
private static Path folder1BaseDir;
@@ -1476,4 +1481,41 @@ void should_allow_client_to_explicitly_ask_for_binding_suggestions() {
14761481
assertThat(result.getSuggestions()).hasSize(1);
14771482
});
14781483
}
1484+
1485+
@Test
1486+
void should_allow_client_to_explicitly_ask_for_connection_suggestions() {
1487+
// add config scope
1488+
var workspaceUri = folder1BaseDir.resolve("foo-bar").toUri().toString();
1489+
var workspaceFolder = new WorkspaceFolder(workspaceUri, "foo-bar");
1490+
client.folderSettings = new HashMap<>();
1491+
client.folderSettings.put(workspaceUri, new HashMap<>());
1492+
lsProxy.getWorkspaceService().didChangeWorkspaceFolders(new DidChangeWorkspaceFoldersParams(
1493+
new WorkspaceFoldersChangeEvent(List.of(workspaceFolder), Collections.emptyList())));
1494+
1495+
foldersToRemove.add(workspaceUri);
1496+
1497+
// create clue file inside
1498+
var clueFileName = "connectedMode.json";
1499+
var clueFileContent = String.format("""
1500+
{
1501+
"sonarCloudOrganization": "%s",
1502+
"projectKey": "%s",
1503+
"region": "EU"
1504+
}""", ORGANIZATION_KEY, PROJECT_KEY);
1505+
1506+
// Create file for SLCORE
1507+
lsProxy.getWorkspaceService().didChangeWatchedFiles(new DidChangeWatchedFilesParams(List.of(new FileEvent(folder1BaseDir.resolve("foo-bar").resolve(".sonarlint").resolve(clueFileName).toFile().toURI().toString(), FileChangeType.Created))));
1508+
// send updated file content to SLCORE
1509+
didOpen(folder1BaseDir.resolve("foo-bar").resolve(".sonarlint").resolve(clueFileName).toFile().toURI().toString(), clueFileName, clueFileContent);
1510+
1511+
awaitUntilAsserted(() -> {
1512+
var result = lsProxy.getConnectionSuggestions(new GetConnectionSuggestionsParams(workspaceUri)).get();
1513+
var connectionSuggestions = result.getConnectionSuggestions();
1514+
assertThat(connectionSuggestions).isNotNull();
1515+
assertThat(connectionSuggestions).isNotEmpty();
1516+
assertTrue(connectionSuggestions.get(0).getConnectionSuggestion().isRight());
1517+
assertThat(connectionSuggestions.get(0).getConnectionSuggestion().getRight().getOrganization()).isEqualTo(ORGANIZATION_KEY);
1518+
assertThat(connectionSuggestions.get(0).getConnectionSuggestion().getRight().getProjectKey()).isEqualTo(PROJECT_KEY);
1519+
});
1520+
}
14791521
}

0 commit comments

Comments
 (0)