aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-scanner-engine/src
diff options
context:
space:
mode:
authorDejan Milisavljevic <130993898+dejan-milisavljevic-sonarsource@users.noreply.github.com>2024-02-15 16:46:48 +0100
committersonartech <sonartech@sonarsource.com>2024-02-15 20:02:34 +0000
commit354bbb2091038a18d621799bc70b06f6376e63ea (patch)
tree46d6fb4164affab487afed40d487b9dd3ae0e815 /sonar-scanner-engine/src
parentafa1e65cfbe2f17f39ba73e1fe2dd2a543c5bf9a (diff)
downloadsonarqube-354bbb2091038a18d621799bc70b06f6376e63ea.tar.gz
sonarqube-354bbb2091038a18d621799bc70b06f6376e63ea.zip
SONAR-20958 Improve error message for startColumn on empty line (#10628)
Diffstat (limited to 'sonar-scanner-engine/src')
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/ExternalIssueImporter.java9
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java27
2 files changed, 35 insertions, 1 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/ExternalIssueImporter.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/ExternalIssueImporter.java
index e76122628b4..848a54c1278 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/ExternalIssueImporter.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/externalissue/ExternalIssueImporter.java
@@ -44,6 +44,8 @@ import org.sonar.scanner.externalissue.ExternalIssueReport.Issue;
import org.sonar.scanner.externalissue.ExternalIssueReport.Location;
import org.sonar.scanner.externalissue.ExternalIssueReport.Rule;
+import static java.lang.String.format;
+
public class ExternalIssueImporter {
private static final Logger LOG = LoggerFactory.getLogger(ExternalIssueImporter.class);
private static final int MAX_UNKNOWN_FILE_PATHS_TO_PRINT = 5;
@@ -197,6 +199,7 @@ public class ExternalIssueImporter {
if (location.textRange != null) {
if (location.textRange.startColumn != null) {
TextPointer start = file.newPointer(location.textRange.startLine, location.textRange.startColumn);
+ checkStartColumnOnEmptyLine(file, start);
int endLine = (location.textRange.endLine != null) ? location.textRange.endLine : location.textRange.startLine;
int endColumn;
@@ -211,6 +214,12 @@ public class ExternalIssueImporter {
return newLocation;
}
+ private static void checkStartColumnOnEmptyLine(InputFile file, TextPointer startPointer) {
+ if (file.selectLine(startPointer.line()).end().lineOffset() == 0) {
+ throw new IllegalArgumentException(format("A 'startColumn' %s cannot be provided when the line is empty", startPointer));
+ }
+ }
+
@CheckForNull
private static InputFile findFile(SensorContext context, String filePath) {
return context.fileSystem().inputFile(context.fileSystem().predicates().hasPath(filePath));
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
index be0d139b4cd..549a8517a16 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/externalissue/ExternalIssueImporterTest.java
@@ -71,7 +71,7 @@ public class ExternalIssueImporterTest {
context = SensorContextTester.create(baseDir);
sourceFile = new TestInputFileBuilder("foo", "src/Foo.java")
.setModuleBaseDir(baseDir.toPath())
- .initMetadata("the first line\nthe second line")
+ .initMetadata("the first line\nthe second line\n\n")
.setCharset(UTF_8)
.setLanguage("java")
.build();
@@ -174,6 +174,18 @@ public class ExternalIssueImporterTest {
}
@Test
+ public void execute_whenNewFormatWithStartColumnOnEmptyLine_shouldThrowException() {
+ ExternalIssueReport.TextRange input = new ExternalIssueReport.TextRange();
+ input.startLine = 3;
+ input.startColumn = 0;
+
+ ExternalIssueReport.Issue issue = newIssue(input);
+ assertThatThrownBy(() -> runOn(issue))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessage("A 'startColumn' [line=3, lineOffset=0] cannot be provided when the line is empty");
+ }
+
+ @Test
public void execute_whenNewFormatContainsNonExistentCleanCodeAttribute_shouldThrowException() {
ExternalIssueReport report = new ExternalIssueReport();
ExternalIssueReport.Rule rule = createRule("not_existent_attribute", MAINTAINABILITY.name(), HIGH.name());
@@ -304,6 +316,19 @@ public class ExternalIssueImporterTest {
assertThat(got.end().lineOffset()).isEqualTo(sourceFile.selectLine(input.endLine).end().lineOffset());
}
+ @Test
+ public void execute_whenDeprecatedFormatWithStartColumnOnEmptyLine_shouldThrowException() {
+ ExternalIssueReport.TextRange input = new ExternalIssueReport.TextRange();
+ input.startLine = 3;
+ input.startColumn = 0;
+
+ ExternalIssueReport.Issue issue = newIssue(input);
+ assertThatThrownBy(() -> runOnDeprecatedFormat(issue))
+ .isInstanceOf(IllegalArgumentException.class)
+ .hasMessage("A 'startColumn' [line=3, lineOffset=0] cannot be provided when the line is empty");
+ }
+
+
private static ExternalIssueReport.Rule createRule() {
return createRule(RULE_ATTRIBUTE.name(), SECURITY.name(), HIGH.name());
}