Skip to content

Commit 079d84b

Browse files
SLVSCODE-756 remove binding when connection is removed
1 parent ca8dfd3 commit 079d84b

File tree

7 files changed

+21
-19
lines changed

7 files changed

+21
-19
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ public interface SonarLintExtendedLanguageClient extends LanguageClient {
7272
@JsonNotification("sonarlint/openConnectionSettings")
7373
void openConnectionSettings(boolean isSonarCloud);
7474

75+
@JsonNotification("sonarlint/removeBindingsForDeletedConnections")
76+
void removeBindingsForDeletedConnections(List<String> connectionIds);
77+
7578
@JsonRequest("sonarlint/assistCreatingConnection")
7679
CompletableFuture<AssistCreatingConnectionResponse> assistCreatingConnection(CreateConnectionParams params);
7780

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,6 @@ private static TextDocumentSyncOptions getTextDocumentSyncOptions() {
398398
@Override
399399
public CompletableFuture<Object> shutdown() {
400400
List.<Runnable>of(
401-
// prevent creation of new engines
402401
analysisScheduler::shutdown,
403402
branchManager::shutdown,
404403
settingsManager::shutdown,

src/main/java/org/sonarsource/sonarlint/ls/connected/ProjectBindingManager.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import java.util.stream.Stream;
3838
import javax.annotation.CheckForNull;
3939
import javax.annotation.Nullable;
40-
import org.sonarsource.sonarlint.core.client.legacy.analysis.SonarLintAnalysisEngine;
4140
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.BindingConfigurationDto;
4241
import org.sonarsource.sonarlint.core.rpc.protocol.backend.config.binding.DidUpdateBindingParams;
4342
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto;
@@ -85,7 +84,6 @@ public class ProjectBindingManager implements WorkspaceSettingsChangeListener, W
8584
private final ConcurrentMap<URI, Optional<ProjectBinding>> folderBindingCache;
8685
private final LanguageClientLogger globalLogOutput;
8786
private final ConcurrentMap<URI, Optional<ProjectBinding>> fileBindingCache = new ConcurrentHashMap<>();
88-
private final ConcurrentMap<String, Optional<SonarLintAnalysisEngine>> connectedEngineCacheByConnectionId;
8987
private final SonarLintExtendedLanguageClient client;
9088
private AnalysisScheduler analysisManager;
9189
private final BackendServiceFacade backendServiceFacade;
@@ -94,20 +92,18 @@ public class ProjectBindingManager implements WorkspaceSettingsChangeListener, W
9492

9593
public ProjectBindingManager(WorkspaceFoldersManager foldersManager, SettingsManager settingsManager, SonarLintExtendedLanguageClient client,
9694
LanguageClientLogger globalLogOutput, BackendServiceFacade backendServiceFacade, OpenNotebooksCache openNotebooksCache, OpenFilesCache openFilesCache) {
97-
this(foldersManager, settingsManager, client, new ConcurrentHashMap<>(), globalLogOutput, new ConcurrentHashMap<>(),
95+
this(foldersManager, settingsManager, client, new ConcurrentHashMap<>(), globalLogOutput,
9896
backendServiceFacade, openNotebooksCache, openFilesCache);
9997
}
10098

10199
public ProjectBindingManager(WorkspaceFoldersManager foldersManager, SettingsManager settingsManager, SonarLintExtendedLanguageClient client,
102-
ConcurrentMap<URI, Optional<ProjectBinding>> folderBindingCache, LanguageClientLogger globalLogOutput,
103-
ConcurrentMap<String, Optional<SonarLintAnalysisEngine>> connectedEngineCacheByConnectionId, BackendServiceFacade backendServiceFacade,
100+
ConcurrentMap<URI, Optional<ProjectBinding>> folderBindingCache, LanguageClientLogger globalLogOutput, BackendServiceFacade backendServiceFacade,
104101
OpenNotebooksCache openNotebooksCache, OpenFilesCache openFilesCache) {
105102
this.foldersManager = foldersManager;
106103
this.settingsManager = settingsManager;
107104
this.client = client;
108105
this.folderBindingCache = folderBindingCache;
109106
this.globalLogOutput = globalLogOutput;
110-
this.connectedEngineCacheByConnectionId = connectedEngineCacheByConnectionId;
111107
this.backendServiceFacade = backendServiceFacade;
112108
this.openNotebooksCache = openNotebooksCache;
113109
this.openFilesCache = openFilesCache;
@@ -309,6 +305,13 @@ private void clearCaches(String connectionId) {
309305

310306
@Override
311307
public void onChange(@CheckForNull WorkspaceSettings oldValue, WorkspaceSettings newValue) {
308+
if (oldValue != null && oldValue.getServerConnections().size() > newValue.getServerConnections().size()) {
309+
// connection(s) were deleted
310+
var deletedConnections = oldValue.getServerConnections().keySet().stream()
311+
.filter(id -> !newValue.getServerConnections().containsKey(id))
312+
.toList();
313+
client.removeBindingsForDeletedConnections(deletedConnections);
314+
}
312315
newValue.getServerConnections().forEach((id, value) -> {
313316
if (oldValue == null) {
314317
// initial sync

src/main/java/org/sonarsource/sonarlint/ls/settings/SettingsManager.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -507,18 +507,10 @@ public void addListener(WorkspaceSettingsChangeListener listener) {
507507
globalListeners.add(listener);
508508
}
509509

510-
public void removeListener(WorkspaceSettingsChangeListener listener) {
511-
globalListeners.remove(listener);
512-
}
513-
514510
public void addListener(WorkspaceFolderSettingsChangeListener listener) {
515511
folderListeners.add(listener);
516512
}
517513

518-
public void removeListener(WorkspaceFolderSettingsChangeListener listener) {
519-
folderListeners.remove(listener);
520-
}
521-
522514
@Override
523515
public void added(WorkspaceFolderWrapper added) {
524516
executor.execute(() -> updateWorkspaceFolderSettings(added, false));

src/test/java/org/sonarsource/sonarlint/ls/connected/ProjectBindingManagerTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,11 @@ public void prepare() throws IOException, ExecutionException, InterruptedExcepti
141141
when(client.getTokenForServer(any())).thenReturn(CompletableFuture.supplyAsync(() -> "token"));
142142

143143
folderBindingCache = new ConcurrentHashMap<>();
144-
connectedEngineCacheByConnectionId = new ConcurrentHashMap<>();
145144

146145
when(openNotebooksCache.getFile(any(URI.class))).thenReturn(Optional.empty());
147146

148147
underTest = new ProjectBindingManager(foldersManager, settingsManager, client, folderBindingCache, logTester.getLogger(),
149-
connectedEngineCacheByConnectionId, backendServiceFacade, openNotebooksCache, openFilesCache);
148+
backendServiceFacade, openNotebooksCache, openFilesCache);
150149
underTest.setAnalysisManager(analysisManager);
151150
}
152151

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,11 @@ public void browseTo(String link) {
543543
public void openConnectionSettings(boolean isSonarCloud) {
544544
}
545545

546+
@Override
547+
public void removeBindingsForDeletedConnections(List<String> connectionIds) {
548+
549+
}
550+
546551
@Override
547552
public CompletableFuture<AssistCreatingConnectionResponse> assistCreatingConnection(CreateConnectionParams params) {
548553
return CompletableFuture.completedFuture(new AssistCreatingConnectionResponse("connectionId"));
@@ -572,6 +577,7 @@ public void reportConnectionCheckResult(ConnectionCheckResult result) {
572577
public CompletableFuture<String> getTokenForServer(String serverId) {
573578
return CompletableFutures.computeAsync(server -> "token");
574579
}
580+
575581
}
576582

577583
protected static void notifyConfigurationChangeOnClient() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,7 @@ void analysisConnected_scan_all_hotspot_then_forget() {
499499

500500
@Test
501501
void analysisConnected_no_matching_server_issues() {
502-
mockWebServerExtension.addStringResponse("/api/system/status", "{\"status\": \"UP\", \"version\": \"9.7\", \"id\": \"xzy\"}");
502+
mockWebServerExtension.addStringResponse("/api/system/status", "{\"status\": \"UP\", \"version\": \"9.9\", \"id\": \"xzy\"}");
503503
mockNoIssuesNoHotspotsForProject();
504504
mockWebServerExtension.addStringResponse("/api/authentication/validate?format=json", "{\"valid\": true}");
505505
mockWebServerExtension.addProtobufResponseDelimited(
@@ -1235,7 +1235,7 @@ private void mockNoIssueAndNoTaintInIncrementalSync() {
12351235
}
12361236

12371237
private void mockNoIssuesNoHotspotsForProject() {
1238-
mockWebServerExtension.addStringResponse("/api/system/status", "{\"status\": \"UP\", \"version\": \"9.7\", \"id\": \"xzy\"}");
1238+
mockWebServerExtension.addStringResponse("/api/system/status", "{\"status\": \"UP\", \"version\": \"9.9\", \"id\": \"xzy\"}");
12391239
mockWebServerExtension.addProtobufResponseDelimited(
12401240
"/api/issues/pull?projectKey=myProject&branchName=master&languages=" + LANGUAGES_LIST,
12411241
Issues.IssuesPullQueryTimestamp.newBuilder()

0 commit comments

Comments
 (0)