Skip to content

Commit 3154bd8

Browse files
authored
SLCORE-1302 Do not include client file exclusions when bound (#1400)
1 parent 2b36a82 commit 3154bd8

File tree

21 files changed

+107
-164
lines changed

21 files changed

+107
-164
lines changed

backend/commons/src/main/java/org/sonarsource/sonarlint/core/commons/util/git/GitService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ public static Set<URI> getVCSChangedFiles(@Nullable Path baseDir) {
8888
var untracked = status.getUntracked().stream().filter(f -> !f.equals(GITIGNORE_FILENAME));
8989
return Stream.concat(uncommitted, untracked)
9090
.map(workTreePath::resolve)
91+
.filter(path -> path.normalize().startsWith(baseDir.normalize()))
9192
.map(Path::toUri)
9293
.collect(Collectors.toSet());
9394
} catch (GitAPIException | GitException e) {

backend/commons/src/test/java/org/sonarsource/sonarlint/core/commons/util/git/GitServiceTests.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,32 @@ void should_return_empty_blame_result_if_no_commits_in_repo() throws IOException
433433
}
434434
}
435435

436+
@Test
437+
void it_should_only_return_files_under_baseDir() throws IOException, GitAPIException {
438+
// Create files in root and in a subfolder
439+
var rootFile = "rootFile.txt";
440+
var subDir = projectDirPath.resolve("subdir");
441+
Files.createDirectories(subDir);
442+
var subFile = subDir.resolve("subFile.txt");
443+
createFile(projectDirPath, rootFile, "root");
444+
createFile(subDir, "subFile.txt", "sub");
445+
446+
// Add and commit both files
447+
git.add().addFilepattern(rootFile).call();
448+
git.add().addFilepattern("subdir/subFile.txt").call();
449+
commit(git, rootFile);
450+
commit(git, "subdir/subFile.txt");
451+
452+
// Modify both files (so they appear as changed)
453+
modifyFile(projectDirPath.resolve(rootFile), "root", "changed");
454+
modifyFile(subFile, "sub", "changed");
455+
456+
// getVCSChangedFiles for subdir should only return subFile
457+
var changedFiles = getVCSChangedFiles(subDir);
458+
459+
assertThat(changedFiles)
460+
.contains(subFile.toUri())
461+
.doesNotContain(projectDirPath.resolve(rootFile).toUri());
462+
}
463+
436464
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingCandidatesFinder.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private Optional<ConfigurationScopeSharedContext> checkIfScopeIsGoodCandidateFor
6868
ConfigurationScope scope, String connectionId, String projectKey, SonarLintCancelMonitor cancelMonitor) {
6969
cancelMonitor.checkCanceled();
7070

71-
var cluesAndConnections = bindingClueProvider.collectBindingCluesWithConnections(scope.getId(), Set.of(connectionId), cancelMonitor);
71+
var cluesAndConnections = bindingClueProvider.collectBindingCluesWithConnections(scope.id(), Set.of(connectionId), cancelMonitor);
7272

7373
var cluesWithMatchingProjectKey = cluesAndConnections.stream()
7474
.filter(c -> projectKey.equals(c.getBindingClue().getSonarProjectKey()))
@@ -79,18 +79,18 @@ private Optional<ConfigurationScopeSharedContext> checkIfScopeIsGoodCandidateFor
7979
var isFromSharedConfiguration = cluesWithMatchingProjectKey.stream().anyMatch(c -> c.getBindingClue().isFromSharedConfiguration());
8080
return Optional.of(new ConfigurationScopeSharedContext(scope, isFromSharedConfiguration));
8181
}
82-
var configScopeName = scope.getName();
82+
var configScopeName = scope.name();
8383
if (isNotBlank(configScopeName) && isConfigScopeNameCloseEnoughToSonarProject(configScopeName, connectionId, projectKey, cancelMonitor)) {
8484
return Optional.of(new ConfigurationScopeSharedContext(scope, false));
8585
}
8686
return Optional.empty();
8787
}
8888

