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;
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;
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));
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();
assertThat(got.end().lineOffset()).isEqualTo(sourceFile.selectLine(input.endLine).end().lineOffset());
}
+ @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();
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());
}