From 2bb7acebc75ff7ae6cb0a413ac298f048a43d534 Mon Sep 17 00:00:00 2001 From: Wojtek Wajerowicz <115081248+wojciech-wajerowicz-sonarsource@users.noreply.github.com> Date: Wed, 7 Jun 2023 17:18:52 +0200 Subject: SONAR-19160 handle missing locations in SARIF import. (#8476) --- .../sonar/scanner/externalissue/sarif/ResultMapper.java | 6 ++++-- .../scanner/externalissue/sarif/ResultMapperTest.java | 14 +++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'sonar-scanner-engine') diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/sarif/ResultMapper.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/sarif/ResultMapper.java index 213b03c3634..7668c477b57 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/sarif/ResultMapper.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/sarif/ResultMapper.java @@ -22,6 +22,7 @@ package org.sonar.scanner.externalissue.sarif; import com.google.common.collect.ImmutableMap; import java.util.Map; import java.util.Optional; +import java.util.Set; import javax.annotation.Nullable; import org.sonar.api.batch.rule.Severity; import org.sonar.api.batch.sensor.SensorContext; @@ -72,10 +73,11 @@ public class ResultMapper { private void mapLocations(Result result, NewExternalIssue newExternalIssue) { NewIssueLocation newIssueLocation = newExternalIssue.newLocation(); - if (result.getLocations().isEmpty()) { + Set locations = result.getLocations(); + if (locations == null || locations.isEmpty()) { newExternalIssue.at(locationMapper.fillIssueInProjectLocation(result, newIssueLocation)); } else { - Location firstLocation = result.getLocations().iterator().next(); + Location firstLocation = locations.iterator().next(); NewIssueLocation primaryLocation = fillFileOrProjectLocation(result, newIssueLocation, firstLocation); newExternalIssue.at(primaryLocation); } diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/sarif/ResultMapperTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/sarif/ResultMapperTest.java index c6eaed7f556..309a8ed9503 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/sarif/ResultMapperTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/sarif/ResultMapperTest.java @@ -129,7 +129,19 @@ public class ResultMapperTest { } @Test - public void mapResult_whenLocationNotFound_createsProjectLocation() { + public void mapResult_whenLocationsIsEmpty_createsProjectLocation() { + NewExternalIssue newExternalIssue = resultMapper.mapResult(DRIVER_NAME, WARNING, result); + + verify(locationMapper).fillIssueInProjectLocation(result, newExternalIssueLocation); + verifyNoMoreInteractions(locationMapper); + verify(newExternalIssue).at(newExternalIssueLocation); + verify(newExternalIssue, never()).addLocation(any()); + verify(newExternalIssue, never()).addFlow(any()); + } + + @Test + public void mapResult_whenLocationsIsNull_createsProjectLocation() { + when(result.getLocations()).thenReturn(null); NewExternalIssue newExternalIssue = resultMapper.mapResult(DRIVER_NAME, WARNING, result); verify(locationMapper).fillIssueInProjectLocation(result, newExternalIssueLocation); -- cgit v1.2.3