diff --git a/sonar-dotnet-shared-library/src/main/java/org/sonarsource/dotnet/shared/plugins/protobuf/MetricsImporter.java b/sonar-dotnet-shared-library/src/main/java/org/sonarsource/dotnet/shared/plugins/protobuf/MetricsImporter.java index 1f2b8a7ea5b..e2b5efcdb10 100644 --- a/sonar-dotnet-shared-library/src/main/java/org/sonarsource/dotnet/shared/plugins/protobuf/MetricsImporter.java +++ b/sonar-dotnet-shared-library/src/main/java/org/sonarsource/dotnet/shared/plugins/protobuf/MetricsImporter.java @@ -23,6 +23,9 @@ import java.util.HashSet; import java.util.function.UnaryOperator; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; import org.sonar.api.batch.sensor.SensorContext; @@ -40,6 +43,7 @@ public class MetricsImporter extends ProtobufImporter { private final SensorContext context; private final FileLinesContextFactory fileLinesContextFactory; private final NoSonarFilter noSonarFilter; + private static final Logger LOG = LoggerFactory.getLogger(MetricsImporter.class); public MetricsImporter(SensorContext context, FileLinesContextFactory fileLinesContextFactory, NoSonarFilter noSonarFilter, UnaryOperator toRealPath) { @@ -62,8 +66,13 @@ void consumeFor(InputFile inputFile, MetricsInfo message) { saveMetric(context, inputFile, CoreMetrics.COMMENT_LINES, message.getNonBlankCommentCount()); + int lineCount = inputFile.lines(); for (int line : message.getCodeLineList()) { - fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); + if (line <= lineCount) { + fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); + } else if (LOG.isDebugEnabled()) { + LOG.debug("The code line number was out of the range. File {}, Line {}", inputFile.filename(), line); + } } saveMetric(context, inputFile, CoreMetrics.NCLOC, message.getCodeLineCount()); @@ -72,7 +81,7 @@ void consumeFor(InputFile inputFile, MetricsInfo message) { } for (Integer executableLineNumber : message.getExecutableLinesList()) { - fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, executableLineNumber, 1); + fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, executableLineNumber, 1); } fileLinesContext.save(); diff --git a/sonar-dotnet-shared-library/src/test/java/org/sonarsource/dotnet/shared/plugins/protobuf/RazorMetricsImporterTest.java b/sonar-dotnet-shared-library/src/test/java/org/sonarsource/dotnet/shared/plugins/protobuf/RazorMetricsImporterTest.java index 6ddf1a9c132..9889d038c81 100644 --- a/sonar-dotnet-shared-library/src/test/java/org/sonarsource/dotnet/shared/plugins/protobuf/RazorMetricsImporterTest.java +++ b/sonar-dotnet-shared-library/src/test/java/org/sonarsource/dotnet/shared/plugins/protobuf/RazorMetricsImporterTest.java @@ -25,6 +25,7 @@ import org.assertj.core.groups.Tuple; import org.junit.Before; import org.junit.Test; +import org.slf4j.event.Level; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.issue.NoSonarFilter; import org.sonar.api.measures.CoreMetrics; @@ -82,6 +83,7 @@ public void roslyn_metrics_are_imported() { verify(fileLinesContext, times(2)).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 3, 1); verify(fileLinesContext, times(2)).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 5, 1); verify(fileLinesContext, times(2)).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 5, 1); + verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 8, 1); verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 9, 1); verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 13, 1); @@ -93,5 +95,7 @@ public void roslyn_metrics_are_imported() { verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 23, 1); verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 24, 1); verify(fileLinesContext).setIntValue(CoreMetrics.NCLOC_DATA_KEY, 25, 1); + + assertThat(logTester.logs(Level.DEBUG)).containsExactly("The code line number was out of the range. File Page.razor, Line 4"); } }