8989
private static Set<ConfigurationScopeSharedContext> filterOutLeafCandidates(Set<ConfigurationScopeSharedContext> candidates) {
90-
var candidateIds = candidates.stream().map(ConfigurationScopeSharedContext::getConfigurationScope).map(ConfigurationScope::getId).collect(Collectors.toSet());
90+
var candidateIds = candidates.stream().map(ConfigurationScopeSharedContext::getConfigurationScope).map(ConfigurationScope::id).collect(Collectors.toSet());
9191
return candidates.stream().filter(bindableConfig -> {
9292
var scope = bindableConfig.getConfigurationScope();
93-
var parentId = scope.getParentId();
93+
var parentId = scope.parentId();
9494
return parentId == null || !candidateIds.contains(parentId);
9595
}).collect(Collectors.toSet());
9696
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/BindingSuggestionProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public BindingSuggestionProvider(ConfigurationRepository configRepository, Conne
7878
@EventListener
7979
public void bindingConfigChanged(BindingConfigChangedEvent event) {
8080
// Check if binding suggestion was switched on
81-
if (!event.newConfig().isBindingSuggestionDisabled() && event.previousConfig().isBindingSuggestionDisabled()) {
81+
if (!event.newConfig().bindingSuggestionDisabled() && event.previousConfig().bindingSuggestionDisabled()) {
8282
suggestBindingForGivenScopesAndAllConnections(Set.of(event.configScopeId()));
8383
}
8484
}
@@ -170,7 +170,7 @@ private List<BindingSuggestionDto> suggestBindingForEligibleScope(String checked
170170
}
171171
}
172172
if (suggestions.isEmpty()) {
173-
var configScopeName = Optional.ofNullable(configRepository.getConfigurationScope(checkedConfigScopeId)).map(ConfigurationScope::getName).orElse(null);
173+
var configScopeName = Optional.ofNullable(configRepository.getConfigurationScope(checkedConfigScopeId)).map(ConfigurationScope::name).orElse(null);
174174
if (isNotBlank(configScopeName)) {
175175
var cluesWithoutProjectKey = cluesAndConnections.stream().filter(c -> c.getBindingClue().getSonarProjectKey() == null).toList();
176176
for (var bindingClueWithConnections : cluesWithoutProjectKey) {
@@ -216,15 +216,15 @@ private boolean isScopeEligibleForBindingSuggestion(String configScopeId) {
216216
LOG.debug("Configuration scope '{}' is gone.", configScopeId);
217217
return false;
218218
}
219-
if (!configScope.isBindable()) {
219+
if (!configScope.bindable()) {
220220
LOG.debug("Configuration scope '{}' is not bindable.", configScopeId);
221221
return false;
222222
}
223223
if (isValidBinding(bindingConfiguration)) {
224224
LOG.debug("Configuration scope '{}' is already bound.", configScopeId);
225225
return false;
226226
}
227-
if (bindingConfiguration.isBindingSuggestionDisabled()) {
227+
if (bindingConfiguration.bindingSuggestionDisabled()) {
228228
LOG.debug("Configuration scope '{}' has binding suggestions disabled.", configScopeId);
229229
return false;
230230
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/ConfigurationService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void didAddConfigurationScopes(List<ConfigurationScopeDto> addedScopes) {
5959
if (previous != null) {
6060
LOG.error("Duplicate configuration scope registered: {}", addedDto.getId());
6161
} else {
62-
LOG.debug("Added configuration scope '{}'", configScopeInReferential.getId());
62+
LOG.debug("Added configuration scope '{}'", configScopeInReferential.id());
6363
addedIds.add(new ConfigurationScopeWithBinding(configScopeInReferential, bindingConfigInReferential));
6464
}
6565
}
@@ -102,7 +102,7 @@ public void connectionRemoved(ConnectionConfigurationRemovedEvent event) {
102102
var bindingConfigurationByConfigScope = repository.removeBindingForConnection(event.getRemovedConnectionId());
103103
bindingConfigurationByConfigScope.forEach((configScope, bindingConfiguration) ->
104104
applicationEventPublisher.publishEvent(new BindingConfigChangedEvent(configScope, bindingConfiguration,
105-
BindingConfiguration.noBinding(bindingConfiguration.isBindingSuggestionDisabled()))));
105+
BindingConfiguration.noBinding(bindingConfiguration.bindingSuggestionDisabled()))));
106106
}
107107

108108
@CheckForNull

backend/core/src/main/java/org/sonarsource/sonarlint/core/SharedConnectedModeSettingsProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ public SharedConnectedModeSettingsProvider(ConfigurationRepository configuration
5858
public String getSharedConnectedModeConfigFileContents(String configScopeId) {
5959
var bindingConfiguration = configurationRepository.getBindingConfiguration(configScopeId);
6060
if (bindingConfiguration != null && bindingConfiguration.isBound()) {
61-
var projectKey = bindingConfiguration.getSonarProjectKey();
62-
var connectionId = bindingConfiguration.getConnectionId();
61+
var projectKey = bindingConfiguration.sonarProjectKey();
62+
var connectionId = bindingConfiguration.connectionId();
6363

6464
var connection = Objects.requireNonNull(connectionRepository.getConnectionById(Objects.requireNonNull(connectionId)));
6565
telemetryService.exportedConnectedMode();

backend/core/src/main/java/org/sonarsource/sonarlint/core/VersionSoonUnsupportedHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public void configurationScopesAdded(ConfigurationScopesAddedWithBindingEvent ev
7575
@EventListener
7676
public void bindingConfigChanged(BindingConfigChangedEvent event) {
7777
var configScopeId = event.configScopeId();
78-
var connectionId = event.newConfig().getConnectionId();
78+
var connectionId = event.newConfig().connectionId();
7979
if (connectionId != null) {
8080
queueCheckIfSoonUnsupported(connectionId, configScopeId);
8181
}

backend/core/src/main/java/org/sonarsource/sonarlint/core/analysis/AnalysisService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,7 @@ public void onConfigurationScopeAdded(ConfigurationScopesAddedWithBindingEvent e
513513
public void onConfigurationScopeRemoved(ConfigurationScopeRemovedEvent event) {
514514
var removedConfigurationScopeId = event.getRemovedConfigurationScopeId();
515515
analysisReadinessByConfigScopeId.remove(removedConfigurationScopeId);
516-
schedulerCache.unregisterModule(removedConfigurationScopeId, event.getRemovedBindingConfiguration().getConnectionId());
516+
schedulerCache.unregisterModule(removedConfigurationScopeId, event.getRemovedBindingConfiguration().connectionId());
517517
}
518518

519519
@EventListener

backend/core/src/main/java/org/sonarsource/sonarlint/core/embedded/server/RequestHandlerBindingAssistant.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,12 @@
4343
import org.sonarsource.sonarlint.core.repository.config.ConfigurationRepository;
4444
import org.sonarsource.sonarlint.core.repository.connection.ConnectionConfigurationRepository;
4545
import org.sonarsource.sonarlint.core.rpc.protocol.SonarLintRpcClient;
46-
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarCloudConnectionDto;
47-
import org.sonarsource.sonarlint.core.rpc.protocol.backend.connection.common.TransientSonarQubeConnectionDto;
4846
import org.sonarsource.sonarlint.core.rpc.protocol.client.binding.AssistBindingParams;
4947
import org.sonarsource.sonarlint.core.rpc.protocol.client.binding.NoBindingSuggestionFoundParams;
5048
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.AssistCreatingConnectionParams;
5149
import org.sonarsource.sonarlint.core.rpc.protocol.client.connection.AssistCreatingConnectionResponse;
5250
import org.sonarsource.sonarlint.core.rpc.protocol.client.message.MessageType;
5351
import org.sonarsource.sonarlint.core.rpc.protocol.client.message.ShowMessageParams;
54-
import org.sonarsource.sonarlint.core.rpc.protocol.common.Either;
55-
import org.sonarsource.sonarlint.core.rpc.protocol.common.TokenDto;
56-
import org.sonarsource.sonarlint.core.rpc.protocol.common.UsernamePasswordDto;
5752

5853
public class RequestHandlerBindingAssistant {
5954

@@ -229,7 +224,7 @@ NewBinding assistBinding(String connectionId, boolean isSonarCloud, String proje
229224
return new NewBinding(connectionId, null);
230225
}
231226
var bindableConfig = configScopeCandidates.iterator().next();
232-
var future = client.assistBinding(new AssistBindingParams(connectionId, projectKey, bindableConfig.getConfigurationScope().getId(),
227+
var future = client.assistBinding(new AssistBindingParams(connectionId, projectKey, bindableConfig.getConfigurationScope().id(),
233228
bindableConfig.isFromSharedConfiguration()));
234229
cancelMonitor.onCancel(() -> future.cancel(true));
235230
var response = future.join();

backend/core/src/main/java/org/sonarsource/sonarlint/core/event/ConfigurationScopeRemovedEvent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public ConfigurationScopeRemovedEvent(ConfigurationScope removedConfigurationSco
3232
}
3333

3434
public String getRemovedConfigurationScopeId() {
35-
return removedConfigurationScope.getId();
35+
return removedConfigurationScope.id();
3636
}
3737

3838
public ConfigurationScope getRemovedConfigurationScope() {

0 commit comments

Comments
 (0)