Skip to content

Commit

Permalink
SLLS-103 fix infinite republishing of diagnostics
Browse files Browse the repository at this point in the history
SLLS-Â103 fix tests
  • Loading branch information
sophio-japharidze-sonarsource committed Nov 10, 2022
1 parent 129de9b commit 8f9f00b
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,19 @@ public Optional<ProjectBindingWrapper> getBinding(URI fileUri) {
return getBinding(folder, cacheKey);
}

public void getBindingAndRepublishTaints(WorkspaceFolderWrapper folder) {
getBindingAndRepublishTaints(Optional.of(folder), folder.getUri());
}

public Optional<ProjectBindingWrapper> getBindingAndRepublishTaints(URI fileUri) {
var folder = foldersManager.findFolderForFile(fileUri);
var cacheKey = folder.map(WorkspaceFolderWrapper::getUri).orElse(fileUri);
return getBindingAndRepublishTaints(folder, cacheKey);
}

private Optional<ProjectBindingWrapper> getBinding(Optional<WorkspaceFolderWrapper> folder, URI fileUri) {
var bindingCache = folder.isPresent() ? folderBindingCache : fileBindingCache;
var maybeBinding = bindingCache.computeIfAbsent(fileUri, k -> {
return bindingCache.computeIfAbsent(fileUri, k -> {
var settings = folder.map(WorkspaceFolderWrapper::getSettings)
.orElse(settingsManager.getCurrentDefaultFolderSettings());
if (!settings.hasBinding()) {
Expand All @@ -160,6 +170,10 @@ private Optional<ProjectBindingWrapper> getBinding(Optional<WorkspaceFolderWrapp
return Optional.ofNullable(computeProjectBinding(settings, folderRoot));
}
});
}

private Optional<ProjectBindingWrapper> getBindingAndRepublishTaints(Optional<WorkspaceFolderWrapper> folder, URI fileUri) {
var maybeBinding = getBinding(folder, fileUri);
maybeBinding.ifPresent(binding ->
folder.ifPresent(actualFolder ->
updateAllTaintIssuesForOneFolder(actualFolder, binding.getBinding(), binding.getConnectionId())));
Expand Down Expand Up @@ -452,7 +466,7 @@ public void updateAllTaintIssues() {
if (folder == null) {
return;
}
getBinding(folder);
getBindingAndRepublishTaints(folder);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public void didBranchNameChange(URI folderUri, @Nullable String branchName) {
return;
}
executorService.submit(() -> {
Optional<ProjectBindingWrapper> bindingOptional = bindingManager.getBinding(folderUri);
Optional<ProjectBindingWrapper> bindingOptional = bindingManager.getBindingAndRepublishTaints(folderUri);
String electedBranchName = null;
if (bindingOptional.isPresent()) {
ProjectBindingWrapper binding = bindingOptional.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ void didBranchNameChangeBindingPresent(@TempDir Path gitProjectBasedir) throws E
var folderUri = gitProjectBasedir.toUri();

var bindingWrapper = mock(ProjectBindingWrapper.class);
when(bindingManager.getBinding(folderUri)).thenReturn(Optional.of(bindingWrapper));
when(bindingManager.getBindingAndRepublishTaints(folderUri)).thenReturn(Optional.of(bindingWrapper));
var engine = mock(ConnectedSonarLintEngine.class);
when(bindingWrapper.getEngine()).thenReturn(engine);
String projectKey = "project_key";
Expand All @@ -117,7 +117,7 @@ void didBranchNameChangeShouldFallbackToMainBranchNameFromServer(@TempDir Path g
var folderUri = gitProjectBasedir.toUri();

var bindingWrapper = mock(ProjectBindingWrapper.class);
when(bindingManager.getBinding(folderUri)).thenReturn(Optional.of(bindingWrapper));
when(bindingManager.getBindingAndRepublishTaints(folderUri)).thenReturn(Optional.of(bindingWrapper));
var engine = mock(ConnectedSonarLintEngine.class);
when(bindingWrapper.getEngine()).thenReturn(engine);
String projectKey = "project_key";
Expand All @@ -139,7 +139,7 @@ void didBranchNameChangeTriggersSync(@TempDir Path gitProjectBasedir) throws Exc
var folderUri = gitProjectBasedir.toUri();
var bindingWrapper = mock(ProjectBindingWrapper.class);
when(bindingManager.getServerConfigurationFor("connectionId")).thenReturn(mock(ServerConnectionSettings.EndpointParamsAndHttpClient.class));
when(bindingManager.getBinding(folderUri)).thenReturn(Optional.of(bindingWrapper));
when(bindingManager.getBindingAndRepublishTaints(folderUri)).thenReturn(Optional.of(bindingWrapper));
var engine = mock(ConnectedSonarLintEngine.class);
when(bindingWrapper.getEngine()).thenReturn(engine);
when(bindingWrapper.getConnectionId()).thenReturn("connectionId");
Expand Down

0 comments on commit 8f9f00b

Please sign in to comment.