aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2016-03-22 10:06:28 +0100
committerJulien HENRY <julien.henry@sonarsource.com>2016-03-23 20:31:30 +0100
commitf4354c32ebc7ac46ea261c81ed791f065e080c02 (patch)
tree8bb36abf2653e768712402b840968615a35cabcc
parentf7422cae1cda99e1b81aa92695c73ef5398bc5ce (diff)
downloadsonarqube-f4354c32ebc7ac46ea261c81ed791f065e080c02.tar.gz
sonarqube-f4354c32ebc7ac46ea261c81ed791f065e080c02.zip
Update scanner report to protobuf 3 (imply SONAR-7497)
-rw-r--r--it/it-tests/src/test/resources/test/TestExecutionTest/expected.json10
-rw-r--r--pom.xml2
-rw-r--r--server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/PersistFileSourcesStepTest.java17
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReader.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReaderImpl.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java21
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java35
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java46
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java7
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/source/CoverageLineReader.java34
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/source/HighlightingLineReader.java42
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadDuplicationsFromReportStep.java5
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadQualityProfilesStep.java5
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java15
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java4
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java16
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java11
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderImplTest.java12
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderRule.java16
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/component/ComponentImplTest.java35
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/measure/BatchMeasureToMeasureTest.java45
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java22
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/source/CoverageLineReaderTest.java30
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/source/HighlightingLineReaderTest.java37
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/source/ReportIteratorTest.java19
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/BuildComponentTreeStepTest.java31
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadQualityProfilesStepTest.java2
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistFileSourcesStepTest.java19
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistProjectLinksStepTest.java44
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java6
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java27
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java176
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java4
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/issue/IssueTransformer.java13
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/issue/ModuleIssues.java22
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/mediumtest/TaskResult.java37
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/ActiveRulesPublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/ComponentsPublisher.java16
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/CoveragePublisher.java30
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/MeasuresPublisher.java62
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/ScannerReportUtils.java2
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/report/TestExecutionAndCoveragePublisher.java6
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java8
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/cpd/CpdExecutorTest.java36
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java13
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java3
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/coverage/CoverageMediumTest.java4
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/cpd/CpdMediumTest.java10
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java16
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java25
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java23
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java17
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java3
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java14
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/tests/TestExecutionMediumTest.java7
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/report/ActiveRulesPublisherTest.java7
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java6
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/batch/report/CoveragePublisherTest.java10
-rw-r--r--sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportReader.java24
-rw-r--r--sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportWriter.java4
-rw-r--r--sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/viewer/ScannerReportViewerApp.java14
-rw-r--r--sonar-scanner-protocol/src/main/protobuf/constants.proto60
-rw-r--r--sonar-scanner-protocol/src/main/protobuf/scanner_report.proto231
-rw-r--r--sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java36
-rw-r--r--sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java35
68 files changed, 761 insertions, 855 deletions
diff --git a/it/it-tests/src/test/resources/test/TestExecutionTest/expected.json b/it/it-tests/src/test/resources/test/TestExecutionTest/expected.json
index 8ad71d649bc..843d28f5284 100644
--- a/it/it-tests/src/test/resources/test/TestExecutionTest/expected.json
+++ b/it/it-tests/src/test/resources/test/TestExecutionTest/expected.json
@@ -4,9 +4,7 @@
"name": "success",
"status": "OK",
"durationInMs": 4,
- "coveredLines": 0,
- "message": "",
- "stacktrace": ""
+ "coveredLines": 0
},
{
"name": "error",
@@ -21,15 +19,13 @@
"status": "FAILURE",
"durationInMs": 2,
"coveredLines": 0,
- "message": "Failure",
- "stacktrace": ""
+ "message": "Failure"
},
{
"name": "skipped",
"status": "SKIPPED",
"coveredLines": 0,
- "message": "",
- "stacktrace": ""
+ "durationInMs": 0
}
]
}
diff --git a/pom.xml b/pom.xml
index ad7bb80b874..73f97eb7d4d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
<orchestrator.version>3.11-build315</orchestrator.version>
<okhttp.version>2.6.0</okhttp.version>
- <protobuf.version>3.0.0-beta-1</protobuf.version>
+ <protobuf.version>3.0.0-beta-2</protobuf.version>
<protobuf.compiler>${settings.localRepository}/com/google/protobuf/protoc/${protobuf.version}/protoc-${protobuf.version}-${os.detected.classifier}.exe</protobuf.compiler>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/PersistFileSourcesStepTest.java b/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/PersistFileSourcesStepTest.java
index c5d96e80a30..cc2a09d3365 100644
--- a/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/PersistFileSourcesStepTest.java
+++ b/server/sonar-server-benchmarks/src/test/java/org/sonar/server/benchmark/PersistFileSourcesStepTest.java
@@ -34,8 +34,9 @@ import org.sonar.api.utils.System2;
import org.sonar.core.util.Uuids;
import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.server.computation.analysis.AnalysisMetadataHolderRule;
import org.sonar.server.computation.batch.BatchReportDirectoryHolderImpl;
@@ -118,7 +119,7 @@ public class PersistFileSourcesStepTest {
.build());
ScannerReport.Component.Builder project = ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT);
+ .setType(ComponentType.PROJECT);
List<Component> components = new ArrayList<>();
for (int fileRef = 2; fileRef <= NUMBER_OF_FILES + 1; fileRef++) {
@@ -152,7 +153,7 @@ public class PersistFileSourcesStepTest {
}
writer.writeComponent(ScannerReport.Component.newBuilder()
.setRef(fileRef)
- .setType(Constants.ComponentType.FILE)
+ .setType(ComponentType.FILE)
.setLines(NUMBER_OF_LINES)
.build());
@@ -168,8 +169,8 @@ public class PersistFileSourcesStepTest {
private static class LineData {
List<String> lines = new ArrayList<>();
ScannerReport.Changesets.Builder changesetsBuilder = ScannerReport.Changesets.newBuilder();
- List<ScannerReport.Coverage> coverages = new ArrayList<>();
- List<ScannerReport.SyntaxHighlighting> highlightings = new ArrayList<>();
+ List<ScannerReport.LineCoverage> coverages = new ArrayList<>();
+ List<ScannerReport.SyntaxHighlightingRule> highlightings = new ArrayList<>();
List<ScannerReport.Symbol> symbols = new ArrayList<>();
void generateLineData(int line) {
@@ -182,7 +183,7 @@ public class PersistFileSourcesStepTest {
.build())
.addChangesetIndexByLine(line - 1);
- coverages.add(ScannerReport.Coverage.newBuilder()
+ coverages.add(ScannerReport.LineCoverage.newBuilder()
.setLine(line)
.setConditions(10)
.setUtHits(true)
@@ -192,12 +193,12 @@ public class PersistFileSourcesStepTest {
.setOverallCoveredConditions(4)
.build());
- highlightings.add(ScannerReport.SyntaxHighlighting.newBuilder()
+ highlightings.add(ScannerReport.SyntaxHighlightingRule.newBuilder()
.setRange(ScannerReport.TextRange.newBuilder()
.setStartLine(line).setEndLine(line)
.setStartOffset(1).setEndOffset(3)
.build())
- .setType(Constants.HighlightingType.ANNOTATION)
+ .setType(HighlightingType.ANNOTATION)
.build());
symbols.add(ScannerReport.Symbol.newBuilder()
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReader.java
index 2941e9fc5d9..84ac8c306e1 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReader.java
@@ -46,9 +46,9 @@ public interface BatchReportReader {
CloseableIterator<ScannerReport.Symbol> readComponentSymbols(int componentRef);
- CloseableIterator<ScannerReport.SyntaxHighlighting> readComponentSyntaxHighlighting(int fileRef);
+ CloseableIterator<ScannerReport.SyntaxHighlightingRule> readComponentSyntaxHighlighting(int fileRef);
- CloseableIterator<ScannerReport.Coverage> readComponentCoverage(int fileRef);
+ CloseableIterator<ScannerReport.LineCoverage> readComponentCoverage(int fileRef);
/**
* Reads file source line by line. Return an absent optional if the file doest not exist
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReaderImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReaderImpl.java
index c1ae4b7f048..f4d80458401 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReaderImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/batch/BatchReportReaderImpl.java
@@ -110,12 +110,12 @@ public class BatchReportReaderImpl implements BatchReportReader {
}
@Override
- public CloseableIterator<ScannerReport.SyntaxHighlighting> readComponentSyntaxHighlighting(int fileRef) {
+ public CloseableIterator<ScannerReport.SyntaxHighlightingRule> readComponentSyntaxHighlighting(int fileRef) {
return delegate.readComponentSyntaxHighlighting(fileRef);
}
@Override
- public CloseableIterator<ScannerReport.Coverage> readComponentCoverage(int fileRef) {
+ public CloseableIterator<ScannerReport.LineCoverage> readComponentCoverage(int fileRef) {
return delegate.readComponentCoverage(fileRef);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java b/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java
index c1c48346a98..32479e48960 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/component/ComponentImpl.java
@@ -26,13 +26,14 @@ import java.util.List;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static java.util.Arrays.asList;
+import static org.elasticsearch.common.lang3.StringUtils.trimToNull;
@Immutable
public class ComponentImpl implements Component {
@@ -125,8 +126,8 @@ public class ComponentImpl implements Component {
private Builder(ScannerReport.Component component) {
checkNotNull(component);
this.type = convertType(component.getType());
- this.name = checkNotNull(component.getName());
- this.description = component.hasDescription() ? component.getDescription() : null;
+ this.name = component.getName();
+ this.description = trimToNull(component.getDescription());
this.reportAttributes = createBatchAttributes(component);
this.fileAttributes = createFileAttributes(component);
}
@@ -157,24 +158,24 @@ public class ComponentImpl implements Component {
private static ReportAttributes createBatchAttributes(ScannerReport.Component component) {
return ReportAttributes.newBuilder(component.getRef())
- .setVersion(component.hasVersion() ? component.getVersion() : null)
- .setPath(component.hasPath() ? component.getPath() : null)
+ .setVersion(trimToNull(component.getVersion()))
+ .setPath(trimToNull(component.getPath()))
.build();
}
@CheckForNull
private static FileAttributes createFileAttributes(ScannerReport.Component component) {
- if (component.getType() != Constants.ComponentType.FILE) {
+ if (component.getType() != ComponentType.FILE) {
return null;
}
return new FileAttributes(
- component.hasIsTest() && component.getIsTest(),
- component.hasLanguage() ? component.getLanguage() : null);
+ component.getIsTest(),
+ trimToNull(component.getLanguage()));
}
@VisibleForTesting
- static Type convertType(Constants.ComponentType type) {
+ static Type convertType(ComponentType type) {
switch (type) {
case PROJECT:
return Type.PROJECT;
@@ -185,7 +186,7 @@ public class ComponentImpl implements Component {
case FILE:
return Type.FILE;
default:
- throw new IllegalArgumentException("Unsupported Constants.ComponentType value " + type);
+ throw new IllegalArgumentException("Unsupported ComponentType value " + type);
}
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java
index 63aa189e73d..75cdfe284af 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java
@@ -32,6 +32,7 @@ import org.sonar.core.issue.tracking.LineHashSequence;
import org.sonar.core.util.CloseableIterator;
import org.sonar.db.protobuf.DbCommons;
import org.sonar.db.protobuf.DbIssues;
+import org.sonar.scanner.protocol.Constants.Severity;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
@@ -41,6 +42,7 @@ import org.sonar.server.computation.source.SourceLinesRepository;
import org.sonar.server.rule.CommonRuleKeys;
import static com.google.common.collect.Lists.newArrayList;
+import static org.elasticsearch.common.lang3.StringUtils.isNotEmpty;
public class TrackerRawInputFactory {
@@ -113,19 +115,20 @@ public class TrackerRawInputFactory {
DefaultIssue issue = new DefaultIssue();
init(issue);
issue.setRuleKey(RuleKey.of(reportIssue.getRuleRepository(), reportIssue.getRuleKey()));
- if (reportIssue.hasLine()) {
- issue.setLine(reportIssue.getLine());
- issue.setChecksum(lineHashSeq.getHashForLine(reportIssue.getLine()));
+ if (reportIssue.hasTextRange()) {
+ int startLine = reportIssue.getTextRange().getStartLine();
+ issue.setLine(startLine);
+ issue.setChecksum(lineHashSeq.getHashForLine(startLine));
} else {
issue.setChecksum("");
}
- if (reportIssue.hasMsg()) {
+ if (isNotEmpty(reportIssue.getMsg())) {
issue.setMessage(reportIssue.getMsg());
}
- if (reportIssue.hasSeverity()) {
+ if (reportIssue.getSeverity() != Severity.UNSET_SEVERITY) {
issue.setSeverity(reportIssue.getSeverity().name());
}
- if (reportIssue.hasGap()) {
+ if (reportIssue.getGap() != 0) {
issue.setGap(reportIssue.getGap());
}
DbIssues.Locations.Builder dbLocationsBuilder = DbIssues.Locations.newBuilder();
@@ -157,10 +160,10 @@ public class TrackerRawInputFactory {
private DbIssues.Location convertLocation(ScannerReport.IssueLocation source) {
DbIssues.Location.Builder target = DbIssues.Location.newBuilder();
- if (source.hasComponentRef() && source.getComponentRef() != component.getReportAttributes().getRef()) {
+ if (source.getComponentRef() != 0 && source.getComponentRef() != component.getReportAttributes().getRef()) {
target.setComponentId(treeRootHolder.getComponentByRef(source.getComponentRef()).getUuid());
}
- if (source.hasMsg()) {
+ if (isNotEmpty(source.getMsg())) {
target.setMsg(source.getMsg());
}
if (source.hasTextRange()) {
@@ -173,18 +176,10 @@ public class TrackerRawInputFactory {
private DbCommons.TextRange.Builder convertTextRange(ScannerReport.TextRange sourceRange) {
DbCommons.TextRange.Builder targetRange = DbCommons.TextRange.newBuilder();
- if (sourceRange.hasStartLine()) {
- targetRange.setStartLine(sourceRange.getStartLine());
- }
- if (sourceRange.hasStartOffset()) {
- targetRange.setStartOffset(sourceRange.getStartOffset());
- }
- if (sourceRange.hasEndLine()) {
- targetRange.setEndLine(sourceRange.getEndLine());
- }
- if (sourceRange.hasEndOffset()) {
- targetRange.setEndOffset(sourceRange.getEndOffset());
- }
+ targetRange.setStartLine(sourceRange.getStartLine());
+ targetRange.setStartOffset(sourceRange.getStartOffset());
+ targetRange.setEndLine(sourceRange.getEndLine());
+ targetRange.setEndOffset(sourceRange.getEndOffset());
return targetRange;
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java
index 21797b3b16f..d238f577d74 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/measure/BatchMeasureToMeasure.java
@@ -23,9 +23,11 @@ import com.google.common.base.Optional;
import java.util.Objects;
import javax.annotation.Nullable;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.ValueCase;
import org.sonar.server.computation.metric.Metric;
import static com.google.common.base.Optional.of;
+import static org.apache.commons.lang.StringUtils.trimToNull;
public class BatchMeasureToMeasure {
@@ -36,16 +38,15 @@ public class BatchMeasureToMeasure {
}
Measure.NewMeasureBuilder builder = Measure.newMeasureBuilder();
- String data = batchMeasure.hasStringValue() ? batchMeasure.getStringValue() : null;
switch (metric.getType().getValueType()) {
case INT:
- return toIntegerMeasure(builder, batchMeasure, data);
+ return toIntegerMeasure(builder, batchMeasure);
case LONG:
- return toLongMeasure(builder, batchMeasure, data);
+ return toLongMeasure(builder, batchMeasure);
case DOUBLE:
- return toDoubleMeasure(builder, batchMeasure, data);
+ return toDoubleMeasure(builder, batchMeasure);
case BOOLEAN:
- return toBooleanMeasure(builder, batchMeasure, data);
+ return toBooleanMeasure(builder, batchMeasure);
case STRING:
return toStringMeasure(builder, batchMeasure);
case LEVEL:
@@ -57,49 +58,48 @@ public class BatchMeasureToMeasure {
}
}
- private static Optional<Measure> toIntegerMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure, @Nullable String data) {
- if (!batchMeasure.hasIntValue()) {
+ private static Optional<Measure> toIntegerMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- return of(builder.create(batchMeasure.getIntValue(), data));
+ return of(builder.create(batchMeasure.getIntValue().getValue(), trimToNull(batchMeasure.getIntValue().getData())));
}
- private static Optional<Measure> toLongMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure, @Nullable String data) {
- if (!batchMeasure.hasLongValue()) {
+ private static Optional<Measure> toLongMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- return of(builder.create(batchMeasure.getLongValue(), data));
+ return of(builder.create(batchMeasure.getLongValue().getValue(), trimToNull(batchMeasure.getLongValue().getData())));
}
- private static Optional<Measure> toDoubleMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure, @Nullable String data) {
- if (!batchMeasure.hasDoubleValue()) {
+ private static Optional<Measure> toDoubleMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- return of(builder.create(batchMeasure.getDoubleValue(),
+ return of(builder.create(batchMeasure.getDoubleValue().getValue(),
// Decimals are not truncated in scanner report, so an arbitrary decimal scale is applied when reading values from report
- org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE,
- data));
+ org.sonar.api.measures.Metric.MAX_DECIMAL_SCALE, trimToNull(batchMeasure.getDoubleValue().getData())));
}
- private static Optional<Measure> toBooleanMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure, @Nullable String data) {
- if (!batchMeasure.hasBooleanValue()) {
+ private static Optional<Measure> toBooleanMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- return of(builder.create(batchMeasure.getBooleanValue(), data));
+ return of(builder.create(batchMeasure.getBooleanValue().getValue(), trimToNull(batchMeasure.getBooleanValue().getData())));
}
private static Optional<Measure> toStringMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
- if (!batchMeasure.hasStringValue()) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- return of(builder.create(batchMeasure.getStringValue()));
+ return of(builder.create(batchMeasure.getStringValue().getValue()));
}
private static Optional<Measure> toLevelMeasure(Measure.NewMeasureBuilder builder, ScannerReport.Measure batchMeasure) {
- if (!batchMeasure.hasStringValue()) {
+ if (batchMeasure.getValueCase() == ValueCase.VALUE_NOT_SET) {
return toNoValueMeasure(builder, batchMeasure);
}
- Optional<Measure.Level> level = Measure.Level.toLevel(batchMeasure.getStringValue());
+ Optional<Measure.Level> level = Measure.Level.toLevel(batchMeasure.getStringValue().getValue());
if (!level.isPresent()) {
return toNoValueMeasure(builder, batchMeasure);
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
index c60ceb94473..e9a5cf0c3dd 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/scm/ReportScmInfo.java
@@ -32,6 +32,7 @@ import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.FluentIterable.from;
import static java.util.Objects.requireNonNull;
+import static org.elasticsearch.common.lang3.StringUtils.isNotEmpty;
/**
* ScmInfo implementation based on the changeset information from the Report
@@ -95,11 +96,11 @@ class ReportScmInfo implements ScmInfo {
}
private Changeset convert(ScannerReport.Changesets.Changeset changeset, int line) {
- checkState(changeset.hasRevision(), "Changeset on line %s must have a revision", line);
- checkState(changeset.hasDate(), "Changeset on line %s must have a date", line);
+ checkState(isNotEmpty(changeset.getRevision()), "Changeset on line %s must have a revision", line);
+ checkState(changeset.getDate() != 0, "Changeset on line %s must have a date", line);
return builder
.setRevision(changeset.getRevision())
- .setAuthor(changeset.hasAuthor() ? changeset.getAuthor() : null)
+ .setAuthor(isNotEmpty(changeset.getAuthor()) ? changeset.getAuthor() : null)
.setDate(changeset.getDate())
.build();
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/source/CoverageLineReader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/source/CoverageLineReader.java
index 6a9ac03b364..19f8a80d611 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/source/CoverageLineReader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/source/CoverageLineReader.java
@@ -26,16 +26,16 @@ import org.sonar.scanner.protocol.output.ScannerReport;
public class CoverageLineReader implements LineReader {
- private final Iterator<ScannerReport.Coverage> coverageIterator;
- private ScannerReport.Coverage coverage;
+ private final Iterator<ScannerReport.LineCoverage> coverageIterator;
+ private ScannerReport.LineCoverage coverage;
- public CoverageLineReader(Iterator<ScannerReport.Coverage> coverageIterator) {
+ public CoverageLineReader(Iterator<ScannerReport.LineCoverage> coverageIterator) {
this.coverageIterator = coverageIterator;
}
@Override
public void read(DbFileSources.Line.Builder lineBuilder) {
- ScannerReport.Coverage reportCoverage = getNextLineCoverageIfMatchLine(lineBuilder.getLine());
+ ScannerReport.LineCoverage reportCoverage = getNextLineCoverageIfMatchLine(lineBuilder.getLine());
if (reportCoverage != null) {
processUnitTest(lineBuilder, reportCoverage);
processIntegrationTest(lineBuilder, reportCoverage);
@@ -44,38 +44,32 @@ public class CoverageLineReader implements LineReader {
}
}
- private static void processUnitTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.Coverage reportCoverage) {
- if (reportCoverage.hasUtHits()) {
- lineBuilder.setUtLineHits(reportCoverage.getUtHits() ? 1 : 0);
- }
- if (reportCoverage.hasConditions() && reportCoverage.hasUtCoveredConditions()) {
+ private static void processUnitTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) {
+ lineBuilder.setUtLineHits(reportCoverage.getUtHits() ? 1 : 0);
+ if (reportCoverage.getConditions() > 0) {
lineBuilder.setUtConditions(reportCoverage.getConditions());
lineBuilder.setUtCoveredConditions(reportCoverage.getUtCoveredConditions());
}
}
- private static void processIntegrationTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.Coverage reportCoverage) {
- if (reportCoverage.hasItHits()) {
- lineBuilder.setItLineHits(reportCoverage.getItHits() ? 1 : 0);
- }
- if (reportCoverage.hasConditions() && reportCoverage.hasItCoveredConditions()) {
+ private static void processIntegrationTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) {
+ lineBuilder.setItLineHits(reportCoverage.getItHits() ? 1 : 0);
+ if (reportCoverage.getConditions() > 0) {
lineBuilder.setItConditions(reportCoverage.getConditions());
lineBuilder.setItCoveredConditions(reportCoverage.getItCoveredConditions());
}
}
- private static void processOverallTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.Coverage reportCoverage) {
- if (reportCoverage.hasUtHits() || reportCoverage.hasItHits()) {
- lineBuilder.setOverallLineHits((reportCoverage.getUtHits() || reportCoverage.getItHits()) ? 1 : 0);
- }
- if (reportCoverage.hasConditions() && reportCoverage.hasOverallCoveredConditions()) {
+ private static void processOverallTest(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) {
+ lineBuilder.setOverallLineHits((reportCoverage.getUtHits() || reportCoverage.getItHits()) ? 1 : 0);
+ if (reportCoverage.getConditions() > 0) {
lineBuilder.setOverallConditions(reportCoverage.getConditions());
lineBuilder.setOverallCoveredConditions(reportCoverage.getOverallCoveredConditions());
}
}
@CheckForNull
- private ScannerReport.Coverage getNextLineCoverageIfMatchLine(int line) {
+ private ScannerReport.LineCoverage getNextLineCoverageIfMatchLine(int line) {
// Get next element (if exists)
if (coverage == null && coverageIterator.hasNext()) {
coverage = coverageIterator.next();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/source/HighlightingLineReader.java b/server/sonar-server/src/main/java/org/sonar/server/computation/source/HighlightingLineReader.java
index ac8e167336c..5e465939a2c 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/source/HighlightingLineReader.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/source/HighlightingLineReader.java
@@ -27,8 +27,8 @@ import javax.annotation.CheckForNull;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonar.db.protobuf.DbFileSources;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.source.RangeOffsetConverter.RangeOffsetConverterException;
@@ -43,26 +43,26 @@ public class HighlightingLineReader implements LineReader {
private boolean isHighlightingValid = true;
- private static final Map<Constants.HighlightingType, String> cssClassByType = ImmutableMap.<Constants.HighlightingType, String>builder()
- .put(Constants.HighlightingType.ANNOTATION, "a")
- .put(Constants.HighlightingType.CONSTANT, "c")
- .put(Constants.HighlightingType.COMMENT, "cd")
- .put(Constants.HighlightingType.CPP_DOC, "cppd")
- .put(Constants.HighlightingType.STRUCTURED_COMMENT, "j")
- .put(Constants.HighlightingType.KEYWORD, "k")
- .put(Constants.HighlightingType.KEYWORD_LIGHT, "h")
- .put(Constants.HighlightingType.HIGHLIGHTING_STRING, "s")
- .put(Constants.HighlightingType.PREPROCESS_DIRECTIVE, "p")
+ private static final Map<HighlightingType, String> cssClassByType = ImmutableMap.<HighlightingType, String>builder()
+ .put(HighlightingType.ANNOTATION, "a")
+ .put(HighlightingType.CONSTANT, "c")
+ .put(HighlightingType.COMMENT, "cd")
+ .put(HighlightingType.CPP_DOC, "cppd")
+ .put(HighlightingType.STRUCTURED_COMMENT, "j")
+ .put(HighlightingType.KEYWORD, "k")
+ .put(HighlightingType.KEYWORD_LIGHT, "h")
+ .put(HighlightingType.HIGHLIGHTING_STRING, "s")
+ .put(HighlightingType.PREPROCESS_DIRECTIVE, "p")
.build();
private final Component file;
- private final Iterator<ScannerReport.SyntaxHighlighting> lineHighlightingIterator;
+ private final Iterator<ScannerReport.SyntaxHighlightingRule> lineHighlightingIterator;
private final RangeOffsetConverter rangeOffsetConverter;
- private final List<ScannerReport.SyntaxHighlighting> highlightingList;
+ private final List<ScannerReport.SyntaxHighlightingRule> highlightingList;
- private ScannerReport.SyntaxHighlighting currentItem;
+ private ScannerReport.SyntaxHighlightingRule currentItem;
- public HighlightingLineReader(Component file, Iterator<ScannerReport.SyntaxHighlighting> lineHighlightingIterator, RangeOffsetConverter rangeOffsetConverter) {
+ public HighlightingLineReader(Component file, Iterator<ScannerReport.SyntaxHighlightingRule> lineHighlightingIterator, RangeOffsetConverter rangeOffsetConverter) {
this.file = file;
this.lineHighlightingIterator = lineHighlightingIterator;
this.rangeOffsetConverter = rangeOffsetConverter;
@@ -87,7 +87,7 @@ public class HighlightingLineReader implements LineReader {
StringBuilder highlighting = new StringBuilder();
incrementHighlightingListMatchingLine(line);
- for (Iterator<ScannerReport.SyntaxHighlighting> syntaxHighlightingIterator = highlightingList.iterator(); syntaxHighlightingIterator.hasNext();) {
+ for (Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator = highlightingList.iterator(); syntaxHighlightingIterator.hasNext();) {
processHighlighting(syntaxHighlightingIterator, highlighting, lineBuilder);
}
if (highlighting.length() > 0) {
@@ -95,9 +95,9 @@ public class HighlightingLineReader implements LineReader {
}
}
- private void processHighlighting(Iterator<ScannerReport.SyntaxHighlighting> syntaxHighlightingIterator, StringBuilder highlighting,
+ private void processHighlighting(Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator, StringBuilder highlighting,
DbFileSources.Line.Builder lineBuilder) {
- ScannerReport.SyntaxHighlighting syntaxHighlighting = syntaxHighlightingIterator.next();
+ ScannerReport.SyntaxHighlightingRule syntaxHighlighting = syntaxHighlightingIterator.next();
int line = lineBuilder.getLine();
ScannerReport.TextRange range = syntaxHighlighting.getRange();
if (range.getStartLine() <= line) {
@@ -118,7 +118,7 @@ public class HighlightingLineReader implements LineReader {
}
}
- private static String getCssClass(Constants.HighlightingType type) {
+ private static String getCssClass(HighlightingType type) {
String cssClass = cssClassByType.get(type);
if (cssClass != null) {
return cssClass;
@@ -128,7 +128,7 @@ public class HighlightingLineReader implements LineReader {
}
private void incrementHighlightingListMatchingLine(int line) {
- ScannerReport.SyntaxHighlighting syntaxHighlighting = getNextHighlightingMatchingLine(line);
+ ScannerReport.SyntaxHighlightingRule syntaxHighlighting = getNextHighlightingMatchingLine(line);
while (syntaxHighlighting != null) {
highlightingList.add(syntaxHighlighting);
this.currentItem = null;
@@ -137,7 +137,7 @@ public class HighlightingLineReader implements LineReader {
}
@CheckForNull
- private ScannerReport.SyntaxHighlighting getNextHighlightingMatchingLine(int line) {
+ private ScannerReport.SyntaxHighlightingRule getNextHighlightingMatchingLine(int line) {
// Get next element (if exists)
if (currentItem == null && lineHighlightingIterator.hasNext()) {
currentItem = lineHighlightingIterator.next();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadDuplicationsFromReportStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadDuplicationsFromReportStep.java
index 1826ff7a3eb..ba24979f136 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadDuplicationsFromReportStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadDuplicationsFromReportStep.java
@@ -85,8 +85,7 @@ public class LoadDuplicationsFromReportStep implements ComputationStep {
new Duplication(
convert(duplication.getOriginPosition(), id),
from(duplication.getDuplicateList())
- .transform(new BatchDuplicateToCeDuplicate(file))
- ));
+ .transform(new BatchDuplicateToCeDuplicate(file))));
}
private static TextBlock convert(ScannerReport.TextRange textRange) {
@@ -107,7 +106,7 @@ public class LoadDuplicationsFromReportStep implements ComputationStep {
@Override
@Nonnull
public Duplicate apply(@Nonnull ScannerReport.Duplicate input) {
- if (input.hasOtherFileRef()) {
+ if (input.getOtherFileRef() != 0) {
checkArgument(input.getOtherFileRef() != file.getReportAttributes().getRef(), "file and otherFile references can not be the same");
return new InProjectDuplicate(
treeRootHolder.getComponentByRef(input.getOtherFileRef()),
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadQualityProfilesStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadQualityProfilesStep.java
index 1f93bba907b..711079cde1d 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadQualityProfilesStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadQualityProfilesStep.java
@@ -79,10 +79,7 @@ public class LoadQualityProfilesStep implements ComputationStep {
private static ActiveRule convert(ScannerReport.ActiveRule input) {
RuleKey key = RuleKey.of(input.getRuleRepository(), input.getRuleKey());
- Map<String, String> params = new HashMap<>();
- for (ScannerReport.ActiveRule.ActiveRuleParam inputParam : input.getParamList()) {
- params.put(inputParam.getKey(), inputParam.getValue());
- }
+ Map<String, String> params = new HashMap<>(input.getParamsByKey());
return new ActiveRule(key, input.getSeverity().name(), params);
}
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java
index d34e2c627f5..da7885d9086 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/LoadReportAnalysisMetadataHolderStep.java
@@ -20,12 +20,13 @@
package org.sonar.server.computation.step;
import org.sonar.api.utils.MessageException;
+import org.sonar.ce.queue.CeTask;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.server.computation.analysis.MutableAnalysisMetadataHolder;
import org.sonar.server.computation.batch.BatchReportReader;
-import org.sonar.ce.queue.CeTask;
import static java.lang.String.format;
+import static org.elasticsearch.common.lang3.StringUtils.isNotEmpty;
/**
* Feed analysis metadata holder with metadata from the analysis report.
@@ -49,9 +50,9 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep {
checkProjectKeyConsistency(reportMetadata);
mutableAnalysisMetadataHolder.setRootComponentRef(reportMetadata.getRootComponentRef());
- mutableAnalysisMetadataHolder.setBranch(reportMetadata.hasBranch() ? reportMetadata.getBranch() : null);
+ mutableAnalysisMetadataHolder.setBranch(isNotEmpty(reportMetadata.getBranch()) ? reportMetadata.getBranch() : null);
mutableAnalysisMetadataHolder.setAnalysisDate(reportMetadata.getAnalysisDate());
- mutableAnalysisMetadataHolder.setCrossProjectDuplicationEnabled(reportMetadata.hasCrossProjectDuplicationActivated() && reportMetadata.getCrossProjectDuplicationActivated());
+ mutableAnalysisMetadataHolder.setCrossProjectDuplicationEnabled(reportMetadata.getCrossProjectDuplicationActivated());
}
private void checkProjectKeyConsistency(ScannerReport.Metadata reportMetadata) {
@@ -60,20 +61,18 @@ public class LoadReportAnalysisMetadataHolderStep implements ComputationStep {
if (componentKey == null) {
throw MessageException.of(format(
"Compute Engine task component key is null. Project with UUID %s must have been deleted since report was uploaded. Can not proceed.",
- ceTask.getComponentUuid()
- ));
+ ceTask.getComponentUuid()));
}
if (!componentKey.equals(reportProjectKey)) {
throw MessageException.of(format(
"ProjectKey in report (%s) is not consistent with projectKey under which the report as been submitted (%s)",
reportProjectKey,
- componentKey
- ));
+ componentKey));
}
}
private static String projectKeyFromReport(ScannerReport.Metadata reportMetadata) {
- if (reportMetadata.hasBranch()) {
+ if (isNotEmpty(reportMetadata.getBranch())) {
return reportMetadata.getProjectKey() + ":" + reportMetadata.getBranch();
}
return reportMetadata.getProjectKey();
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java
index 55832544b7d..38c94955002 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistFileSourcesStep.java
@@ -206,7 +206,7 @@ public class PersistFileSourcesStep implements ComputationStep {
LineReaders(BatchReportReader reportReader, ScmInfoRepository scmInfoRepository, DuplicationRepository duplicationRepository, Component component) {
int componentRef = component.getReportAttributes().getRef();
- CloseableIterator<ScannerReport.Coverage> coverageIt = reportReader.readComponentCoverage(componentRef);
+ CloseableIterator<ScannerReport.LineCoverage> coverageIt = reportReader.readComponentCoverage(componentRef);
closeables.add(coverageIt);
readers.add(new CoverageLineReader(coverageIt));
@@ -219,7 +219,7 @@ public class PersistFileSourcesStep implements ComputationStep {
}
RangeOffsetConverter rangeOffsetConverter = new RangeOffsetConverter();
- CloseableIterator<ScannerReport.SyntaxHighlighting> highlightingIt = reportReader.readComponentSyntaxHighlighting(componentRef);
+ CloseableIterator<ScannerReport.SyntaxHighlightingRule> highlightingIt = reportReader.readComponentSyntaxHighlighting(componentRef);
closeables.add(highlightingIt);
readers.add(new HighlightingLineReader(component, highlightingIt, rangeOffsetConverter));
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java
index 98fac5cb3c4..d6342d40ec9 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistProjectLinksStep.java
@@ -32,8 +32,8 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.MyBatis;
import org.sonar.db.component.ComponentLinkDto;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.CrawlerDepthLimit;
@@ -54,12 +54,12 @@ public class PersistProjectLinksStep implements ComputationStep {
private final TreeRootHolder treeRootHolder;
private final BatchReportReader reportReader;
- private static final Map<Constants.ComponentLinkType, String> typesConverter = ImmutableMap.of(
- Constants.ComponentLinkType.HOME, ComponentLinkDto.TYPE_HOME_PAGE,
- Constants.ComponentLinkType.SCM, ComponentLinkDto.TYPE_SOURCES,
- Constants.ComponentLinkType.SCM_DEV, ComponentLinkDto.TYPE_SOURCES_DEV,
- Constants.ComponentLinkType.CI, ComponentLinkDto.TYPE_CI,
- Constants.ComponentLinkType.ISSUE, ComponentLinkDto.TYPE_ISSUE_TRACKER);
+ private static final Map<ComponentLinkType, String> typesConverter = ImmutableMap.of(
+ ComponentLinkType.HOME, ComponentLinkDto.TYPE_HOME_PAGE,
+ ComponentLinkType.SCM, ComponentLinkDto.TYPE_SOURCES,
+ ComponentLinkType.SCM_DEV, ComponentLinkDto.TYPE_SOURCES_DEV,
+ ComponentLinkType.CI, ComponentLinkDto.TYPE_CI,
+ ComponentLinkType.ISSUE, ComponentLinkDto.TYPE_ISSUE_TRACKER);
public PersistProjectLinksStep(DbClient dbClient, I18n i18n, TreeRootHolder treeRootHolder, BatchReportReader reportReader) {
this.dbClient = dbClient;
@@ -145,7 +145,7 @@ public class PersistProjectLinksStep implements ComputationStep {
}
}
- private String convertType(Constants.ComponentLinkType reportType) {
+ private String convertType(ComponentLinkType reportType) {
String type = typesConverter.get(reportType);
if (type != null) {
return type;
diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java
index fec594e8115..8e63a314672 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/computation/step/PersistTestsStep.java
@@ -46,6 +46,7 @@ import org.sonar.db.protobuf.DbFileSources;
import org.sonar.db.source.FileSourceDto;
import org.sonar.db.source.FileSourceDto.Type;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Test.TestStatus;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ComponentVisitor;
@@ -191,18 +192,16 @@ public class PersistTestsStep implements ComputationStep {
DbFileSources.Test.Builder dbTest = DbFileSources.Test.newBuilder();
dbTest.setUuid(Uuids.create());
dbTest.setName(batchTest.getName());
- if (batchTest.hasStacktrace()) {
+ if (!batchTest.getStacktrace().isEmpty()) {
dbTest.setStacktrace(batchTest.getStacktrace());
}
- if (batchTest.hasStatus()) {
+ if (batchTest.getStatus() != TestStatus.UNSET) {
dbTest.setStatus(DbFileSources.Test.TestStatus.valueOf(batchTest.getStatus().name()));
}
- if (batchTest.hasMsg()) {
+ if (!batchTest.getMsg().isEmpty()) {
dbTest.setMsg(batchTest.getMsg());
}
- if (batchTest.hasDurationInMs()) {
- dbTest.setExecutionTimeMs(batchTest.getDurationInMs());
- }
+ dbTest.setExecutionTimeMs(batchTest.getDurationInMs());
tests.put(dbTest.getName(), dbTest);
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderImplTest.java
index c265584c865..6a8331f348d 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderImplTest.java
@@ -43,10 +43,10 @@ public class BatchReportReaderImplTest {
private static final ScannerReport.Duplication DUPLICATION = ScannerReport.Duplication.newBuilder().build();
private static final ScannerReport.CpdTextBlock DUPLICATION_BLOCK = ScannerReport.CpdTextBlock.newBuilder().build();
private static final ScannerReport.Symbol SYMBOL = ScannerReport.Symbol.newBuilder().build();
- private static final ScannerReport.SyntaxHighlighting SYNTAX_HIGHLIGHTING_1 = ScannerReport.SyntaxHighlighting.newBuilder().build();
- private static final ScannerReport.SyntaxHighlighting SYNTAX_HIGHLIGHTING_2 = ScannerReport.SyntaxHighlighting.newBuilder().build();
- private static final ScannerReport.Coverage COVERAGE_1 = ScannerReport.Coverage.newBuilder().build();
- private static final ScannerReport.Coverage COVERAGE_2 = ScannerReport.Coverage.newBuilder().build();
+ private static final ScannerReport.SyntaxHighlightingRule SYNTAX_HIGHLIGHTING_1 = ScannerReport.SyntaxHighlightingRule.newBuilder().build();
+ private static final ScannerReport.SyntaxHighlightingRule SYNTAX_HIGHLIGHTING_2 = ScannerReport.SyntaxHighlightingRule.newBuilder().build();
+ private static final ScannerReport.LineCoverage COVERAGE_1 = ScannerReport.LineCoverage.newBuilder().build();
+ private static final ScannerReport.LineCoverage COVERAGE_2 = ScannerReport.LineCoverage.newBuilder().build();
private static final ScannerReport.Test TEST_1 = ScannerReport.Test.newBuilder().setName("1").build();
private static final ScannerReport.Test TEST_2 = ScannerReport.Test.newBuilder().setName("2").build();
private static final ScannerReport.CoverageDetail COVERAGE_DETAIL_1 = ScannerReport.CoverageDetail.newBuilder().setTestName("1").build();
@@ -254,7 +254,7 @@ public class BatchReportReaderImplTest {
public void verify_readComponentSyntaxHighlighting() {
writer.writeComponentSyntaxHighlighting(COMPONENT_REF, of(SYNTAX_HIGHLIGHTING_1, SYNTAX_HIGHLIGHTING_2));
- CloseableIterator<ScannerReport.SyntaxHighlighting> res = underTest.readComponentSyntaxHighlighting(COMPONENT_REF);
+ CloseableIterator<ScannerReport.SyntaxHighlightingRule> res = underTest.readComponentSyntaxHighlighting(COMPONENT_REF);
assertThat(res).containsExactly(SYNTAX_HIGHLIGHTING_1, SYNTAX_HIGHLIGHTING_2);
res.close();
}
@@ -268,7 +268,7 @@ public class BatchReportReaderImplTest {
public void verify_readComponentCoverage() {
writer.writeComponentCoverage(COMPONENT_REF, of(COVERAGE_1, COVERAGE_2));
- CloseableIterator<ScannerReport.Coverage> res = underTest.readComponentCoverage(COMPONENT_REF);
+ CloseableIterator<ScannerReport.LineCoverage> res = underTest.readComponentCoverage(COMPONENT_REF);
assertThat(res).containsExactly(COVERAGE_1, COVERAGE_2);
res.close();
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderRule.java b/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderRule.java
index 323e7a85230..0c21f1bd677 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderRule.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/batch/BatchReportReaderRule.java
@@ -45,8 +45,8 @@ public class BatchReportReaderRule implements TestRule, BatchReportReader {
private Map<Integer, List<ScannerReport.Duplication>> duplications = new HashMap<>();
private Map<Integer, List<ScannerReport.CpdTextBlock>> duplicationBlocks = new HashMap<>();
private Map<Integer, List<ScannerReport.Symbol>> symbols = new HashMap<>();
- private Map<Integer, List<ScannerReport.SyntaxHighlighting>> syntaxHighlightings = new HashMap<>();
- private Map<Integer, List<ScannerReport.Coverage>> coverages = new HashMap<>();
+ private Map<Integer, List<ScannerReport.SyntaxHighlightingRule>> syntaxHighlightings = new HashMap<>();
+ private Map<Integer, List<ScannerReport.LineCoverage>> coverages = new HashMap<>();
private Map<Integer, List<String>> fileSources = new HashMap<>();
private Map<Integer, List<ScannerReport.Test>> tests = new HashMap<>();
private Map<Integer, List<ScannerReport.CoverageDetail>> coverageDetails = new HashMap<>();
@@ -201,8 +201,8 @@ public class BatchReportReaderRule implements TestRule, BatchReportReader {
}
@Override
- public CloseableIterator<ScannerReport.SyntaxHighlighting> readComponentSyntaxHighlighting(int fileRef) {
- List<ScannerReport.SyntaxHighlighting> res = this.syntaxHighlightings.get(fileRef);
+ public CloseableIterator<ScannerReport.SyntaxHighlightingRule> readComponentSyntaxHighlighting(int fileRef) {
+ List<ScannerReport.SyntaxHighlightingRule> res = this.syntaxHighlightings.get(fileRef);
if (res == null) {
return CloseableIterator.emptyCloseableIterator();
}
@@ -210,14 +210,14 @@ public class BatchReportReaderRule implements TestRule, BatchReportReader {
return CloseableIterator.from(res.iterator());
}
- public BatchReportReaderRule putSyntaxHighlighting(int fileRef, List<ScannerReport.SyntaxHighlighting> syntaxHighlightings) {
+ public BatchReportReaderRule putSyntaxHighlighting(int fileRef, List<ScannerReport.SyntaxHighlightingRule> syntaxHighlightings) {
this.syntaxHighlightings.put(fileRef, syntaxHighlightings);
return this;
}
@Override
- public CloseableIterator<ScannerReport.Coverage> readComponentCoverage(int fileRef) {
- List<ScannerReport.Coverage> res = this.coverages.get(fileRef);
+ public CloseableIterator<ScannerReport.LineCoverage> readComponentCoverage(int fileRef) {
+ List<ScannerReport.LineCoverage> res = this.coverages.get(fileRef);
if (res == null) {
return CloseableIterator.emptyCloseableIterator();
}
@@ -225,7 +225,7 @@ public class BatchReportReaderRule implements TestRule, BatchReportReader {
return CloseableIterator.from(res.iterator());
}
- public BatchReportReaderRule putCoverage(int fileRef, List<ScannerReport.Coverage> coverages) {
+ public BatchReportReaderRule putCoverage(int fileRef, List<ScannerReport.LineCoverage> coverages) {
this.coverages.put(fileRef, coverages);
return this;
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/component/ComponentImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/component/ComponentImplTest.java
index 1427bfb3c9b..1a50e60e6c0 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/component/ComponentImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/component/ComponentImplTest.java
@@ -23,15 +23,18 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
-import static com.google.common.base.Predicates.equalTo;
+import static com.google.common.base.Predicates.in;
import static com.google.common.base.Predicates.not;
import static com.google.common.collect.FluentIterable.from;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
-import static org.sonar.scanner.protocol.Constants.ComponentType;
-import static org.sonar.scanner.protocol.Constants.ComponentType.FILE;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.DIRECTORY;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.FILE;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.UNRECOGNIZED;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.UNSET;
import static org.sonar.server.computation.component.ComponentImpl.builder;
public class ComponentImplTest {
@@ -44,7 +47,7 @@ public class ComponentImplTest {
@Test
public void verify_key_and_uuid() throws Exception {
- ComponentImpl component = builder(ScannerReport.Component.newBuilder().build()).setKey(KEY).setUuid(UUID).build();
+ ComponentImpl component = builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setKey(KEY).setUuid(UUID).build();
assertThat(component.getKey()).isEqualTo(KEY);
assertThat(component.getUuid()).isEqualTo(UUID);
@@ -61,47 +64,47 @@ public class ComponentImplTest {
public void set_key_throws_NPE_if_component_arg_is_Null() {
thrown.expect(NullPointerException.class);
- builder(ScannerReport.Component.newBuilder().build()).setUuid(null);
+ builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setUuid(null);
}
@Test
public void set_uuid_throws_NPE_if_component_arg_is_Null() {
thrown.expect(NullPointerException.class);
- builder(ScannerReport.Component.newBuilder().build()).setKey(null);
+ builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setKey(null);
}
@Test
public void build_without_key_throws_NPE_if_component_arg_is_Null() {
thrown.expect(NullPointerException.class);
- builder(ScannerReport.Component.newBuilder().build()).setUuid("ABCD").build();
+ builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setUuid("ABCD").build();
}
@Test
public void build_without_uuid_throws_NPE_if_component_arg_is_Null() {
thrown.expect(NullPointerException.class);
- builder(ScannerReport.Component.newBuilder().build()).setKey(KEY).build();
+ builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setKey(KEY).build();
}
@Test
public void get_name_from_batch_component() {
String name = "project";
- ComponentImpl component = buildSimpleComponent(ScannerReport.Component.newBuilder().setName(name).build());
+ ComponentImpl component = buildSimpleComponent(ScannerReport.Component.newBuilder().setType(FILE).setName(name).build());
assertThat(component.getName()).isEqualTo(name);
}
@Test
public void get_version_from_batch_component() {
String version = "1.0";
- ComponentImpl component = buildSimpleComponent(ScannerReport.Component.newBuilder().setVersion(version).build());
+ ComponentImpl component = buildSimpleComponent(ScannerReport.Component.newBuilder().setType(FILE).setVersion(version).build());
assertThat(component.getReportAttributes().getVersion()).isEqualTo(version);
}
@Test
public void getFileAttributes_throws_ISE_if_BatchComponent_does_not_have_type_FILE() {
- for (ComponentType componentType : from(asList(ComponentType.values())).filter(not(equalTo(FILE)))) {
+ for (ComponentType componentType : from(asList(ComponentType.values())).filter(not(in(asList(FILE, UNSET, UNRECOGNIZED))))) {
ComponentImpl component = buildSimpleComponent(ScannerReport.Component.newBuilder().setType(componentType).build());
try {
component.getFileAttributes();
@@ -129,13 +132,11 @@ public class ComponentImplTest {
@Test
public void build_with_child() throws Exception {
- buildSimpleComponent(ScannerReport.Component.newBuilder().build());
-
ComponentImpl child = builder(ScannerReport.Component.newBuilder().setType(FILE).build())
.setKey("CHILD_KEY")
.setUuid("CHILD_UUID")
.build();
- ComponentImpl componentImpl = builder(ScannerReport.Component.newBuilder().build())
+ ComponentImpl componentImpl = builder(ScannerReport.Component.newBuilder().setType(DIRECTORY).build())
.setKey(KEY)
.setUuid(UUID)
.addChildren(child)
@@ -150,7 +151,7 @@ public class ComponentImplTest {
@Test
public void convertType() {
- for (ComponentType componentType : ComponentType.values()) {
+ for (ComponentType componentType : from(asList(ComponentType.values())).filter(not(in(asList(UNSET, UNRECOGNIZED))))) {
assertThat(ComponentImpl.Builder.convertType(componentType)).isEqualTo(Component.Type.valueOf(componentType.name()));
}
}
@@ -161,7 +162,7 @@ public class ComponentImplTest {
@Test
public void equals_compares_on_uuid_only() {
- ComponentImpl.Builder builder = builder(ScannerReport.Component.newBuilder().build()).setUuid(UUID);
+ ComponentImpl.Builder builder = builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setUuid(UUID);
assertThat(builder.setKey("1").build()).isEqualTo(builder.setKey("1").build());
assertThat(builder.setKey("1").build()).isEqualTo(builder.setKey("2").build());
@@ -169,7 +170,7 @@ public class ComponentImplTest {
@Test
public void hashCode_is_hashcode_of_uuid() {
- ComponentImpl.Builder builder = builder(ScannerReport.Component.newBuilder().build()).setUuid(UUID);
+ ComponentImpl.Builder builder = builder(ScannerReport.Component.newBuilder().setType(FILE).build()).setUuid(UUID);
assertThat(builder.setKey("1").build().hashCode()).isEqualTo(builder.setKey("1").build().hashCode());
assertThat(builder.setKey("1").build().hashCode()).isEqualTo(builder.setKey("2").build().hashCode());
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java
index fc43b2639cf..83af9b05e88 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java
@@ -30,6 +30,7 @@ import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.tracking.Input;
import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.TextRange;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
@@ -88,7 +89,7 @@ public class TrackerRawInputFactoryTest {
public void load_issues() throws Exception {
fileSourceRepository.addLines(FILE_REF, "line 1;", "line 2;");
ScannerReport.Issue reportIssue = ScannerReport.Issue.newBuilder()
- .setLine(2)
+ .setTextRange(TextRange.newBuilder().setStartLine(2).build())
.setMsg("the message")
.setRuleRepository("java")
.setRuleKey("S001")
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/BatchMeasureToMeasureTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/BatchMeasureToMeasureTest.java
index ddc18d8c558..9d02c40974c 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/BatchMeasureToMeasureTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/BatchMeasureToMeasureTest.java
@@ -25,6 +25,11 @@ import com.tngtech.java.junit.dataprovider.DataProviderRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.BoolValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.DoubleValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.IntValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.LongValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue;
import org.sonar.server.computation.metric.Metric;
import org.sonar.server.computation.metric.MetricImpl;
@@ -70,7 +75,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_returns_no_value_if_dto_has_invalid_string_value_for_LEVEL_Metric() {
- Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue("trololo").build(), SOME_LEVEL_METRIC);
+ Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue("trololo")).build(), SOME_LEVEL_METRIC);
assertThat(measure).isPresent();
assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.NO_VALUE);
@@ -78,7 +83,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_returns_no_value_if_dto_has_value_in_wrong_case_for_LEVEL_Metric() {
- Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue("waRn").build(), SOME_LEVEL_METRIC);
+ Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue("waRn")).build(), SOME_LEVEL_METRIC);
assertThat(measure).isPresent();
assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.NO_VALUE);
@@ -92,7 +97,8 @@ public class BatchMeasureToMeasureTest {
}
private void verify_toMeasure_returns_value_for_LEVEL_Metric(Measure.Level expectedQualityGateStatus) {
- Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue(expectedQualityGateStatus.name()).build(), SOME_LEVEL_METRIC);
+ Optional<Measure> measure =
+ underTest.toMeasure(ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue(expectedQualityGateStatus.name())).build(), SOME_LEVEL_METRIC);
assertThat(measure).isPresent();
assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.LEVEL);
assertThat(measure.get().getLevelValue()).isEqualTo(expectedQualityGateStatus);
@@ -101,7 +107,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_for_LEVEL_Metric_maps_QualityGateStatus() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setStringValue(Measure.Level.OK.name())
+ .setStringValue(StringValue.newBuilder().setValue(Measure.Level.OK.name()))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_LEVEL_METRIC);
@@ -120,7 +126,7 @@ public class BatchMeasureToMeasureTest {
private void verify_toMeasure_for_LEVEL_Metric_parses_level_from_data(Measure.Level expectedLevel) {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setStringValue(expectedLevel.name())
+ .setStringValue(StringValue.newBuilder().setValue(expectedLevel.name()))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_LEVEL_METRIC);
@@ -140,8 +146,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_maps_data_and_alert_properties_in_dto_for_Int_Metric() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setIntValue(10)
- .setStringValue(SOME_DATA)
+ .setIntValue(IntValue.newBuilder().setValue(10).setData(SOME_DATA))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_INT_METRIC);
@@ -162,7 +167,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_returns_long_part_of_value_in_dto_for_Long_Metric() {
- Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setLongValue(15l).build(), SOME_LONG_METRIC);
+ Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setLongValue(LongValue.newBuilder().setValue(15l)).build(), SOME_LONG_METRIC);
assertThat(measure.isPresent()).isTrue();
assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.LONG);
@@ -172,8 +177,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_maps_data_and_alert_properties_in_dto_for_Long_Metric() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setLongValue(10l)
- .setStringValue(SOME_DATA)
+ .setLongValue(LongValue.newBuilder().setValue(10l).setData(SOME_DATA))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_LONG_METRIC);
@@ -195,8 +199,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_maps_data_and_alert_properties_in_dto_for_Double_Metric() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setDoubleValue(10.6395d)
- .setStringValue(SOME_DATA)
+ .setDoubleValue(DoubleValue.newBuilder().setValue(10.6395d).setData(SOME_DATA))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_DOUBLE_METRIC);
@@ -222,7 +225,7 @@ public class BatchMeasureToMeasureTest {
}
private void verify_toMeasure_returns_false_value_if_dto_has_invalid_value_for_Boolean_metric(boolean expected) {
- Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setBooleanValue(expected).build(), SOME_BOOLEAN_METRIC);
+ Optional<Measure> measure = underTest.toMeasure(ScannerReport.Measure.newBuilder().setBooleanValue(BoolValue.newBuilder().setValue(expected)).build(), SOME_BOOLEAN_METRIC);
assertThat(measure.isPresent()).isTrue();
assertThat(measure.get().getValueType()).isEqualTo(Measure.ValueType.BOOLEAN);
@@ -232,7 +235,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_maps_data_and_alert_properties_in_dto_for_Boolean_metric() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setBooleanValue(true).setStringValue(SOME_DATA).build();
+ .setBooleanValue(BoolValue.newBuilder().setValue(true).setData(SOME_DATA)).build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_BOOLEAN_METRIC);
@@ -253,7 +256,7 @@ public class BatchMeasureToMeasureTest {
@Test
public void toMeasure_maps_alert_properties_in_dto_for_String_Metric() {
ScannerReport.Measure batchMeasure = ScannerReport.Measure.newBuilder()
- .setStringValue(SOME_DATA)
+ .setStringValue(StringValue.newBuilder().setValue(SOME_DATA))
.build();
Optional<Measure> measure = underTest.toMeasure(batchMeasure, SOME_STRING_METRIC);
@@ -267,12 +270,12 @@ public class BatchMeasureToMeasureTest {
@DataProvider
public static Object[][] all_types_batch_measure_builders() {
return new Object[][] {
- {ScannerReport.Measure.newBuilder().setBooleanValue(true), SOME_BOOLEAN_METRIC},
- {ScannerReport.Measure.newBuilder().setIntValue(1), SOME_INT_METRIC},
- {ScannerReport.Measure.newBuilder().setLongValue(1), SOME_LONG_METRIC},
- {ScannerReport.Measure.newBuilder().setDoubleValue(1), SOME_DOUBLE_METRIC},
- {ScannerReport.Measure.newBuilder().setStringValue("1"), SOME_STRING_METRIC},
- {ScannerReport.Measure.newBuilder().setStringValue(Measure.Level.OK.name()), SOME_LEVEL_METRIC}
+ {ScannerReport.Measure.newBuilder().setBooleanValue(BoolValue.newBuilder().setValue(true)), SOME_BOOLEAN_METRIC},
+ {ScannerReport.Measure.newBuilder().setIntValue(IntValue.newBuilder().setValue(1)), SOME_INT_METRIC},
+ {ScannerReport.Measure.newBuilder().setLongValue(LongValue.newBuilder().setValue(1)), SOME_LONG_METRIC},
+ {ScannerReport.Measure.newBuilder().setDoubleValue(DoubleValue.newBuilder().setValue(1)), SOME_DOUBLE_METRIC},
+ {ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue("1")), SOME_STRING_METRIC},
+ {ScannerReport.Measure.newBuilder().setStringValue(StringValue.newBuilder().setValue(Measure.Level.OK.name())), SOME_LEVEL_METRIC}
};
}
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java
index eae715ca1a4..8f21d3669ae 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/measure/MeasureRepositoryImplTest.java
@@ -42,6 +42,7 @@ import org.sonar.db.DbTester;
import org.sonar.db.measure.MeasureDto;
import org.sonar.db.rule.RuleDto;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue;
import org.sonar.server.computation.batch.BatchReportReader;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
@@ -216,8 +217,7 @@ public class MeasureRepositoryImplTest {
Measure.newMeasureBuilder().create(false),
Measure.newMeasureBuilder().create("sds"),
Measure.newMeasureBuilder().create(Measure.Level.OK),
- Measure.newMeasureBuilder().createNoValue()
- );
+ Measure.newMeasureBuilder().createNoValue());
@DataProvider
public static Object[][] measures() {
@@ -333,8 +333,7 @@ public class MeasureRepositoryImplTest {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
- ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(value).build()
- ));
+ ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(StringValue.newBuilder().setValue(value)).build()));
Optional<Measure> res = underTest.getRawMeasure(FILE_COMPONENT, metric1);
@@ -352,9 +351,8 @@ public class MeasureRepositoryImplTest {
when(reportMetricValidator.validate(METRIC_KEY_2)).thenReturn(false);
reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
- ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("value1").build(),
- ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue("value2").build()
- ));
+ ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(StringValue.newBuilder().setValue("value1")).build(),
+ ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue(StringValue.newBuilder().setValue("value2")).build()));
assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric1)).isPresent();
assertThat(underTest.getRawMeasure(FILE_COMPONENT, metric2)).isAbsent();
@@ -364,8 +362,7 @@ public class MeasureRepositoryImplTest {
public void getRawMeasure_retrieves_added_measure_over_batch_measure() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
- ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build()
- ));
+ ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(StringValue.newBuilder().setValue("some value")).build()));
Measure addedMeasure = SOME_MEASURE;
underTest.add(FILE_COMPONENT, metric1, addedMeasure);
@@ -380,8 +377,7 @@ public class MeasureRepositoryImplTest {
public void getRawMeasure_retrieves_measure_from_batch_and_caches_it_locally_so_that_it_can_be_updated() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(
- ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build()
- ));
+ ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(StringValue.newBuilder().setValue("some value")).build()));
Optional<Measure> measure = underTest.getRawMeasure(FILE_COMPONENT, metric1);
@@ -409,8 +405,8 @@ public class MeasureRepositoryImplTest {
public void getRawMeasures_returns_added_measures_over_batch_measures() {
when(reportMetricValidator.validate(METRIC_KEY_1)).thenReturn(true);
when(reportMetricValidator.validate(METRIC_KEY_2)).thenReturn(true);
- ScannerReport.Measure batchMeasure1 = ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue("some value").build();
- ScannerReport.Measure batchMeasure2 = ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue("some value").build();
+ ScannerReport.Measure batchMeasure1 = ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_1).setStringValue(StringValue.newBuilder().setValue("some value")).build();
+ ScannerReport.Measure batchMeasure2 = ScannerReport.Measure.newBuilder().setMetricKey(METRIC_KEY_2).setStringValue(StringValue.newBuilder().setValue("some value")).build();
reportReader.putMeasures(FILE_COMPONENT.getReportAttributes().getRef(), ImmutableList.of(batchMeasure1, batchMeasure2));
Measure addedMeasure = SOME_MEASURE;
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/source/CoverageLineReaderTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/source/CoverageLineReaderTest.java
index 247105f8004..1f211b59363 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/source/CoverageLineReaderTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/source/CoverageLineReaderTest.java
@@ -31,7 +31,7 @@ public class CoverageLineReaderTest {
@Test
public void set_coverage() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(10)
.setUtHits(true)
@@ -55,7 +55,7 @@ public class CoverageLineReaderTest {
@Test
public void set_coverage_on_uncovered_lines() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setUtHits(false)
.setItHits(false)
@@ -73,22 +73,8 @@ public class CoverageLineReaderTest {
}
@Test
- public void set_coverage_without_line_hits() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
- .setLine(1)
- .build()).iterator());
-
- DbFileSources.Line.Builder lineBuilder = DbFileSources.Data.newBuilder().addLinesBuilder().setLine(1);
- computeCoverageLine.read(lineBuilder);
-
- assertThat(lineBuilder.hasUtLineHits()).isFalse();
- assertThat(lineBuilder.hasItLineHits()).isFalse();
- assertThat(lineBuilder.hasOverallLineHits()).isFalse();
- }
-
- @Test
public void set_overall_line_hits_with_only_ut() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setUtHits(true)
.setItHits(false)
@@ -102,7 +88,7 @@ public class CoverageLineReaderTest {
@Test
public void set_overall_line_hits_with_only_it() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setUtHits(false)
.setItHits(true)
@@ -116,7 +102,7 @@ public class CoverageLineReaderTest {
@Test
public void set_overall_line_hits_with_ut_and_it() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.Coverage.newBuilder()
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setUtHits(true)
.setItHits(true)
@@ -130,7 +116,7 @@ public class CoverageLineReaderTest {
@Test
public void nothing_to_do_when_no_coverage_info() {
- CoverageLineReader computeCoverageLine = new CoverageLineReader(Collections.<ScannerReport.Coverage>emptyList().iterator());
+ CoverageLineReader computeCoverageLine = new CoverageLineReader(Collections.<ScannerReport.LineCoverage>emptyList().iterator());
DbFileSources.Line.Builder lineBuilder = DbFileSources.Data.newBuilder().addLinesBuilder().setLine(1);
computeCoverageLine.read(lineBuilder);
@@ -147,7 +133,7 @@ public class CoverageLineReaderTest {
@Test
public void nothing_to_do_when_no_coverage_info_for_current_line() {
CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(10)
.setUtHits(true)
@@ -174,7 +160,7 @@ public class CoverageLineReaderTest {
@Test
public void nothing_to_do_when_no_coverage_info_for_next_line() {
CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(10)
.setUtHits(true)
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/source/HighlightingLineReaderTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/source/HighlightingLineReaderTest.java
index dea1dd7d97b..fe2493acb78 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/source/HighlightingLineReaderTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/source/HighlightingLineReaderTest.java
@@ -28,8 +28,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.utils.log.LogTester;
import org.sonar.db.protobuf.DbFileSources;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
import org.sonar.scanner.protocol.output.ScannerReport.TextRange;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.source.RangeOffsetConverter.RangeOffsetConverterException;
@@ -41,10 +41,10 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.sonar.api.utils.log.LoggerLevel.WARN;
import static org.sonar.db.protobuf.DbFileSources.Data.newBuilder;
-import static org.sonar.scanner.protocol.Constants.HighlightingType.ANNOTATION;
-import static org.sonar.scanner.protocol.Constants.HighlightingType.COMMENT;
-import static org.sonar.scanner.protocol.Constants.HighlightingType.CONSTANT;
-import static org.sonar.scanner.protocol.Constants.HighlightingType.HIGHLIGHTING_STRING;
+import static org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType.ANNOTATION;
+import static org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType.COMMENT;
+import static org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType.CONSTANT;
+import static org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType.HIGHLIGHTING_STRING;
import static org.sonar.server.computation.component.ReportComponent.builder;
public class HighlightingLineReaderTest {
@@ -77,7 +77,7 @@ public class HighlightingLineReaderTest {
@Test
public void nothing_to_read() {
- HighlightingLineReader highlightingLineReader = newReader(Collections.<TextRange, Constants.HighlightingType>emptyMap());
+ HighlightingLineReader highlightingLineReader = newReader(Collections.<TextRange, HighlightingType>emptyMap());
DbFileSources.Line.Builder lineBuilder = newBuilder().addLinesBuilder().setLine(1);
highlightingLineReader.read(lineBuilder);
@@ -88,8 +88,7 @@ public class HighlightingLineReaderTest {
@Test
public void read_one_line() {
HighlightingLineReader highlightingLineReader = newReader(of(
- newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_1),
- ANNOTATION));
+ newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_1), ANNOTATION));
highlightingLineReader.read(line1);
@@ -101,8 +100,7 @@ public class HighlightingLineReaderTest {
HighlightingLineReader highlightingLineReader = newReader(of(
newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_1), ANNOTATION,
newSingleLineTextRangeWithExpectingLabel(LINE_2, RANGE_LABEL_2), COMMENT,
- newSingleLineTextRangeWithExpectingLabel(LINE_4, RANGE_LABEL_3), CONSTANT
- ));
+ newSingleLineTextRangeWithExpectingLabel(LINE_4, RANGE_LABEL_3), CONSTANT));
highlightingLineReader.read(line1);
highlightingLineReader.read(line2);
@@ -118,8 +116,7 @@ public class HighlightingLineReaderTest {
public void read_many_syntax_highlighting_on_same_line() {
HighlightingLineReader highlightingLineReader = newReader(of(
newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_1), ANNOTATION,
- newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_2), COMMENT
- ));
+ newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_2), COMMENT));
highlightingLineReader.read(line1);
@@ -164,8 +161,7 @@ public class HighlightingLineReaderTest {
HighlightingLineReader highlightingLineReader = newReader(of(
textRange1, ANNOTATION,
textRange2, HIGHLIGHTING_STRING,
- textRange3, COMMENT
- ));
+ textRange3, COMMENT));
highlightingLineReader.read(line1);
highlightingLineReader.read(line2);
@@ -202,7 +198,7 @@ public class HighlightingLineReaderTest {
doThrow(RangeOffsetConverterException.class).when(rangeOffsetConverter).offsetToString(textRange1, LINE_1, DEFAULT_LINE_LENGTH);
HighlightingLineReader highlightingLineReader = newReader(of(
- textRange1, ANNOTATION,
+ textRange1, HighlightingType.ANNOTATION,
newSingleLineTextRangeWithExpectingLabel(LINE_2, RANGE_LABEL_1), HIGHLIGHTING_STRING));
highlightingLineReader.read(line1);
@@ -219,8 +215,7 @@ public class HighlightingLineReaderTest {
HighlightingLineReader highlightingLineReader = newReader(of(
newSingleLineTextRangeWithExpectingLabel(LINE_1, RANGE_LABEL_1), ANNOTATION,
- textRange2, HIGHLIGHTING_STRING
- ));
+ textRange2, HIGHLIGHTING_STRING));
highlightingLineReader.read(line1);
highlightingLineReader.read(line2);
@@ -241,10 +236,10 @@ public class HighlightingLineReaderTest {
assertThat(logTester.logs(WARN)).containsOnly("Inconsistency detected in Highlighting data. Highlighting will be ignored for file 'FILE_KEY'");
}
- private HighlightingLineReader newReader(Map<TextRange, Constants.HighlightingType> textRangeByType) {
- List<ScannerReport.SyntaxHighlighting> syntaxHighlightingList = new ArrayList<>();
- for (Map.Entry<TextRange, Constants.HighlightingType> entry : textRangeByType.entrySet()) {
- syntaxHighlightingList.add(ScannerReport.SyntaxHighlighting.newBuilder()
+ private HighlightingLineReader newReader(Map<TextRange, HighlightingType> textRangeByType) {
+ List<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingList = new ArrayList<>();
+ for (Map.Entry<TextRange, HighlightingType> entry : textRangeByType.entrySet()) {
+ syntaxHighlightingList.add(ScannerReport.SyntaxHighlightingRule.newBuilder()
.setRange(entry.getKey())
.setType(entry.getValue())
.build());
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/source/ReportIteratorTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/source/ReportIteratorTest.java
index 33422d738bf..9be2fb9c096 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/source/ReportIteratorTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/source/ReportIteratorTest.java
@@ -19,16 +19,16 @@
*/
package org.sonar.server.computation.source;
+import java.io.File;
+import java.util.NoSuchElementException;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
+import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
-import org.sonar.scanner.protocol.output.FileStructure;
-import java.io.File;
-import java.util.NoSuchElementException;
import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -40,7 +40,7 @@ public class ReportIteratorTest {
File file;
- ReportIterator<ScannerReport.Coverage> underTest;
+ ReportIterator<ScannerReport.LineCoverage> underTest;
@Before
public void setUp() throws Exception {
@@ -48,10 +48,9 @@ public class ReportIteratorTest {
ScannerReportWriter writer = new ScannerReportWriter(dir);
writer.writeComponentCoverage(1, newArrayList(
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(1)
- .build()
- ));
+ .build()));
file = new FileStructure(dir).fileFor(FileStructure.Domain.COVERAGES, 1);
}
@@ -65,13 +64,13 @@ public class ReportIteratorTest {
@Test
public void read_report() {
- underTest = new ReportIterator<>(file, ScannerReport.Coverage.PARSER);
+ underTest = new ReportIterator<>(file, ScannerReport.LineCoverage.parser());
assertThat(underTest.next().getLine()).isEqualTo(1);
}
@Test
public void do_not_fail_when_calling_has_next_with_iterator_already_closed() {
- underTest = new ReportIterator<>(file, ScannerReport.Coverage.PARSER);
+ underTest = new ReportIterator<>(file, ScannerReport.LineCoverage.parser());
assertThat(underTest.next().getLine()).isEqualTo(1);
assertThat(underTest.hasNext()).isFalse();
@@ -81,7 +80,7 @@ public class ReportIteratorTest {
@Test(expected = NoSuchElementException.class)
public void test_error() throws Exception {
- underTest = new ReportIterator<>(file, ScannerReport.Coverage.PARSER);
+ underTest = new ReportIterator<>(file, ScannerReport.LineCoverage.parser());
underTest.next();
// fail !
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/BuildComponentTreeStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/BuildComponentTreeStepTest.java
index e58395b5c96..944f401463a 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/BuildComponentTreeStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/BuildComponentTreeStepTest.java
@@ -33,8 +33,8 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.SnapshotDto;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
import org.sonar.server.computation.analysis.AnalysisMetadataHolderImpl;
import org.sonar.server.computation.analysis.MutableAnalysisMetadataHolder;
import org.sonar.server.computation.analysis.MutableAnalysisMetadataHolderRule;
@@ -42,17 +42,22 @@ import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.MutableTreeRootHolderRule;
+import static com.google.common.base.Predicates.in;
+import static com.google.common.base.Predicates.not;
+import static com.google.common.collect.FluentIterable.from;
+import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.db.component.ComponentTesting.newDirectory;
import static org.sonar.db.component.ComponentTesting.newFileDto;
import static org.sonar.db.component.ComponentTesting.newModuleDto;
import static org.sonar.db.component.ComponentTesting.newProjectDto;
import static org.sonar.db.component.SnapshotTesting.newSnapshotForProject;
-import static org.sonar.scanner.protocol.Constants.ComponentType.DIRECTORY;
-import static org.sonar.scanner.protocol.Constants.ComponentType.FILE;
-import static org.sonar.scanner.protocol.Constants.ComponentType.MODULE;
-import static org.sonar.scanner.protocol.Constants.ComponentType.PROJECT;
-
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.DIRECTORY;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.FILE;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.MODULE;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.PROJECT;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.UNRECOGNIZED;
+import static org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType.UNSET;
@RunWith(DataProviderRunner.class)
public class BuildComponentTreeStepTest {
@@ -100,9 +105,9 @@ public class BuildComponentTreeStepTest {
@DataProvider
public static Object[][] allComponentTypes() {
- Object[][] res = new Object[Constants.ComponentType.values().length][1];
+ Object[][] res = new Object[ComponentType.values().length - 2][1];
int i = 0;
- for (Constants.ComponentType componentType : Constants.ComponentType.values()) {
+ for (ComponentType componentType : from(asList(ComponentType.values())).filter(not(in(asList(UNSET, UNRECOGNIZED))))) {
res[i][0] = componentType;
i++;
}
@@ -111,7 +116,7 @@ public class BuildComponentTreeStepTest {
@Test
@UseDataProvider("allComponentTypes")
- public void verify_ref_and_type(Constants.ComponentType componentType) {
+ public void verify_ref_and_type(ComponentType componentType) {
int componentRef = 1;
reportReader.putComponent(component(componentRef, componentType));
@@ -316,19 +321,19 @@ public class BuildComponentTreeStepTest {
}
}
- private static ScannerReport.Component component(int componentRef, Constants.ComponentType componentType, int... children) {
+ private static ScannerReport.Component component(int componentRef, ComponentType componentType, int... children) {
return component(componentRef, componentType, null, null, children);
}
- private static ScannerReport.Component componentWithKey(int componentRef, Constants.ComponentType componentType, String key, int... children) {
+ private static ScannerReport.Component componentWithKey(int componentRef, ComponentType componentType, String key, int... children) {
return component(componentRef, componentType, key, null, children);
}
- private static ScannerReport.Component componentWithPath(int componentRef, Constants.ComponentType componentType, String path, int... children) {
+ private static ScannerReport.Component componentWithPath(int componentRef, ComponentType componentType, String path, int... children) {
return component(componentRef, componentType, null, path, children);
}
- private static ScannerReport.Component component(int componentRef, Constants.ComponentType componentType, @Nullable String key, @Nullable String path, int... children) {
+ private static ScannerReport.Component component(int componentRef, ComponentType componentType, @Nullable String key, @Nullable String path, int... children) {
ScannerReport.Component.Builder builder = ScannerReport.Component.newBuilder()
.setType(componentType)
.setRef(componentRef);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadQualityProfilesStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadQualityProfilesStepTest.java
index 415867e6294..7617467a043 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadQualityProfilesStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/LoadQualityProfilesStepTest.java
@@ -57,7 +57,7 @@ public class LoadQualityProfilesStepTest {
ScannerReport.ActiveRule.Builder batch1 = ScannerReport.ActiveRule.newBuilder()
.setRuleRepository(XOO_X1.repository()).setRuleKey(XOO_X1.rule())
.setSeverity(Constants.Severity.BLOCKER);
- batch1.addParamBuilder().setKey("p1").setValue("v1").build();
+ batch1.getMutableParamsByKey().put("p1", "v1");
ScannerReport.ActiveRule.Builder batch2 = ScannerReport.ActiveRule.newBuilder()
.setRuleRepository(XOO_X2.repository()).setRuleKey(XOO_X2.rule()).setSeverity(Constants.Severity.MAJOR);
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistFileSourcesStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistFileSourcesStepTest.java
index 63b515b4a44..ec17dbd40df 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistFileSourcesStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistFileSourcesStepTest.java
@@ -31,8 +31,9 @@ import org.sonar.db.DbTester;
import org.sonar.db.protobuf.DbFileSources;
import org.sonar.db.source.FileSourceDto;
import org.sonar.db.source.FileSourceDto.Type;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
@@ -51,7 +52,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-
public class PersistFileSourcesStepTest extends BaseStepTest {
private static final int FILE_REF = 3;
@@ -135,7 +135,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
public void persist_coverage() {
initBasicReport(1);
- reportReader.putCoverage(FILE_REF, newArrayList(ScannerReport.Coverage.newBuilder()
+ reportReader.putCoverage(FILE_REF, newArrayList(ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(10)
.setUtHits(true)
@@ -193,12 +193,12 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
public void persist_highlighting() {
initBasicReport(1);
- reportReader.putSyntaxHighlighting(FILE_REF, newArrayList(ScannerReport.SyntaxHighlighting.newBuilder()
+ reportReader.putSyntaxHighlighting(FILE_REF, newArrayList(ScannerReport.SyntaxHighlightingRule.newBuilder()
.setRange(ScannerReport.TextRange.newBuilder()
.setStartLine(1).setEndLine(1)
.setStartOffset(2).setEndOffset(4)
.build())
- .setType(Constants.HighlightingType.ANNOTATION)
+ .setType(HighlightingType.ANNOTATION)
.build()));
underTest.execute();
@@ -245,8 +245,7 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
duplicationRepository.add(
FILE_REF,
- new Duplication(new TextBlock(1, 2), Arrays.<Duplicate>asList(new InnerDuplicate(new TextBlock(3, 4))))
- );
+ new Duplication(new TextBlock(1, 2), Arrays.<Duplicate>asList(new InnerDuplicate(new TextBlock(3, 4)))));
underTest.execute();
@@ -441,17 +440,17 @@ public class PersistFileSourcesStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
+ .setType(ComponentType.MODULE)
.addChildRef(FILE_REF)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(FILE_REF)
- .setType(Constants.ComponentType.FILE)
+ .setType(ComponentType.FILE)
.build());
for (int i = 1; i <= numberOfLines; i++) {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistProjectLinksStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistProjectLinksStepTest.java
index 0f7e9671905..5236ad1c64f 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistProjectLinksStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistProjectLinksStepTest.java
@@ -26,8 +26,9 @@ import org.junit.Test;
import org.sonar.api.i18n.I18n;
import org.sonar.api.utils.System2;
import org.sonar.db.DbTester;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
@@ -39,7 +40,6 @@ import static org.assertj.core.api.Assertions.failBecauseExceptionWasNotThrown;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-
public class PersistProjectLinksStepTest extends BaseStepTest {
@Rule
@@ -81,18 +81,18 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
// project and 1 module
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.addChildRef(2)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.SCM).setHref("https://github.com/SonarSource/sonar").build())
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.SCM_DEV).setHref("scm:git:git@github.com:SonarSource/sonar.git/sonar").build())
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.ISSUE).setHref("http://jira.sonarsource.com/").build())
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.CI).setHref("http://bamboo.ci.codehaus.org/browse/SONAR").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.SCM).setHref("https://github.com/SonarSource/sonar").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.SCM_DEV).setHref("scm:git:git@github.com:SonarSource/sonar.git/sonar").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.ISSUE).setHref("http://jira.sonarsource.com/").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.CI).setHref("http://bamboo.ci.codehaus.org/browse/SONAR").build())
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.SCM).setHref("https://github.com/SonarSource/sonar/server").build())
+ .setType(ComponentType.MODULE)
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.SCM).setHref("https://github.com/SonarSource/sonar/server").build())
.build());
step.execute();
@@ -108,8 +108,8 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .setType(ComponentType.PROJECT)
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
step.execute();
@@ -127,13 +127,13 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.FILE)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .setType(ComponentType.FILE)
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
step.execute();
@@ -149,8 +149,8 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .setType(ComponentType.PROJECT)
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
step.execute();
@@ -166,7 +166,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.build());
step.execute();
@@ -182,7 +182,7 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.build());
step.execute();
@@ -198,9 +198,9 @@ public class PersistProjectLinksStepTest extends BaseStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
- .addLink(ScannerReport.ComponentLink.newBuilder().setType(Constants.ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .setType(ComponentType.PROJECT)
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
+ .addLink(ScannerReport.ComponentLink.newBuilder().setType(ComponentLinkType.HOME).setHref("http://www.sonarqube.org").build())
.build());
try {
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java
index b84689867f5..52e49fa5e6e 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/PersistTestsStepTest.java
@@ -31,14 +31,14 @@ import org.sonar.db.DbClient;
import org.sonar.db.DbTester;
import org.sonar.db.protobuf.DbFileSources;
import org.sonar.db.source.FileSourceDto;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.CoverageDetail;
+import org.sonar.scanner.protocol.output.ScannerReport.Test.TestStatus;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
-import org.sonar.server.computation.component.ReportComponent;
import org.sonar.server.computation.component.FileAttributes;
+import org.sonar.server.computation.component.ReportComponent;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.tuple;
@@ -256,7 +256,7 @@ public class PersistTestsStepTest extends BaseStepTest {
private ScannerReport.Test newTest(int id) {
return ScannerReport.Test.newBuilder()
- .setStatus(Constants.TestStatus.FAILURE)
+ .setStatus(TestStatus.FAILURE)
.setName("name#" + id)
.setStacktrace("stacktrace#" + id)
.setMsg("message#" + id)
diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java
index 61f1a0265b2..6078a73df06 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/computation/step/ValidateProjectStepTest.java
@@ -32,15 +32,14 @@ import org.sonar.db.DbTester;
import org.sonar.db.component.ComponentDto;
import org.sonar.db.component.ComponentTesting;
import org.sonar.db.component.SnapshotTesting;
-import org.sonar.scanner.protocol.Constants;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
import org.sonar.server.computation.analysis.AnalysisMetadataHolderRule;
import org.sonar.server.computation.batch.BatchReportReaderRule;
import org.sonar.server.computation.batch.TreeRootHolderRule;
import org.sonar.server.computation.component.Component;
import org.sonar.server.computation.component.ReportComponent;
-
public class ValidateProjectStepTest {
static long DEFAULT_ANALYSIS_TIME = 1433131200000L; // 2015-06-01
@@ -79,7 +78,7 @@ public class ValidateProjectStepTest {
analysisMetadataHolder.setBranch(DEFAULT_BRANCH);
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.build());
treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY + ":origin/master").build());
@@ -96,7 +95,7 @@ public class ValidateProjectStepTest {
analysisMetadataHolder.setBranch("bran#ch");
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.build());
treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(PROJECT_KEY + ":bran#ch").build());
@@ -115,13 +114,13 @@ public class ValidateProjectStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(invalidProjectKey)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
+ .setType(ComponentType.MODULE)
.setKey("Module$Key")
.build());
treeRootHolder.setRoot(ReportComponent.builder(Component.Type.PROJECT, 1).setUuid("ABCD").setKey(invalidProjectKey).addChildren(
@@ -141,13 +140,13 @@ public class ValidateProjectStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
+ .setType(ComponentType.MODULE)
.setKey(MODULE_KEY)
.build());
@@ -171,13 +170,13 @@ public class ValidateProjectStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
+ .setType(ComponentType.MODULE)
.setKey(MODULE_KEY)
.build());
@@ -206,13 +205,13 @@ public class ValidateProjectStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(2)
- .setType(Constants.ComponentType.MODULE)
+ .setType(ComponentType.MODULE)
.setKey(MODULE_KEY)
.build());
@@ -233,7 +232,7 @@ public class ValidateProjectStepTest {
public void not_fail_if_analysis_date_is_after_last_analysis() {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
@@ -259,7 +258,7 @@ public class ValidateProjectStepTest {
reportReader.putComponent(ScannerReport.Component.newBuilder()
.setRef(1)
- .setType(Constants.ComponentType.PROJECT)
+ .setType(ComponentType.PROJECT)
.setKey(PROJECT_KEY)
.addChildRef(2)
.build());
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
index ee3c07f1302..1b0d755ce9f 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/measures/CoreMetrics.java
@@ -394,21 +394,21 @@ public final class CoreMetrics {
@Deprecated
public static final Metric<String> CLASS_COMPLEXITY_DISTRIBUTION = new Metric.Builder(CLASS_COMPLEXITY_DISTRIBUTION_KEY, "Classes distribution /complexity",
Metric.ValueType.DISTRIB)
- .setDescription("Classes distribution /complexity")
- .setDirection(Metric.DIRECTION_NONE)
- .setQualitative(true)
- .setDomain(DOMAIN_COMPLEXITY)
- .setHidden(true)
- .create();
+ .setDescription("Classes distribution /complexity")
+ .setDirection(Metric.DIRECTION_NONE)
+ .setQualitative(true)
+ .setDomain(DOMAIN_COMPLEXITY)
+ .setHidden(true)
+ .create();
public static final String FUNCTION_COMPLEXITY_DISTRIBUTION_KEY = "function_complexity_distribution";
public static final Metric<String> FUNCTION_COMPLEXITY_DISTRIBUTION = new Metric.Builder(FUNCTION_COMPLEXITY_DISTRIBUTION_KEY, "Functions distribution /complexity",
Metric.ValueType.DISTRIB)
- .setDescription("Functions distribution /complexity")
- .setDirection(Metric.DIRECTION_NONE)
- .setQualitative(true)
- .setDomain(DOMAIN_COMPLEXITY)
- .create();
+ .setDescription("Functions distribution /complexity")
+ .setDirection(Metric.DIRECTION_NONE)
+ .setQualitative(true)
+ .setDomain(DOMAIN_COMPLEXITY)
+ .create();
public static final String FILE_COMPLEXITY_DISTRIBUTION_KEY = "file_complexity_distribution";
public static final Metric<String> FILE_COMPLEXITY_DISTRIBUTION = new Metric.Builder(FILE_COMPLEXITY_DISTRIBUTION_KEY, "Files distribution /complexity", Metric.ValueType.DISTRIB)
@@ -915,12 +915,12 @@ public final class CoreMetrics {
*/
public static final Metric<Integer> NEW_IT_UNCOVERED_CONDITIONS = new Metric.Builder(NEW_IT_UNCOVERED_CONDITIONS_KEY, "Uncovered branches by IT on new code",
Metric.ValueType.INT)
- .setDescription("Uncovered branches by Integration Tests on new code")
- .setDirection(Metric.DIRECTION_WORST)
- .setDomain(DOMAIN_TESTS)
- .setBestValue(0.0)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Uncovered branches by Integration Tests on new code")
+ .setDirection(Metric.DIRECTION_WORST)
+ .setDomain(DOMAIN_TESTS)
+ .setBestValue(0.0)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 2.12
@@ -1142,12 +1142,12 @@ public final class CoreMetrics {
@Deprecated
public static final Metric<String> OVERALL_COVERAGE_LINE_HITS_DATA = new Metric.Builder(OVERALL_COVERAGE_LINE_HITS_DATA_KEY, "Overall coverage hits by line",
Metric.ValueType.DATA)
- .setDescription("Coverage hits by all tests and by line")
- .setDirection(Metric.DIRECTION_NONE)
- .setQualitative(false)
- .setDomain(DOMAIN_TESTS)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Coverage hits by all tests and by line")
+ .setDirection(Metric.DIRECTION_NONE)
+ .setQualitative(false)
+ .setDomain(DOMAIN_TESTS)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 3.3
@@ -1175,11 +1175,11 @@ public final class CoreMetrics {
*/
public static final Metric<Integer> NEW_OVERALL_CONDITIONS_TO_COVER = new Metric.Builder(NEW_OVERALL_CONDITIONS_TO_COVER_KEY, "Overall branches to cover on new code",
Metric.ValueType.INT)
- .setDescription("New branches to cover by all tests")
- .setDomain(DOMAIN_TESTS)
- .setDeleteHistoricalData(true)
- .setHidden(true)
- .create();
+ .setDescription("New branches to cover by all tests")
+ .setDomain(DOMAIN_TESTS)
+ .setDeleteHistoricalData(true)
+ .setHidden(true)
+ .create();
/**
* @since 3.3
@@ -1205,12 +1205,12 @@ public final class CoreMetrics {
*/
public static final Metric<Integer> NEW_OVERALL_UNCOVERED_CONDITIONS = new Metric.Builder(NEW_OVERALL_UNCOVERED_CONDITIONS_KEY, "Overall uncovered branches on new code",
Metric.ValueType.INT)
- .setDescription("New branches that are not covered by any test")
- .setDirection(Metric.DIRECTION_WORST)
- .setDomain(DOMAIN_TESTS)
- .setBestValue(0.0)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("New branches that are not covered by any test")
+ .setDirection(Metric.DIRECTION_WORST)
+ .setDomain(DOMAIN_TESTS)
+ .setBestValue(0.0)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 3.3
@@ -1239,14 +1239,14 @@ public final class CoreMetrics {
*/
public static final Metric<Double> NEW_OVERALL_BRANCH_COVERAGE = new Metric.Builder(NEW_OVERALL_BRANCH_COVERAGE_KEY, "Overall condition coverage on new code",
Metric.ValueType.PERCENT)
- .setDescription("Condition coverage of new/changed code by all tests")
- .setDirection(Metric.DIRECTION_BETTER)
- .setQualitative(true)
- .setDomain(DOMAIN_TESTS)
- .setWorstValue(0.0)
- .setBestValue(100.0)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Condition coverage of new/changed code by all tests")
+ .setDirection(Metric.DIRECTION_BETTER)
+ .setQualitative(true)
+ .setDomain(DOMAIN_TESTS)
+ .setWorstValue(0.0)
+ .setBestValue(100.0)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 3.3
@@ -1280,10 +1280,10 @@ public final class CoreMetrics {
@Deprecated
public static final Metric<String> OVERALL_COVERED_CONDITIONS_BY_LINE = new Metric.Builder(OVERALL_COVERED_CONDITIONS_BY_LINE_KEY, "Overall covered branches by line",
Metric.ValueType.DATA)
- .setDescription("Overall covered branches by all tests and by line")
- .setDomain(DOMAIN_TESTS)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Overall covered branches by all tests and by line")
+ .setDomain(DOMAIN_TESTS)
+ .setDeleteHistoricalData(true)
+ .create();
// --------------------------------------------------------------------------------------------------------------------
//
@@ -2149,8 +2149,8 @@ public final class CoreMetrics {
@Deprecated
public static final transient Metric<String> SCM_LAST_COMMIT_DATETIMES_BY_LINE = new Metric.Builder(SCM_LAST_COMMIT_DATETIMES_BY_LINE_KEY, "Last commit dates by line",
Metric.ValueType.DATA)
- .setDomain(DOMAIN_SCM)
- .create();
+ .setDomain(DOMAIN_SCM)
+ .create();
// --------------------------------------------------------------------------------------------------------------------
//
@@ -2279,12 +2279,12 @@ public final class CoreMetrics {
*/
public static final Metric<Long> EFFORT_TO_REACH_MAINTAINABILITY_RATING_A = new Metric.Builder(EFFORT_TO_REACH_MAINTAINABILITY_RATING_A_KEY,
"Effort to reach maintainability rating A", Metric.ValueType.WORK_DUR)
- .setDomain(DOMAIN_MAINTAINABILITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setQualitative(true)
- .setBestValue(0.0)
- .setOptimizedBestValue(true)
- .create();
+ .setDomain(DOMAIN_MAINTAINABILITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setQualitative(true)
+ .setBestValue(0.0)
+ .setOptimizedBestValue(true)
+ .create();
// --------------------------------------------------------------------------------------------------------------------
//
@@ -2302,12 +2302,12 @@ public final class CoreMetrics {
*/
public static final Metric<Long> RELIABILITY_REMEDIATION_EFFORT = new Metric.Builder(RELIABILITY_REMEDIATION_EFFORT_KEY, "Reliability remediation effort",
Metric.ValueType.WORK_DUR)
- .setDomain(DOMAIN_RELIABILITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setOptimizedBestValue(true)
- .setBestValue(0.0)
- .setQualitative(true)
- .create();
+ .setDomain(DOMAIN_RELIABILITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setOptimizedBestValue(true)
+ .setBestValue(0.0)
+ .setQualitative(true)
+ .create();
/**
* @since 5.5
@@ -2319,14 +2319,14 @@ public final class CoreMetrics {
*/
public static final Metric<Long> NEW_RELIABILITY_REMEDIATION_EFFORT = new Metric.Builder(NEW_RELIABILITY_REMEDIATION_EFFORT_KEY, "Reliability remediation effort on new code",
Metric.ValueType.WORK_DUR)
- .setDescription("Reliability remediation effort of new code")
- .setDomain(DOMAIN_RELIABILITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setOptimizedBestValue(true)
- .setBestValue(0.0)
- .setQualitative(true)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Reliability remediation effort of new code")
+ .setDomain(DOMAIN_RELIABILITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setOptimizedBestValue(true)
+ .setBestValue(0.0)
+ .setQualitative(true)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 5.5
@@ -2354,12 +2354,12 @@ public final class CoreMetrics {
*/
public static final Metric<Long> EFFORT_TO_REACH_RELIABILITY_RATING_A = new Metric.Builder(EFFORT_TO_REACH_RELIABILITY_RATING_A_KEY, "Effort to reach reliability rating A",
Metric.ValueType.WORK_DUR)
- .setDomain(DOMAIN_RELIABILITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setQualitative(true)
- .setBestValue(0.0)
- .setOptimizedBestValue(true)
- .create();
+ .setDomain(DOMAIN_RELIABILITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setQualitative(true)
+ .setBestValue(0.0)
+ .setOptimizedBestValue(true)
+ .create();
// --------------------------------------------------------------------------------------------------------------------
//
@@ -2393,14 +2393,14 @@ public final class CoreMetrics {
*/
public static final Metric<Long> NEW_SECURITY_REMEDIATION_EFFORT = new Metric.Builder(NEW_SECURITY_REMEDIATION_EFFORT_KEY, "Security remediation effort on new code",
Metric.ValueType.WORK_DUR)
- .setDescription("Security remediation effort of new code")
- .setDomain(DOMAIN_SECURITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setOptimizedBestValue(true)
- .setBestValue(0.0)
- .setQualitative(true)
- .setDeleteHistoricalData(true)
- .create();
+ .setDescription("Security remediation effort of new code")
+ .setDomain(DOMAIN_SECURITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setOptimizedBestValue(true)
+ .setBestValue(0.0)
+ .setQualitative(true)
+ .setDeleteHistoricalData(true)
+ .create();
/**
* @since 5.5
@@ -2428,12 +2428,12 @@ public final class CoreMetrics {
*/
public static final Metric<Long> EFFORT_TO_REACH_SECURITY_RATING_A = new Metric.Builder(EFFORT_TO_REACH_SECURITY_RATING_A_KEY, "Effort to reach security rating A",
Metric.ValueType.WORK_DUR)
- .setDomain(DOMAIN_SECURITY)
- .setDirection(Metric.DIRECTION_WORST)
- .setQualitative(true)
- .setBestValue(0.0)
- .setOptimizedBestValue(true)
- .create();
+ .setDomain(DOMAIN_SECURITY)
+ .setDirection(Metric.DIRECTION_WORST)
+ .setQualitative(true)
+ .setBestValue(0.0)
+ .setOptimizedBestValue(true)
+ .create();
// --------------------------------------------------------------------------------------------------------------------
//
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java
index 12dac2c1902..ec890289ac5 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java
@@ -61,12 +61,12 @@ public class DefaultFilterableIssue implements FilterableIssue {
@Override
public Integer line() {
- return rawIssue.hasLine() ? rawIssue.getLine() : null;
+ return rawIssue.hasTextRange() ? rawIssue.getTextRange().getStartLine() : null;
}
@Override
public Double gap() {
- return rawIssue.hasGap() ? rawIssue.getGap() : null;
+ return rawIssue.getGap() != 0 ? rawIssue.getGap() : null;
}
@Override
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java
index 9dfa16d7f7f..3a87023b2d1 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java
@@ -77,7 +77,7 @@ class DeprecatedIssueAdapterForFilter implements Issue {
@Override
public Integer line() {
- return rawIssue.hasLine() ? rawIssue.getLine() : null;
+ return rawIssue.hasTextRange() ? rawIssue.getTextRange().getStartLine() : null;
}
@Override
@@ -88,7 +88,7 @@ class DeprecatedIssueAdapterForFilter implements Issue {
@Override
public Double gap() {
- return rawIssue.hasGap() ? rawIssue.getGap() : null;
+ return rawIssue.getGap() != 0 ? rawIssue.getGap() : null;
}
@Override
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/IssueTransformer.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/IssueTransformer.java
index 8a34253114b..c6a2644d1ad 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/IssueTransformer.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/IssueTransformer.java
@@ -25,6 +25,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.annotation.Nullable;
+import org.apache.commons.lang.StringUtils;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.index.BatchComponent;
@@ -93,9 +94,9 @@ public class IssueTransformer {
issue.setKey(Uuids.createFast());
issue.setComponentKey(component.key());
issue.setRuleKey(ruleKey);
- issue.setGap(rawIssue.hasGap() ? rawIssue.getGap() : null);
+ issue.setGap(rawIssue.getGap() != 0 ? rawIssue.getGap() : null);
issue.setSeverity(rawIssue.getSeverity().name());
- issue.setMessage(rawIssue.hasMsg() ? rawIssue.getMsg() : null);
+ issue.setMessage(StringUtils.trimToNull(rawIssue.getMsg()));
issue.setResolution(null);
issue.setStatus(Issue.STATUS_OPEN);
issue.setNew(true);
@@ -103,10 +104,10 @@ public class IssueTransformer {
if (rawIssue.hasTextRange()) {
TextRange r = rawIssue.getTextRange();
- issue.setStartLine(r.hasStartLine() ? rawIssue.getTextRange().getStartLine() : null);
- issue.setStartLineOffset(r.hasStartOffset() ? r.getStartOffset() : null);
- issue.setEndLine(r.hasEndLine() ? r.getEndLine() : issue.startLine());
- issue.setEndLineOffset(r.hasEndOffset() ? r.getEndOffset() : null);
+ issue.setStartLine(r.getStartLine());
+ issue.setStartLineOffset(r.getStartOffset());
+ issue.setEndLine(r.getEndLine());
+ issue.setEndLineOffset(r.getEndOffset());
}
return issue;
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/ModuleIssues.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/ModuleIssues.java
index 433c8826f85..d120e018acd 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/ModuleIssues.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/issue/ModuleIssues.java
@@ -36,7 +36,6 @@ import org.sonar.batch.report.ReportPublisher;
import org.sonar.scanner.protocol.Constants.Severity;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.IssueLocation;
-import org.sonar.scanner.protocol.output.ScannerReport.IssueLocation.Builder;
/**
* Initialize the issues raised during scan.
@@ -48,10 +47,6 @@ public class ModuleIssues {
private final IssueFilters filters;
private final ReportPublisher reportPublisher;
private final BatchComponentCache componentCache;
- private final ScannerReport.Issue.Builder builder = ScannerReport.Issue.newBuilder();
- private final Builder locationBuilder = IssueLocation.newBuilder();
- private final org.sonar.scanner.protocol.output.ScannerReport.TextRange.Builder textRangeBuilder = org.sonar.scanner.protocol.output.ScannerReport.TextRange.newBuilder();
- private final ScannerReport.Flow.Builder flowBuilder = ScannerReport.Flow.newBuilder();
public ModuleIssues(ActiveRules activeRules, Rules rules, IssueFilters filters, ReportPublisher reportPublisher, BatchComponentCache componentCache) {
this.activeRules = activeRules;
@@ -76,8 +71,9 @@ public class ModuleIssues {
org.sonar.api.batch.rule.Severity overriddenSeverity = issue.overriddenSeverity();
Severity severity = overriddenSeverity != null ? Severity.valueOf(overriddenSeverity.name()) : Severity.valueOf(activeRule.severity());
- builder.clear();
- locationBuilder.clear();
+ ScannerReport.Issue.Builder builder = ScannerReport.Issue.newBuilder();
+ ScannerReport.IssueLocation.Builder locationBuilder = IssueLocation.newBuilder();
+ ScannerReport.TextRange.Builder textRangeBuilder = ScannerReport.TextRange.newBuilder();
// non-null fields
builder.setSeverity(severity);
builder.setRuleRepository(issue.ruleKey().repository());
@@ -88,14 +84,13 @@ public class ModuleIssues {
locationBuilder.setComponentRef(component.batchId());
TextRange primaryTextRange = issue.primaryLocation().textRange();
if (primaryTextRange != null) {
- builder.setLine(primaryTextRange.start().line());
- builder.setTextRange(toProtobufTextRange(primaryTextRange));
+ builder.setTextRange(toProtobufTextRange(textRangeBuilder, primaryTextRange));
}
Double gap = issue.gap();
if (gap != null) {
builder.setGap(gap);
}
- applyFlows(issue);
+ applyFlows(builder, locationBuilder, textRangeBuilder, issue);
ScannerReport.Issue rawIssue = builder.build();
if (filters.accept(inputComponent.key(), rawIssue)) {
@@ -105,7 +100,8 @@ public class ModuleIssues {
return false;
}
- private void applyFlows(Issue issue) {
+ private void applyFlows(ScannerReport.Issue.Builder builder, ScannerReport.IssueLocation.Builder locationBuilder, ScannerReport.TextRange.Builder textRangeBuilder, Issue issue) {
+ ScannerReport.Flow.Builder flowBuilder = ScannerReport.Flow.newBuilder();
for (Flow flow : issue.flows()) {
if (!flow.locations().isEmpty()) {
flowBuilder.clear();
@@ -118,7 +114,7 @@ public class ModuleIssues {
}
TextRange textRange = location.textRange();
if (textRange != null) {
- locationBuilder.setTextRange(toProtobufTextRange(textRange));
+ locationBuilder.setTextRange(toProtobufTextRange(textRangeBuilder, textRange));
}
flowBuilder.addLocation(locationBuilder.build());
}
@@ -127,7 +123,7 @@ public class ModuleIssues {
}
}
- private org.sonar.scanner.protocol.output.ScannerReport.TextRange toProtobufTextRange(TextRange primaryTextRange) {
+ private ScannerReport.TextRange toProtobufTextRange(ScannerReport.TextRange.Builder textRangeBuilder, TextRange primaryTextRange) {
textRangeBuilder.clear();
textRangeBuilder.setStartLine(primaryTextRange.start().line());
textRangeBuilder.setStartOffset(primaryTextRange.start().lineOffset());
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/mediumtest/TaskResult.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
index 5d3d87b540d..9edee3c7208 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/mediumtest/TaskResult.java
@@ -29,7 +29,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.CheckForNull;
-import javax.annotation.Nullable;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,16 +42,18 @@ import org.sonar.api.batch.fs.internal.DefaultInputFile;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
import org.sonar.batch.issue.IssueCache;
import org.sonar.batch.issue.tracking.TrackedIssue;
-import org.sonar.batch.report.ScannerReportUtils;
import org.sonar.batch.report.ReportPublisher;
+import org.sonar.batch.report.ScannerReportUtils;
import org.sonar.batch.scan.ProjectScanContainer;
import org.sonar.batch.scan.filesystem.InputPathCache;
import org.sonar.core.util.CloseableIterator;
import org.sonar.scanner.protocol.output.ScannerReport;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReport.Component;
import org.sonar.scanner.protocol.output.ScannerReport.Metadata;
import org.sonar.scanner.protocol.output.ScannerReport.Symbol;
+import org.sonar.scanner.protocol.output.ScannerReportReader;
+
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
@@ -76,22 +77,22 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
if (!container.getComponentByType(AnalysisMode.class).isIssues()) {
Metadata readMetadata = getReportReader().readMetadata();
int rootComponentRef = readMetadata.getRootComponentRef();
- storeReportComponents(rootComponentRef, null, readMetadata.hasBranch() ? readMetadata.getBranch() : null);
+ storeReportComponents(rootComponentRef, null, readMetadata.getBranch());
}
storeFs(container);
}
- private void storeReportComponents(int componentRef, String parentModuleKey, @Nullable String branch) {
+ private void storeReportComponents(int componentRef, String parentModuleKey, String branch) {
Component component = getReportReader().readComponent(componentRef);
- if (component.hasKey()) {
- reportComponents.put(component.getKey() + (branch != null ? ":" + branch : ""), component);
+ if (isNotEmpty(component.getKey())) {
+ reportComponents.put(component.getKey() + (isNotEmpty(branch) ? ":" + branch : ""), component);
} else {
- reportComponents.put(parentModuleKey + (branch != null ? ":" + branch : "") + ":" + component.getPath(), component);
+ reportComponents.put(parentModuleKey + (isNotEmpty(branch) ? ":" + branch : "") + ":" + component.getPath(), component);
}
for (int childId : component.getChildRefList()) {
- storeReportComponents(childId, component.hasKey() ? component.getKey() : parentModuleKey, branch);
+ storeReportComponents(childId, isNotEmpty(component.getKey()) ? component.getKey() : parentModuleKey, branch);
}
}
@@ -179,9 +180,9 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
}
TextPointer pointer = file.newPointer(line, lineOffset);
List<TypeOfText> result = new ArrayList<>();
- try (CloseableIterator<ScannerReport.SyntaxHighlighting> it = reader.readComponentSyntaxHighlighting(ref)) {
+ try (CloseableIterator<ScannerReport.SyntaxHighlightingRule> it = reader.readComponentSyntaxHighlighting(ref)) {
while (it.hasNext()) {
- ScannerReport.SyntaxHighlighting rule = it.next();
+ ScannerReport.SyntaxHighlightingRule rule = it.next();
TextRange ruleRange = toRange(file, rule.getRange());
if (ruleRange.start().compareTo(pointer) <= 0 && ruleRange.end().compareTo(pointer) > 0) {
result.add(ScannerReportUtils.toBatchType(rule.getType()));
@@ -243,11 +244,11 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
}
@CheckForNull
- public ScannerReport.Coverage coverageFor(InputFile file, int line) {
+ public ScannerReport.LineCoverage coverageFor(InputFile file, int line) {
int ref = reportComponents.get(((DefaultInputFile) file).key()).getRef();
- try (CloseableIterator<ScannerReport.Coverage> it = getReportReader().readComponentCoverage(ref)) {
+ try (CloseableIterator<ScannerReport.LineCoverage> it = getReportReader().readComponentCoverage(ref)) {
while (it.hasNext()) {
- ScannerReport.Coverage coverage = it.next();
+ ScannerReport.LineCoverage coverage = it.next();
if (coverage.getLine() == line) {
return coverage;
}
@@ -261,12 +262,12 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
public ScannerReport.Test testExecutionFor(InputFile testFile, String testName) {
int ref = reportComponents.get(((DefaultInputFile) testFile).key()).getRef();
try (InputStream inputStream = FileUtils.openInputStream(getReportReader().readTests(ref))) {
- ScannerReport.Test test = ScannerReport.Test.PARSER.parseDelimitedFrom(inputStream);
+ ScannerReport.Test test = ScannerReport.Test.parser().parseDelimitedFrom(inputStream);
while (test != null) {
if (test.getName().equals(testName)) {
return test;
}
- test = ScannerReport.Test.PARSER.parseDelimitedFrom(inputStream);
+ test = ScannerReport.Test.parser().parseDelimitedFrom(inputStream);
}
} catch (Exception e) {
throw new IllegalStateException(e);
@@ -277,12 +278,12 @@ public class TaskResult implements org.sonar.batch.mediumtest.ScanTaskObserver {
public ScannerReport.CoverageDetail coveragePerTestFor(InputFile testFile, String testName) {
int ref = reportComponents.get(((DefaultInputFile) testFile).key()).getRef();
try (InputStream inputStream = FileUtils.openInputStream(getReportReader().readCoverageDetails(ref))) {
- ScannerReport.CoverageDetail details = ScannerReport.CoverageDetail.PARSER.parseDelimitedFrom(inputStream);
+ ScannerReport.CoverageDetail details = ScannerReport.CoverageDetail.parser().parseDelimitedFrom(inputStream);
while (details != null) {
if (details.getTestName().equals(testName)) {
return details;
}
- details = ScannerReport.CoverageDetail.PARSER.parseDelimitedFrom(inputStream);
+ details = ScannerReport.CoverageDetail.parser().parseDelimitedFrom(inputStream);
}
} catch (Exception e) {
throw new IllegalStateException(e);
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ActiveRulesPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ActiveRulesPublisher.java
index ba5dd00fbac..571d709971f 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ActiveRulesPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ActiveRulesPublisher.java
@@ -21,7 +21,6 @@ package org.sonar.batch.report;
import com.google.common.base.Function;
import com.google.common.collect.FluentIterable;
-import java.util.Map;
import javax.annotation.Nonnull;
import org.sonar.api.batch.rule.ActiveRule;
import org.sonar.api.batch.rule.ActiveRules;
@@ -52,10 +51,7 @@ public class ActiveRulesPublisher implements ReportPublisherStep {
builder.setRuleRepository(input.ruleKey().repository());
builder.setRuleKey(input.ruleKey().rule());
builder.setSeverity(Constants.Severity.valueOf(input.severity()));
- for (Map.Entry<String, String> entry : input.params().entrySet()) {
- builder.addParamBuilder().setKey(entry.getKey()).setValue(entry.getValue()).build();
-
- }
+ builder.getMutableParamsByKey().putAll(input.params());
return builder.build();
}
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ComponentsPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ComponentsPublisher.java
index 0aa66d0bdca..27d46165d22 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ComponentsPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ComponentsPublisher.java
@@ -30,11 +30,11 @@ import org.sonar.api.resources.ResourceUtils;
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.ImmutableProjectReactor;
-import org.sonar.scanner.protocol.Constants;
-import org.sonar.scanner.protocol.Constants.ComponentLinkType;
import org.sonar.scanner.protocol.output.ScannerReport;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink;
+import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
+import org.sonar.scanner.protocol.output.ScannerReportWriter;
/**
* Adds components and analysis metadata to output report
@@ -159,15 +159,15 @@ public class ComponentsPublisher implements ReportPublisherStep {
return ResourceUtils.isProject(r) ? r.getDescription() : null;
}
- private Constants.ComponentType getType(Resource r) {
+ private ComponentType getType(Resource r) {
if (ResourceUtils.isFile(r)) {
- return Constants.ComponentType.FILE;
+ return ComponentType.FILE;
} else if (ResourceUtils.isDirectory(r)) {
- return Constants.ComponentType.DIRECTORY;
+ return ComponentType.DIRECTORY;
} else if (ResourceUtils.isModuleProject(r)) {
- return Constants.ComponentType.MODULE;
+ return ComponentType.MODULE;
} else if (ResourceUtils.isRootProject(r)) {
- return Constants.ComponentType.PROJECT;
+ return ComponentType.PROJECT;
}
throw new IllegalArgumentException("Unknown resource type: " + r);
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/CoveragePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/CoveragePublisher.java
index 1d6b9db71ef..1d8d5fee448 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/CoveragePublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/CoveragePublisher.java
@@ -32,9 +32,9 @@ import org.sonar.api.utils.KeyValueFormat;
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.measure.MeasureCache;
+import org.sonar.scanner.protocol.output.ScannerReport.LineCoverage;
+import org.sonar.scanner.protocol.output.ScannerReport.LineCoverage.Builder;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
-import org.sonar.scanner.protocol.output.ScannerReport.Coverage;
-import org.sonar.scanner.protocol.output.ScannerReport.Coverage.Builder;
public class CoveragePublisher implements ReportPublisherStep {
@@ -52,48 +52,48 @@ public class CoveragePublisher implements ReportPublisherStep {
if (!resource.isFile()) {
continue;
}
- Map<Integer, Coverage.Builder> coveragePerLine = new LinkedHashMap<>();
+ Map<Integer, LineCoverage.Builder> coveragePerLine = new LinkedHashMap<>();
int lineCount = ((InputFile) resource.inputComponent()).lines();
applyLineMeasure(resource.key(), lineCount, CoreMetrics.COVERAGE_LINE_HITS_DATA_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setUtHits(Integer.parseInt(value) > 0);
}
});
applyLineMeasure(resource.key(), lineCount, CoreMetrics.CONDITIONS_BY_LINE_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setConditions(Integer.parseInt(value));
}
});
applyLineMeasure(resource.key(), lineCount, CoreMetrics.COVERED_CONDITIONS_BY_LINE_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setUtCoveredConditions(Integer.parseInt(value));
}
});
applyLineMeasure(resource.key(), lineCount, CoreMetrics.IT_COVERAGE_LINE_HITS_DATA_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setItHits(Integer.parseInt(value) > 0);
}
});
applyLineMeasure(resource.key(), lineCount, CoreMetrics.IT_COVERED_CONDITIONS_BY_LINE_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setItCoveredConditions(Integer.parseInt(value));
}
});
applyLineMeasure(resource.key(), lineCount, CoreMetrics.OVERALL_COVERED_CONDITIONS_BY_LINE_KEY, coveragePerLine,
new MeasureOperation() {
@Override
- public void apply(String value, Coverage.Builder builder) {
+ public void apply(String value, LineCoverage.Builder builder) {
builder.setOverallCoveredConditions(Integer.parseInt(value));
}
});
@@ -101,7 +101,7 @@ public class CoveragePublisher implements ReportPublisherStep {
}
}
- void applyLineMeasure(String inputFileKey, int lineCount, String metricKey, Map<Integer, Coverage.Builder> coveragePerLine, MeasureOperation op) {
+ void applyLineMeasure(String inputFileKey, int lineCount, String metricKey, Map<Integer, LineCoverage.Builder> coveragePerLine, MeasureOperation op) {
Measure measure = measureCache.byMetric(inputFileKey, metricKey);
if (measure != null) {
Map<Integer, String> lineMeasures = KeyValueFormat.parseIntString((String) measure.value());
@@ -110,9 +110,9 @@ public class CoveragePublisher implements ReportPublisherStep {
if (lineIdx <= lineCount) {
String value = lineMeasure.getValue();
if (StringUtils.isNotEmpty(value)) {
- Coverage.Builder coverageBuilder = coveragePerLine.get(lineIdx);
+ LineCoverage.Builder coverageBuilder = coveragePerLine.get(lineIdx);
if (coverageBuilder == null) {
- coverageBuilder = Coverage.newBuilder();
+ coverageBuilder = LineCoverage.newBuilder();
coverageBuilder.setLine(lineIdx);
coveragePerLine.put(lineIdx, coverageBuilder);
}
@@ -124,14 +124,14 @@ public class CoveragePublisher implements ReportPublisherStep {
}
interface MeasureOperation {
- void apply(String value, Coverage.Builder builder);
+ void apply(String value, LineCoverage.Builder builder);
}
- private enum BuildCoverage implements Function<Coverage.Builder, Coverage> {
+ private enum BuildCoverage implements Function<LineCoverage.Builder, LineCoverage> {
INSTANCE;
@Override
- public Coverage apply(@Nonnull Builder input) {
+ public LineCoverage apply(@Nonnull Builder input) {
return input.build();
}
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/MeasuresPublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/MeasuresPublisher.java
index 51e8867ddca..b743a841c98 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/MeasuresPublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/MeasuresPublisher.java
@@ -26,13 +26,16 @@ import java.util.Set;
import javax.annotation.Nonnull;
import org.sonar.api.batch.measure.Metric;
import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.Metric.ValueType;
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.measure.MeasureCache;
import org.sonar.core.metric.BatchMetrics;
-import org.sonar.scanner.protocol.Constants.MeasureValueType;
import org.sonar.scanner.protocol.output.ScannerReport;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.BoolValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.DoubleValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.IntValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.LongValue;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
import static com.google.common.collect.Iterables.filter;
@@ -63,61 +66,38 @@ public class MeasuresPublisher implements ReportPublisherStep {
private ScannerReport.Measure toReportMeasure(ScannerReport.Measure.Builder builder, Measure measure) {
builder.clear();
-
- builder.setValueType(getMeasureValueType(measure.getMetric().getType()));
- setValueAccordingToType(builder, measure);
- // Because some numeric measures also have a data (like maintainability rating)
- String data = measure.getData();
- if (data != null) {
- builder.setStringValue(data);
- }
builder.setMetricKey(measure.getMetricKey());
+ setValueAccordingToType(builder, measure);
return builder.build();
}
private void setValueAccordingToType(ScannerReport.Measure.Builder builder, Measure measure) {
Serializable value = measure.value();
- switch (builder.getValueType()) {
- case BOOLEAN:
- builder.setBooleanValue((Boolean) value);
- break;
- case DOUBLE:
- builder.setDoubleValue(((Number) value).doubleValue());
- break;
- case INT:
- builder.setIntValue(((Number) value).intValue());
- break;
- case LONG:
- builder.setLongValue(((Number) value).longValue());
- break;
- case STRING:
- builder.setStringValue((String) value);
- break;
- default:
- throw new IllegalStateException("Unknown value type: " + builder.getValueType());
- }
- }
-
- private MeasureValueType getMeasureValueType(ValueType type) {
- switch (type) {
+ String data = measure.getData() != null ? measure.getData() : "";
+ switch (measure.getMetric().getType()) {
case INT:
case RATING:
- return MeasureValueType.INT;
+ builder.setIntValue(IntValue.newBuilder().setValue(((Number) value).intValue()).setData(data));
+ break;
case FLOAT:
case PERCENT:
- return MeasureValueType.DOUBLE;
+ builder.setDoubleValue(DoubleValue.newBuilder().setValue(((Number) value).doubleValue()).setData(data));
+ break;
case BOOL:
- return MeasureValueType.BOOLEAN;
+ builder.setBooleanValue(BoolValue.newBuilder().setValue(((Boolean) value).booleanValue()).setData(data));
+ break;
+ case WORK_DUR:
+ case MILLISEC:
+ builder.setLongValue(LongValue.newBuilder().setValue(((Number) value).longValue()).setData(data));
+ break;
case STRING:
case DATA:
case LEVEL:
case DISTRIB:
- return MeasureValueType.STRING;
- case WORK_DUR:
- case MILLISEC:
- return MeasureValueType.LONG;
+ builder.setStringValue(StringValue.newBuilder().setValue((String) value));
+ break;
default:
- throw new IllegalStateException("Unknown value type: " + type);
+ throw new IllegalStateException("Unknown metric type: " + measure.getMetric().getType());
}
}
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ScannerReportUtils.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ScannerReportUtils.java
index b5e026476d3..020ac34ab4e 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ScannerReportUtils.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/ScannerReportUtils.java
@@ -20,7 +20,7 @@
package org.sonar.batch.report;
import org.sonar.api.batch.sensor.highlighting.TypeOfText;
-import org.sonar.scanner.protocol.Constants.HighlightingType;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
public class ScannerReportUtils {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/TestExecutionAndCoveragePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/TestExecutionAndCoveragePublisher.java
index 7561eb1ed1d..b047337928a 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/report/TestExecutionAndCoveragePublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/report/TestExecutionAndCoveragePublisher.java
@@ -34,11 +34,11 @@ import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.test.DefaultTestable;
import org.sonar.batch.test.TestPlanBuilder;
-import org.sonar.scanner.protocol.Constants.TestStatus;
import org.sonar.scanner.protocol.output.ScannerReport;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.protocol.output.ScannerReport.CoverageDetail;
import org.sonar.scanner.protocol.output.ScannerReport.Test;
+import org.sonar.scanner.protocol.output.ScannerReport.Test.TestStatus;
+import org.sonar.scanner.protocol.output.ScannerReportWriter;
public class TestExecutionAndCoveragePublisher implements ReportPublisherStep {
@@ -59,7 +59,7 @@ public class TestExecutionAndCoveragePublisher implements ReportPublisherStep {
}
Long durationInMs = testCase.durationInMs();
if (durationInMs != null) {
- builder.setDurationInMs(durationInMs);
+ builder.setDurationInMs(durationInMs.longValue());
}
String msg = testCase.message();
if (msg != null) {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java b/sonar-scanner-engine/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
index c8de752737b..ce3ae500bd1 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/batch/sensor/DefaultSensorStorage.java
@@ -58,8 +58,8 @@ import org.sonar.batch.cpd.index.SonarCpdBlockIndex;
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.issue.ModuleIssues;
-import org.sonar.batch.report.ScannerReportUtils;
import org.sonar.batch.report.ReportPublisher;
+import org.sonar.batch.report.ScannerReportUtils;
import org.sonar.batch.scan.measure.MeasureCache;
import org.sonar.batch.sensor.coverage.CoverageExclusions;
import org.sonar.batch.source.DefaultSymbol;
@@ -249,12 +249,12 @@ public class DefaultSensorStorage implements SensorStorage {
}
}
- private static class BuildSyntaxHighlighting implements Function<SyntaxHighlightingRule, ScannerReport.SyntaxHighlighting> {
- private ScannerReport.SyntaxHighlighting.Builder builder = ScannerReport.SyntaxHighlighting.newBuilder();
+ private static class BuildSyntaxHighlighting implements Function<SyntaxHighlightingRule, ScannerReport.SyntaxHighlightingRule> {
+ private ScannerReport.SyntaxHighlightingRule.Builder builder = ScannerReport.SyntaxHighlightingRule.newBuilder();
private ScannerReport.TextRange.Builder rangeBuilder = ScannerReport.TextRange.newBuilder();
@Override
- public ScannerReport.SyntaxHighlighting apply(@Nonnull SyntaxHighlightingRule input) {
+ public ScannerReport.SyntaxHighlightingRule apply(@Nonnull SyntaxHighlightingRule input) {
builder.setRange(rangeBuilder.setStartLine(input.range().start().line())
.setStartOffset(input.range().start().lineOffset())
.setEndLine(input.range().end().line())
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/cpd/CpdExecutorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/cpd/CpdExecutorTest.java
index 6a6c209348f..aa25e27b137 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/cpd/CpdExecutorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/cpd/CpdExecutorTest.java
@@ -19,6 +19,12 @@
*/
package org.sonar.batch.cpd;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -36,16 +42,10 @@ import org.sonar.batch.report.ReportPublisher;
import org.sonar.core.util.CloseableIterator;
import org.sonar.duplications.index.CloneGroup;
import org.sonar.duplications.index.ClonePart;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.protocol.output.ScannerReport.Duplicate;
import org.sonar.scanner.protocol.output.ScannerReport.Duplication;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
+import org.sonar.scanner.protocol.output.ScannerReportReader;
+import org.sonar.scanner.protocol.output.ScannerReportWriter;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -195,44 +195,44 @@ public class CpdExecutorTest {
assertDuplication(dups[0], 5, 204, batchComponent2.batchId(), 15, 214);
assertDuplication(dups[1], 15, 214, batchComponent3.batchId(), 15, 214);
}
-
+
private Duplication[] readDuplications(int expected) {
assertThat(reader.readComponentDuplications(batchComponent1.batchId())).hasSize(expected);
Duplication[] duplications = new Duplication[expected];
CloseableIterator<Duplication> dups = reader.readComponentDuplications(batchComponent1.batchId());
-
- for(int i = 0; i< expected; i++) {
+
+ for (int i = 0; i < expected; i++) {
duplications[i] = dups.next();
}
dups.close();
return duplications;
}
-
+
private void assertDuplicate(Duplicate d, int otherFileRef, int rangeStartLine, int rangeEndLine) {
assertThat(d.getOtherFileRef()).isEqualTo(otherFileRef);
assertThat(d.getRange().getStartLine()).isEqualTo(rangeStartLine);
assertThat(d.getRange().getEndLine()).isEqualTo(rangeEndLine);
}
-
+
private void assertDuplication(Duplication d, int originStartLine, int originEndLine, int numDuplicates) {
assertThat(d.getOriginPosition().getStartLine()).isEqualTo(originStartLine);
assertThat(d.getOriginPosition().getEndLine()).isEqualTo(originEndLine);
assertThat(d.getDuplicateList()).hasSize(numDuplicates);
}
-
+
private void assertDuplication(Duplication d, int originStartLine, int originEndLine, Integer otherFileRef, int rangeStartLine, int rangeEndLine) {
assertThat(d.getOriginPosition().getStartLine()).isEqualTo(originStartLine);
assertThat(d.getOriginPosition().getEndLine()).isEqualTo(originEndLine);
assertThat(d.getDuplicateList()).hasSize(1);
- if(otherFileRef != null) {
- assertThat(d.getDuplicate(0).getOtherFileRef()).isEqualTo(otherFileRef);
+ if (otherFileRef != null) {
+ assertThat(d.getDuplicate(0).getOtherFileRef()).isEqualTo(otherFileRef);
} else {
- assertThat(d.getDuplicate(0).hasOtherFileRef()).isFalse();
+ assertThat(d.getDuplicate(0).getOtherFileRef()).isEqualTo(0);
}
assertThat(d.getDuplicate(0).getRange().getStartLine()).isEqualTo(rangeStartLine);
assertThat(d.getDuplicate(0).getRange().getEndLine()).isEqualTo(rangeEndLine);
}
-
+
private CloneGroup newCloneGroup(ClonePart... parts) {
return CloneGroup.builder().setLength(0).setOrigin(parts[0]).setParts(Arrays.asList(parts)).build();
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java
index daded262498..d6b759a4edb 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java
@@ -19,18 +19,17 @@
*/
package org.sonar.batch.issue;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.when;
-
import java.util.Date;
-
-import static org.mockito.Mockito.mock;
-
import org.junit.Before;
import org.junit.Test;
import org.sonar.api.resources.Project;
import org.sonar.scanner.protocol.Constants.Severity;
import org.sonar.scanner.protocol.output.ScannerReport.Issue;
+import org.sonar.scanner.protocol.output.ScannerReport.TextRange;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
public class DefaultFilterableIssueTest {
private DefaultFilterableIssue issue;
@@ -48,7 +47,7 @@ public class DefaultFilterableIssueTest {
Issue.Builder builder = Issue.newBuilder();
builder.setGap(3.0);
- builder.setLine(30);
+ builder.setTextRange(TextRange.newBuilder().setStartLine(30));
builder.setSeverity(Severity.MAJOR);
return builder.build();
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java
index b4818adae0e..dca0dea2cfe 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java
@@ -25,6 +25,7 @@ import org.sonar.api.issue.Issue;
import org.sonar.api.resources.Project;
import org.sonar.api.rule.RuleKey;
import org.sonar.scanner.protocol.Constants.Severity;
+import org.sonar.scanner.protocol.output.ScannerReport.TextRange;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
@@ -51,7 +52,7 @@ public class DeprecatedIssueAdapterForFilterTest {
.setRuleKey("key")
.setSeverity(Severity.BLOCKER)
.setMsg("msg")
- .setLine(1)
+ .setTextRange(TextRange.newBuilder().setStartLine(1))
.setGap(2.0)
.build(),
COMPONENT_KEY);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/coverage/CoverageMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/coverage/CoverageMediumTest.java
index e3dac6ed869..68cae60f218 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/coverage/CoverageMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/coverage/CoverageMediumTest.java
@@ -91,7 +91,7 @@ public class CoverageMediumTest {
assertThat(result.coverageFor(file, 2).getOverallCoveredConditions()).isEqualTo(0);
Map<String, List<org.sonar.scanner.protocol.output.ScannerReport.Measure>> allMeasures = result.allMeasures();
- assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue")
+ assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value")
.contains(tuple(CoreMetrics.LINES_TO_COVER_KEY, 2),
tuple(CoreMetrics.UNCOVERED_LINES_KEY, 0),
tuple(CoreMetrics.CONDITIONS_TO_COVER_KEY, 2),
@@ -170,7 +170,7 @@ public class CoverageMediumTest {
assertThat(result.coverageFor(file, 4)).isNull();
Map<String, List<org.sonar.scanner.protocol.output.ScannerReport.Measure>> allMeasures = result.allMeasures();
- assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue")
+ assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value")
.contains(tuple(CoreMetrics.LINES_TO_COVER_KEY, 2),
tuple(CoreMetrics.UNCOVERED_LINES_KEY, 2));
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/cpd/CpdMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/cpd/CpdMediumTest.java
index 6613421a4da..7a349224239 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/cpd/CpdMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/cpd/CpdMediumTest.java
@@ -27,7 +27,6 @@ import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
-import org.assertj.core.groups.Tuple;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
@@ -48,6 +47,7 @@ import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.lang.CpdTokenizerSensor;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.groups.Tuple.tuple;
@RunWith(Parameterized.class)
public class CpdMediumTest {
@@ -324,12 +324,10 @@ public class CpdMediumTest {
Map<String, List<Measure>> allMeasures = result.allMeasures();
- assertThat(allMeasures.get("com.foo.project")).extracting("metricKey", "intValue", "doubleValue", "stringValue").containsOnly(
- Tuple.tuple(CoreMetrics.QUALITY_PROFILES_KEY, 0, 0.0,
- "[{\"key\":\"Sonar Way\",\"language\":\"xoo\",\"name\":\"Sonar Way\",\"rulesUpdatedAt\":\"2009-02-13T23:31:31+0000\"}]"));
+ assertThat(allMeasures.get("com.foo.project")).extracting("metricKey").containsOnly(CoreMetrics.QUALITY_PROFILES_KEY);
- assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue").containsOnly(
- Tuple.tuple(CoreMetrics.LINES_KEY, blockCount * 2 + 1));
+ assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value").containsOnly(
+ tuple(CoreMetrics.LINES_KEY, blockCount * 2 + 1));
List<org.sonar.scanner.protocol.output.ScannerReport.Duplication> duplicationGroups = result.duplicationsFor(result.inputFile("src/sample.xoo"));
assertThat(duplicationGroups).hasSize(1);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
index fa1ff38833d..886647742bf 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/deprecated/DeprecatedApiMediumTest.java
@@ -82,15 +82,15 @@ public class DeprecatedApiMediumTest {
.build())
.start();
- assertThat(result.issuesFor(result.inputFile("src/sample.xoo"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputFile("src/sample.xoo"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0),
tuple("Issue created using deprecated API", 1));
- assertThat(result.issuesFor(result.inputFile("src/package/sample.xoo"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputFile("src/package/sample.xoo"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0),
tuple("Issue created using deprecated API", 1));
- assertThat(result.issuesFor(result.inputDir("src"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputDir("src"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0));
- assertThat(result.issuesFor(result.inputDir("src/package"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputDir("src/package"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0));
}
@@ -118,15 +118,15 @@ public class DeprecatedApiMediumTest {
.build())
.start();
- assertThat(result.issuesFor(result.inputFile("sample.xoo"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputFile("sample.xoo"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0),
tuple("Issue created using deprecated API", 1));
- assertThat(result.issuesFor(result.inputFile("package/sample.xoo"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputFile("package/sample.xoo"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0),
tuple("Issue created using deprecated API", 1));
- assertThat(result.issuesFor(result.inputDir(""))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputDir(""))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0));
- assertThat(result.issuesFor(result.inputDir("package"))).extracting("msg", "line").containsOnly(
+ assertThat(result.issuesFor(result.inputDir("package"))).extracting("msg", "textRange.startLine").containsOnly(
tuple("Issue created using deprecated API", 0));
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
index 21526ddcfd5..dc1ed8f9dce 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
@@ -39,6 +39,7 @@ import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
public class ProjectBuilderMediumTest {
@@ -85,15 +86,9 @@ public class ProjectBuilderMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
assertThat(issues).hasSize(10);
- boolean foundIssueAtLine1 = false;
- for (Issue issue : issues) {
- if (issue.getLine() == 1) {
- foundIssueAtLine1 = true;
- assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
- assertThat(issue.hasGap()).isFalse();
- }
- }
- assertThat(foundIssueAtLine1).isTrue();
+ assertThat(issues)
+ .extracting("msg", "textRange.startLine", "gap")
+ .contains(tuple("This issue is generated on each line", 1, 0.0));
}
@@ -140,15 +135,9 @@ public class ProjectBuilderMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
assertThat(issues).hasSize(10);
- boolean foundIssueAtLine1 = false;
- for (Issue issue : issues) {
- if (issue.getLine() == 1) {
- foundIssueAtLine1 = true;
- assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
- assertThat(issue.hasGap()).isFalse();
- }
- }
- assertThat(foundIssueAtLine1).isTrue();
+ assertThat(issues)
+ .extracting("msg", "textRange.startLine", "gap")
+ .contains(tuple("This issue is generated on each line", 1, 0.0));
}
private File prepareProject() throws IOException {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
index 804a66a7d4d..9a30bec5016 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/ChecksMediumTest.java
@@ -40,6 +40,7 @@ import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
public class ChecksMediumTest {
@@ -89,22 +90,12 @@ public class ChecksMediumTest {
.start();
List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
- assertThat(issues).hasSize(2);
-
- boolean foundIssueAtLine1 = false;
- boolean foundIssueAtLine2 = false;
- for (Issue issue : issues) {
- if (issue.getLine() == 1) {
- foundIssueAtLine1 = true;
- assertThat(issue.getMsg()).isEqualTo("A template rule");
- }
- if (issue.getLine() == 2) {
- foundIssueAtLine2 = true;
- assertThat(issue.getMsg()).isEqualTo("Another template rule");
- }
- }
- assertThat(foundIssueAtLine1).isTrue();
- assertThat(foundIssueAtLine2).isTrue();
+ assertThat(issues)
+ .extracting("msg", "textRange.startLine")
+ .containsOnly(
+ tuple("A template rule", 1),
+ tuple("Another template rule", 2));
+
}
private LoadedActiveRule createActiveRuleWithParam(String repositoryKey, String ruleKey, @Nullable String templateRuleKey, String name, @Nullable String severity,
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
index 50823ff4f48..69f3099977e 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
@@ -37,6 +37,7 @@ import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.XooRulesDefinition;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.tuple;
public class IssuesMediumTest {
@@ -90,8 +91,7 @@ public class IssuesMediumTest {
assertThat(issues).hasSize(8 /* lines */);
Issue issue = issues.get(0);
- assertThat(issue.getTextRange().getStartLine()).isEqualTo(issue.getLine());
- assertThat(issue.getTextRange().getEndLine()).isEqualTo(issue.getLine());
+ assertThat(issue.getTextRange().getStartLine()).isEqualTo(issue.getTextRange().getStartLine());
}
@Test
@@ -164,16 +164,9 @@ public class IssuesMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("src/sample.xoo"));
assertThat(issues).hasSize(10);
-
- boolean foundIssueAtLine1 = false;
- for (Issue issue : issues) {
- if (issue.getLine() == 1) {
- foundIssueAtLine1 = true;
- assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
- assertThat(issue.hasGap()).isFalse();
- }
- }
- assertThat(foundIssueAtLine1).isTrue();
+ assertThat(issues)
+ .extracting("msg", "textRange.startLine", "gap")
+ .contains(tuple("This issue is generated on each line", 1, 0.0));
}
private class IssueRecorder implements IssueListener {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
index 7ec0fe90535..476266c0868 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/issues/MultilineIssuesMediumTest.java
@@ -73,7 +73,6 @@ public class MultilineIssuesMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/Single.xoo"));
assertThat(issues).hasSize(1);
Issue issue = issues.get(0);
- assertThat(issue.getLine()).isEqualTo(6);
assertThat(issue.getMsg()).isEqualTo("Primary location");
assertThat(issue.getTextRange().getStartLine()).isEqualTo(6);
assertThat(issue.getTextRange().getStartOffset()).isEqualTo(23);
@@ -86,7 +85,6 @@ public class MultilineIssuesMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/Multiline.xoo"));
assertThat(issues).hasSize(1);
Issue issue = issues.get(0);
- assertThat(issue.getLine()).isEqualTo(6);
assertThat(issue.getMsg()).isEqualTo("Primary location");
assertThat(issue.getTextRange().getStartLine()).isEqualTo(6);
assertThat(issue.getTextRange().getStartOffset()).isEqualTo(23);
@@ -99,7 +97,6 @@ public class MultilineIssuesMediumTest {
List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/Multiple.xoo"));
assertThat(issues).hasSize(1);
Issue issue = issues.get(0);
- assertThat(issue.getLine()).isEqualTo(6);
assertThat(issue.getMsg()).isEqualTo("Primary location");
assertThat(issue.getTextRange().getStartLine()).isEqualTo(6);
assertThat(issue.getTextRange().getStartOffset()).isEqualTo(23);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
index e9db30c49f4..b72458e3141 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/measures/MeasuresMediumTest.java
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.apache.commons.io.FileUtils;
-import org.assertj.core.groups.Tuple;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -91,12 +90,11 @@ public class MeasuresMediumTest {
Map<String, List<Measure>> allMeasures = result.allMeasures();
- assertThat(allMeasures.get("com.foo.project")).extracting("metricKey", "intValue", "doubleValue", "stringValue").containsOnly(
- Tuple.tuple(CoreMetrics.QUALITY_PROFILES_KEY, 0, 0.0,
- "[{\"key\":\"Sonar Way\",\"language\":\"xoo\",\"name\":\"Sonar Way\",\"rulesUpdatedAt\":\"2009-02-13T23:31:31+0000\"}]"));
+ assertThat(allMeasures.get("com.foo.project")).extracting("metricKey", "stringValue.value").containsOnly(
+ tuple(CoreMetrics.QUALITY_PROFILES_KEY, "[{\"key\":\"Sonar Way\",\"language\":\"xoo\",\"name\":\"Sonar Way\",\"rulesUpdatedAt\":\"2009-02-13T23:31:31+0000\"}]"));
- assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue").containsOnly(
- Tuple.tuple(CoreMetrics.LINES_KEY, 2));
+ assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value").containsOnly(
+ tuple(CoreMetrics.LINES_KEY, 2));
}
@Test
@@ -122,9 +120,9 @@ public class MeasuresMediumTest {
Map<String, List<Measure>> allMeasures = result.allMeasures();
- assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue")
+ assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value")
.contains(tuple("lines", 3));
- assertThat(allMeasures.get("com.foo.project:src/sample.other")).extracting("metricKey", "intValue")
+ assertThat(allMeasures.get("com.foo.project:src/sample.other")).extracting("metricKey", "intValue.value")
.contains(tuple("lines", 3), tuple("ncloc", 2));
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java
index 37c8da1ef01..8481c17d3ff 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/scm/ScmMediumTest.java
@@ -36,9 +36,9 @@ import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.BatchMediumTester.TaskBuilder;
import org.sonar.batch.repository.FileData;
import org.sonar.scanner.protocol.output.ScannerReport;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
-import org.sonar.scanner.protocol.output.ScannerReport.Component;
import org.sonar.scanner.protocol.output.ScannerReport.Changesets.Changeset;
+import org.sonar.scanner.protocol.output.ScannerReport.Component;
+import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.xoo.XooPlugin;
import static org.assertj.core.api.Assertions.assertThat;
@@ -101,7 +101,7 @@ public class ScmMediumTest {
assertThat(fileScm.getChangesetIndexByLineList()).hasSize(5);
Changeset changesetLine1 = fileScm.getChangeset(fileScm.getChangesetIndexByLine(0));
- assertThat(changesetLine1.hasAuthor()).isFalse();
+ assertThat(changesetLine1.getAuthor()).isEmpty();
Changeset changesetLine2 = fileScm.getChangeset(fileScm.getChangesetIndexByLine(1));
assertThat(changesetLine2.getAuthor()).isEqualTo("julien");
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/tests/TestExecutionMediumTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/tests/TestExecutionMediumTest.java
index cae559f16c5..328ba392561 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/tests/TestExecutionMediumTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/mediumtest/tests/TestExecutionMediumTest.java
@@ -20,6 +20,8 @@
package org.sonar.batch.mediumtest.tests;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -28,12 +30,9 @@ import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.fs.InputFile;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
-import org.sonar.scanner.protocol.Constants.TestStatus;
+import org.sonar.scanner.protocol.output.ScannerReport.Test.TestStatus;
import org.sonar.xoo.XooPlugin;
-import java.io.File;
-import java.io.IOException;
-
import static org.assertj.core.api.Assertions.assertThat;
public class TestExecutionMediumTest {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ActiveRulesPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ActiveRulesPublisherTest.java
index 4b912b22d7b..eb747ac0a2c 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ActiveRulesPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ActiveRulesPublisherTest.java
@@ -25,7 +25,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.batch.rule.ActiveRules;
-import org.sonar.api.batch.rule.Severity;
import org.sonar.api.batch.rule.internal.ActiveRulesBuilder;
import org.sonar.api.batch.rule.internal.DefaultActiveRules;
import org.sonar.api.batch.rule.internal.NewActiveRule;
@@ -60,9 +59,9 @@ public class ActiveRulesPublisherTest {
assertThat(reportAr.getRuleRepository()).isEqualTo("java");
assertThat(reportAr.getRuleKey()).isEqualTo("S001");
assertThat(reportAr.getSeverity()).isEqualTo(Constants.Severity.BLOCKER);
- assertThat(reportAr.getParamCount()).isEqualTo(1);
- assertThat(reportAr.getParam(0).getKey()).isEqualTo("p1");
- assertThat(reportAr.getParam(0).getValue()).isEqualTo("v1");
+ assertThat(reportAr.getParamsByKey()).hasSize(1);
+ assertThat(reportAr.getParamsByKey().entrySet().iterator().next().getKey()).isEqualTo("p1");
+ assertThat(reportAr.getParamsByKey().entrySet().iterator().next().getValue()).isEqualTo("v1");
assertThat(readIt.hasNext()).isFalse();
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java
index 0a4ed8d69cd..65c54c6f5c6 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/ComponentsPublisherTest.java
@@ -34,11 +34,11 @@ import org.sonar.api.resources.Project;
import org.sonar.api.utils.DateUtils;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.ImmutableProjectReactor;
-import org.sonar.scanner.protocol.Constants.ComponentLinkType;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
import org.sonar.scanner.protocol.output.FileStructure;
import org.sonar.scanner.protocol.output.ScannerReport.Component;
+import org.sonar.scanner.protocol.output.ScannerReport.ComponentLink.ComponentLinkType;
+import org.sonar.scanner.protocol.output.ScannerReportReader;
+import org.sonar.scanner.protocol.output.ScannerReportWriter;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/CoveragePublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/CoveragePublisherTest.java
index 72c31cf4928..1175661f8b9 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/batch/report/CoveragePublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/batch/report/CoveragePublisherTest.java
@@ -33,9 +33,9 @@ import org.sonar.api.resources.Project;
import org.sonar.batch.index.BatchComponentCache;
import org.sonar.batch.scan.measure.MeasureCache;
import org.sonar.core.util.CloseableIterator;
+import org.sonar.scanner.protocol.output.ScannerReport.LineCoverage;
import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.ScannerReportWriter;
-import org.sonar.scanner.protocol.output.ScannerReport.Coverage;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.anyString;
@@ -90,13 +90,13 @@ public class CoveragePublisherTest {
publisher.publish(writer);
- try (CloseableIterator<Coverage> it = new ScannerReportReader(outputDir).readComponentCoverage(2)) {
- assertThat(it.next()).isEqualTo(Coverage.newBuilder()
+ try (CloseableIterator<LineCoverage> it = new ScannerReportReader(outputDir).readComponentCoverage(2)) {
+ assertThat(it.next()).isEqualTo(LineCoverage.newBuilder()
.setLine(2)
.setUtHits(true)
.setItHits(false)
.build());
- assertThat(it.next()).isEqualTo(Coverage.newBuilder()
+ assertThat(it.next()).isEqualTo(LineCoverage.newBuilder()
.setLine(3)
.setUtHits(true)
.setItHits(false)
@@ -105,7 +105,7 @@ public class CoveragePublisherTest {
.setItCoveredConditions(1)
.setOverallCoveredConditions(2)
.build());
- assertThat(it.next()).isEqualTo(Coverage.newBuilder()
+ assertThat(it.next()).isEqualTo(LineCoverage.newBuilder()
.setLine(5)
.setUtHits(false)
.setItHits(true)
diff --git a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportReader.java b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportReader.java
index d47b94225ef..5cb0d7b8bf2 100644
--- a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportReader.java
+++ b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportReader.java
@@ -39,7 +39,7 @@ public class ScannerReportReader {
if (!fileExists(file)) {
throw new IllegalStateException("Metadata file is missing in analysis report: " + file);
}
- return Protobuf.read(file, ScannerReport.Metadata.PARSER);
+ return Protobuf.read(file, ScannerReport.Metadata.parser());
}
public CloseableIterator<ScannerReport.ActiveRule> readActiveRules() {
@@ -47,13 +47,13 @@ public class ScannerReportReader {
if (!fileExists(file)) {
return emptyCloseableIterator();
}
- return Protobuf.readStream(file, ScannerReport.ActiveRule.PARSER);
+ return Protobuf.readStream(file, ScannerReport.ActiveRule.parser());
}
public CloseableIterator<ScannerReport.Measure> readComponentMeasures(int componentRef) {
File file = fileStructure.fileFor(FileStructure.Domain.MEASURES, componentRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.Measure.PARSER);
+ return Protobuf.readStream(file, ScannerReport.Measure.parser());
}
return emptyCloseableIterator();
}
@@ -62,7 +62,7 @@ public class ScannerReportReader {
public ScannerReport.Changesets readChangesets(int componentRef) {
File file = fileStructure.fileFor(FileStructure.Domain.CHANGESETS, componentRef);
if (fileExists(file)) {
- return Protobuf.read(file, ScannerReport.Changesets.PARSER);
+ return Protobuf.read(file, ScannerReport.Changesets.parser());
}
return null;
}
@@ -72,13 +72,13 @@ public class ScannerReportReader {
if (!fileExists(file)) {
throw new IllegalStateException("Unable to find report for component #" + componentRef + ". File does not exist: " + file);
}
- return Protobuf.read(file, ScannerReport.Component.PARSER);
+ return Protobuf.read(file, ScannerReport.Component.parser());
}
public CloseableIterator<ScannerReport.Issue> readComponentIssues(int componentRef) {
File file = fileStructure.fileFor(FileStructure.Domain.ISSUES, componentRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.Issue.PARSER);
+ return Protobuf.readStream(file, ScannerReport.Issue.parser());
}
return emptyCloseableIterator();
}
@@ -86,7 +86,7 @@ public class ScannerReportReader {
public CloseableIterator<ScannerReport.Duplication> readComponentDuplications(int componentRef) {
File file = fileStructure.fileFor(FileStructure.Domain.DUPLICATIONS, componentRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.Duplication.PARSER);
+ return Protobuf.readStream(file, ScannerReport.Duplication.parser());
}
return emptyCloseableIterator();
}
@@ -102,7 +102,7 @@ public class ScannerReportReader {
public CloseableIterator<ScannerReport.Symbol> readComponentSymbols(int componentRef) {
File file = fileStructure.fileFor(FileStructure.Domain.SYMBOLS, componentRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.Symbol.PARSER);
+ return Protobuf.readStream(file, ScannerReport.Symbol.parser());
}
return emptyCloseableIterator();
}
@@ -112,10 +112,10 @@ public class ScannerReportReader {
return file.exists();
}
- public CloseableIterator<ScannerReport.SyntaxHighlighting> readComponentSyntaxHighlighting(int fileRef) {
+ public CloseableIterator<ScannerReport.SyntaxHighlightingRule> readComponentSyntaxHighlighting(int fileRef) {
File file = fileStructure.fileFor(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, fileRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.SyntaxHighlighting.PARSER);
+ return Protobuf.readStream(file, ScannerReport.SyntaxHighlightingRule.parser());
}
return emptyCloseableIterator();
}
@@ -125,10 +125,10 @@ public class ScannerReportReader {
return file.exists();
}
- public CloseableIterator<ScannerReport.Coverage> readComponentCoverage(int fileRef) {
+ public CloseableIterator<ScannerReport.LineCoverage> readComponentCoverage(int fileRef) {
File file = fileStructure.fileFor(FileStructure.Domain.COVERAGES, fileRef);
if (fileExists(file)) {
- return Protobuf.readStream(file, ScannerReport.Coverage.PARSER);
+ return Protobuf.readStream(file, ScannerReport.LineCoverage.parser());
}
return emptyCloseableIterator();
}
diff --git a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportWriter.java b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportWriter.java
index 5cbba578c2a..b2da5ba4b56 100644
--- a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportWriter.java
+++ b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/output/ScannerReportWriter.java
@@ -110,13 +110,13 @@ public class ScannerReportWriter {
return file;
}
- public File writeComponentSyntaxHighlighting(int componentRef, Iterable<ScannerReport.SyntaxHighlighting> syntaxHighlightingRules) {
+ public File writeComponentSyntaxHighlighting(int componentRef, Iterable<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingRules) {
File file = fileStructure.fileFor(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, componentRef);
Protobuf.writeStream(syntaxHighlightingRules, file, false);
return file;
}
- public File writeComponentCoverage(int componentRef, Iterable<ScannerReport.Coverage> coverageList) {
+ public File writeComponentCoverage(int componentRef, Iterable<ScannerReport.LineCoverage> coverageList) {
File file = fileStructure.fileFor(FileStructure.Domain.COVERAGES, componentRef);
Protobuf.writeStream(coverageList, file, false);
return file;
diff --git a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/viewer/ScannerReportViewerApp.java b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/viewer/ScannerReportViewerApp.java
index 3768c1ca0d2..70ea5f477c9 100644
--- a/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/viewer/ScannerReportViewerApp.java
+++ b/sonar-scanner-protocol/src/main/java/org/sonar/scanner/protocol/viewer/ScannerReportViewerApp.java
@@ -47,12 +47,13 @@ import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeSelectionModel;
+import org.apache.commons.lang.StringUtils;
import org.sonar.core.util.CloseableIterator;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
import org.sonar.scanner.protocol.output.FileStructure.Domain;
import org.sonar.scanner.protocol.output.ScannerReport;
import org.sonar.scanner.protocol.output.ScannerReport.Component;
import org.sonar.scanner.protocol.output.ScannerReport.Metadata;
+import org.sonar.scanner.protocol.output.ScannerReportReader;
public class ScannerReportViewerApp {
@@ -179,7 +180,8 @@ public class ScannerReportViewerApp {
}
private void updateTitle() {
- frame.setTitle(metadata.getProjectKey() + (metadata.hasBranch() ? (" (" + metadata.getBranch() + ")") : "") + " " + sdf.format(new Date(metadata.getAnalysisDate())));
+ frame.setTitle(metadata.getProjectKey() + (StringUtils.isNotEmpty(metadata.getBranch()) ? (" (" + metadata.getBranch() + ")") : "") + " "
+ + sdf.format(new Date(metadata.getAnalysisDate())));
}
private void updateDetails(Component component) {
@@ -207,9 +209,9 @@ public class ScannerReportViewerApp {
private void updateCoverage(Component component) {
coverageEditor.setText("");
- try (CloseableIterator<ScannerReport.Coverage> it = reader.readComponentCoverage(component.getRef())) {
+ try (CloseableIterator<ScannerReport.LineCoverage> it = reader.readComponentCoverage(component.getRef())) {
while (it.hasNext()) {
- ScannerReport.Coverage coverage = it.next();
+ ScannerReport.LineCoverage coverage = it.next();
coverageEditor.getDocument().insertString(coverageEditor.getDocument().getEndPosition().getOffset(), coverage.toString() + "\n", null);
}
} catch (Exception e) {
@@ -236,9 +238,9 @@ public class ScannerReportViewerApp {
private void updateHighlighting(Component component) {
highlightingEditor.setText("");
- try (CloseableIterator<ScannerReport.SyntaxHighlighting> it = reader.readComponentSyntaxHighlighting(component.getRef())) {
+ try (CloseableIterator<ScannerReport.SyntaxHighlightingRule> it = reader.readComponentSyntaxHighlighting(component.getRef())) {
while (it.hasNext()) {
- ScannerReport.SyntaxHighlighting rule = it.next();
+ ScannerReport.SyntaxHighlightingRule rule = it.next();
highlightingEditor.getDocument().insertString(highlightingEditor.getDocument().getEndPosition().getOffset(), rule.toString() + "\n", null);
}
} catch (Exception e) {
diff --git a/sonar-scanner-protocol/src/main/protobuf/constants.proto b/sonar-scanner-protocol/src/main/protobuf/constants.proto
index 862b4afa54c..8be6a361a2d 100644
--- a/sonar-scanner-protocol/src/main/protobuf/constants.proto
+++ b/sonar-scanner-protocol/src/main/protobuf/constants.proto
@@ -16,64 +16,18 @@
// along with this program; if not, write to the Free Software Foundation,
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-syntax = "proto2";
+syntax = "proto3";
option java_package = "org.sonar.scanner.protocol";
option optimize_for = SPEED;
enum Severity {
- INFO = 0;
- MINOR = 1;
- MAJOR = 2;
- CRITICAL = 3;
- BLOCKER = 4;
+ UNSET_SEVERITY = 0;
+ INFO = 1;
+ MINOR = 2;
+ MAJOR = 3;
+ CRITICAL = 4;
+ BLOCKER = 5;
}
-enum ComponentType {
- PROJECT = 0;
- MODULE = 1;
- DIRECTORY = 2;
- FILE = 3;
-}
-
-enum MeasureValueType {
- INT = 0;
- LONG = 1;
- DOUBLE = 2;
- BOOLEAN = 3;
- STRING = 4;
-}
-
-// temporary enum during development of computation stack
-enum EventCategory {
- ALERT = 0;
- PROFILE = 1;
-}
-
-enum ComponentLinkType {
- HOME = 0;
- SCM = 1;
- SCM_DEV = 2;
- ISSUE = 3;
- CI = 4;
-}
-
-enum HighlightingType {
- ANNOTATION = 0;
- CONSTANT = 1;
- COMMENT = 2;
- CPP_DOC = 3;
- STRUCTURED_COMMENT = 4;
- KEYWORD = 5;
- HIGHLIGHTING_STRING = 6;
- KEYWORD_LIGHT = 7;
- PREPROCESS_DIRECTIVE = 8;
-}
-
-enum TestStatus {
- OK = 1;
- FAILURE = 2;
- ERROR = 3;
- SKIPPED = 4;
-}
diff --git a/sonar-scanner-protocol/src/main/protobuf/scanner_report.proto b/sonar-scanner-protocol/src/main/protobuf/scanner_report.proto
index 3df7f4343a6..c7b4964f540 100644
--- a/sonar-scanner-protocol/src/main/protobuf/scanner_report.proto
+++ b/sonar-scanner-protocol/src/main/protobuf/scanner_report.proto
@@ -26,7 +26,7 @@ Notes
not forward-compatible yet.
*/
-syntax = "proto2";
+syntax = "proto3";
import "constants.proto";
@@ -35,82 +35,116 @@ option java_package = "org.sonar.scanner.protocol.output";
option optimize_for = SPEED;
message Metadata {
- optional int64 analysis_date = 1;
+ int64 analysis_date = 1;
// TODO should we keep this project_key here or not ? Because it's a duplication of Component.key
- optional string project_key = 2;
- optional string branch = 3;
- optional int32 root_component_ref = 4;
- optional bool cross_project_duplication_activated = 5;
+ string project_key = 2;
+ string branch = 3;
+ int32 root_component_ref = 4;
+ bool cross_project_duplication_activated = 5;
}
message ActiveRule {
- optional string rule_repository = 1;
- optional string rule_key = 2;
- optional Severity severity = 3;
- repeated ActiveRuleParam param = 4;
-
- // TODO replace by map
- message ActiveRuleParam {
- optional string key = 1;
- optional string value = 2;
- }
+ string rule_repository = 1;
+ string rule_key = 2;
+ Severity severity = 3;
+ map<string,string> params_by_key = 4;
}
message ComponentLink {
- optional ComponentLinkType type = 1;
- optional string href = 2;
+ ComponentLinkType type = 1;
+ string href = 2;
+
+ enum ComponentLinkType {
+ UNSET = 0;
+ HOME = 1;
+ SCM = 2;
+ SCM_DEV = 3;
+ ISSUE = 4;
+ CI = 5;
+ }
}
message Component {
- optional int32 ref = 1;
- optional string path = 2;
- optional string name = 3;
- optional ComponentType type = 4;
- optional bool is_test = 5;
- optional string language = 6;
+ int32 ref = 1;
+ string path = 2;
+ string name = 3;
+ ComponentType type = 4;
+ bool is_test = 5;
+ string language = 6;
repeated int32 child_ref = 7 [packed = true];
repeated ComponentLink link = 8;
// Only available on PROJECT and MODULE types
- optional string version = 9;
+ string version = 9;
// Only available on PROJECT and MODULE types
// TODO rename this property -> batchKey ? moduleKey ?
- optional string key = 10;
+ string key = 10;
// Only available on FILE type
- optional int32 lines = 11;
+ int32 lines = 11;
// Only available on PROJECT and MODULE types
- optional string description = 12;
+ string description = 12;
+
+ enum ComponentType {
+ UNSET = 0;
+ PROJECT = 1;
+ MODULE = 2;
+ DIRECTORY = 3;
+ FILE = 4;
+ }
}
message Measure {
- optional MeasureValueType value_type = 1;
- // all values may be unset for "new_xxx" measures (only variations are populated)
- optional bool boolean_value = 2;
- optional int32 int_value = 3;
- optional int64 long_value = 4;
- optional double double_value = 5;
- optional string string_value = 6;
- optional string metric_key = 7;
+ string metric_key = 1;
+ oneof value {
+ BoolValue boolean_value = 2;
+ IntValue int_value = 3;
+ LongValue long_value = 4;
+ DoubleValue double_value = 5;
+ StringValue string_value = 6;
+ }
+
+ message BoolValue {
+ bool value = 1;
+ string data = 2;
+ }
+
+ message IntValue {
+ int32 value = 1;
+ string data = 2;
+ }
+
+ message LongValue {
+ int64 value = 1;
+ string data = 2;
+ }
+
+ message DoubleValue {
+ double value = 1;
+ string data = 2;
+ }
+
+ message StringValue {
+ string value = 1;
+ }
}
message Issue {
- optional string rule_repository = 1;
- optional string rule_key = 2;
+ string rule_repository = 1;
+ string rule_key = 2;
// Only when issue component is a file. Can also be empty for a file if this is an issue global to the file.
- //TODO To be removed. Use first line of text_range instead
- optional int32 line = 3;
- optional string msg = 4;
- optional Severity severity = 5;
- optional double gap = 6;
+ string msg = 3;
+ Severity severity = 4;
+ double gap = 5;
// Only when issue component is a file. Can also be empty for a file if this is an issue global to the file.
- optional TextRange text_range = 7;
- repeated Flow flow = 8;
+ // Will be identical to the first location of the first flow
+ TextRange text_range = 6;
+ repeated Flow flow = 7;
}
message IssueLocation {
- optional int32 component_ref = 1;
+ int32 component_ref = 1;
// Only when component is a file. Can be empty for a file if this is an issue global to the file.
- optional TextRange text_range = 2;
- optional string msg = 3;
+ TextRange text_range = 2;
+ string msg = 3;
}
message Flow {
@@ -118,96 +152,113 @@ message Flow {
}
message Changesets {
- optional int32 component_ref = 1;
+ int32 component_ref = 1;
repeated Changeset changeset = 2;
// if changesetIndexByLine[5] = 2 then it means that changeset[2] is the last one on line 6
repeated int32 changesetIndexByLine = 3 [packed = true];
message Changeset {
- optional string revision = 1;
- optional string author = 2;
- optional int64 date = 3;
+ string revision = 1;
+ string author = 2;
+ int64 date = 3;
}
}
message Duplicate {
- // Will be null when duplicate is in the same file
- optional int32 other_file_ref = 1;
- optional TextRange range = 2;
+ // Will be 0 when duplicate is in the same file
+ int32 other_file_ref = 1;
+ // Only start_line and end_line are provided since we dont support "precise" duplication location.
+ TextRange range = 2;
}
message Duplication {
- // Origin position in current file
- optional TextRange origin_position = 1;
+ // Origin position in current file. Only start_line and end_line are provided since we dont support "precise" duplication location.
+ TextRange origin_position = 1;
repeated Duplicate duplicate = 2;
}
// Used for cross project duplication
message CpdTextBlock {
- optional string hash = 1;
- optional int32 start_line = 2;
- optional int32 end_line = 3;
- optional int32 start_token_index = 4;
- optional int32 end_token_index = 5;
+ string hash = 1;
+ int32 start_line = 2;
+ int32 end_line = 3;
+ int32 start_token_index = 4;
+ int32 end_token_index = 5;
}
// Lines start at 1 and line offsets start at 0
message TextRange {
- // Should never be null
- optional int32 start_line = 1;
+ int32 start_line = 1;
// End line (inclusive)
- optional int32 end_line = 2;
- // If null it means range starts at the first offset of start line
- optional int32 start_offset = 3;
- // If null it means range ends at the last offset of end line
- optional int32 end_offset = 4;
+ int32 end_line = 2;
+ int32 start_offset = 3;
+ int32 end_offset = 4;
}
message Symbol {
- optional TextRange declaration = 1;
+ TextRange declaration = 1;
repeated TextRange reference = 2;
}
// Only FILE component has coverage information, and only executable lines should contains this information.
-// TODO rename it LineCoverage ?
-message Coverage {
- optional int32 line = 1;
+message LineCoverage {
+ int32 line = 1;
// Number of conditions to cover (if set, the value must be greater than 0)
- optional int32 conditions = 2;
+ int32 conditions = 2;
// Is the line has been touched by a unit test ? Returning false means that no test has touched this executable line.
- optional bool ut_hits = 3;
+ bool ut_hits = 3;
// Is the line has been touched by a integration test ? Returning false means that no test has touched this executable line.
- optional bool it_hits = 4;
+ bool it_hits = 4;
// Number of conditions covered by unit tests
- optional int32 ut_covered_conditions = 5;
+ int32 ut_covered_conditions = 5;
// Number of conditions covered by integration tests
- optional int32 it_covered_conditions = 6;
+ int32 it_covered_conditions = 6;
// Number of conditions covered by overall tests
- optional int32 overall_covered_conditions = 7;
+ int32 overall_covered_conditions = 7;
}
// Must be sorted by line and start offset
-// TODO rename it SyntaxHighlightingRule ?
-message SyntaxHighlighting {
- optional TextRange range = 1;
- optional HighlightingType type = 2;
+message SyntaxHighlightingRule {
+ TextRange range = 1;
+ HighlightingType type = 2;
+
+ enum HighlightingType {
+ UNSET = 0;
+ ANNOTATION = 1;
+ CONSTANT = 2;
+ COMMENT = 3;
+ CPP_DOC = 4;
+ STRUCTURED_COMMENT = 5;
+ KEYWORD = 6;
+ HIGHLIGHTING_STRING = 7;
+ KEYWORD_LIGHT = 8;
+ PREPROCESS_DIRECTIVE = 9;
+ }
}
message Test {
- optional string name = 1;
- optional TestStatus status = 2;
- optional int64 duration_in_ms = 3;
- optional string stacktrace = 4;
- optional string msg = 5;
+ string name = 1;
+ TestStatus status = 2;
+ int64 duration_in_ms = 3;
+ string stacktrace = 4;
+ string msg = 5;
+
+ enum TestStatus {
+ UNSET = 0;
+ OK = 1;
+ FAILURE = 2;
+ ERROR = 3;
+ SKIPPED = 4;
+ }
}
message CoverageDetail {
- optional string test_name = 1;
+ string test_name = 1;
repeated CoveredFile covered_file = 2;
message CoveredFile {
- optional int32 file_ref = 1;
+ int32 file_ref = 1;
repeated int32 covered_line = 2 [packed = true];
}
}
diff --git a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java
index ce2a6e86149..98b7c7ac71d 100644
--- a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java
+++ b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java
@@ -30,10 +30,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.core.util.CloseableIterator;
-import org.sonar.scanner.protocol.Constants;
-import org.sonar.scanner.protocol.output.ScannerReportReader;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
-import org.sonar.scanner.protocol.output.FileStructure;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
+import org.sonar.scanner.protocol.output.ScannerReport.Test.TestStatus;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -98,7 +97,6 @@ public class ScannerReportReaderTest {
public void read_issues() {
ScannerReportWriter writer = new ScannerReportWriter(dir);
ScannerReport.Issue issue = ScannerReport.Issue.newBuilder()
- .setLine(50)
.build();
writer.writeComponentIssues(1, asList(issue));
@@ -115,7 +113,7 @@ public class ScannerReportReaderTest {
public void read_measures() {
ScannerReportWriter writer = new ScannerReportWriter(dir);
ScannerReport.Measure.Builder measure = ScannerReport.Measure.newBuilder()
- .setStringValue("value_a");
+ .setStringValue(StringValue.newBuilder().setValue("value_a"));
writer.writeComponentMeasures(1, asList(measure.build()));
assertThat(underTest.readComponentMeasures(1)).hasSize(1);
@@ -211,20 +209,20 @@ public class ScannerReportReaderTest {
.setRef(1).build());
writer.writeComponentSyntaxHighlighting(1, asList(
- ScannerReport.SyntaxHighlighting.newBuilder()
+ ScannerReport.SyntaxHighlightingRule.newBuilder()
.setRange(ScannerReport.TextRange.newBuilder()
.setStartLine(1)
.setEndLine(10)
.build())
- .setType(Constants.HighlightingType.ANNOTATION)
+ .setType(HighlightingType.ANNOTATION)
.build()));
- try (CloseableIterator<ScannerReport.SyntaxHighlighting> it = underTest.readComponentSyntaxHighlighting(1)) {
- ScannerReport.SyntaxHighlighting syntaxHighlighting = it.next();
+ try (CloseableIterator<ScannerReport.SyntaxHighlightingRule> it = underTest.readComponentSyntaxHighlighting(1)) {
+ ScannerReport.SyntaxHighlightingRule syntaxHighlighting = it.next();
assertThat(syntaxHighlighting.getRange()).isNotNull();
assertThat(syntaxHighlighting.getRange().getStartLine()).isEqualTo(1);
assertThat(syntaxHighlighting.getRange().getEndLine()).isEqualTo(10);
- assertThat(syntaxHighlighting.getType()).isEqualTo(Constants.HighlightingType.ANNOTATION);
+ assertThat(syntaxHighlighting.getType()).isEqualTo(HighlightingType.ANNOTATION);
}
}
@@ -276,7 +274,7 @@ public class ScannerReportReaderTest {
.setRef(1).build());
writer.writeComponentCoverage(1, asList(
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(1)
.setUtHits(true)
@@ -285,7 +283,7 @@ public class ScannerReportReaderTest {
.setItCoveredConditions(1)
.setOverallCoveredConditions(1)
.build(),
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(2)
.setConditions(5)
.setUtHits(false)
@@ -296,8 +294,8 @@ public class ScannerReportReaderTest {
.build()));
underTest = new ScannerReportReader(dir);
- try (CloseableIterator<ScannerReport.Coverage> it = new ScannerReportReader(dir).readComponentCoverage(1)) {
- ScannerReport.Coverage coverage = it.next();
+ try (CloseableIterator<ScannerReport.LineCoverage> it = new ScannerReportReader(dir).readComponentCoverage(1)) {
+ ScannerReport.LineCoverage coverage = it.next();
assertThat(coverage.getLine()).isEqualTo(1);
assertThat(coverage.getConditions()).isEqualTo(1);
assertThat(coverage.getUtHits()).isTrue();
@@ -331,15 +329,15 @@ public class ScannerReportReaderTest {
.setDurationInMs(60_000)
.setStacktrace("stacktrace")
.setMsg("message")
- .setStatus(Constants.TestStatus.OK)
+ .setStatus(TestStatus.OK)
.build()));
try (InputStream inputStream = FileUtils.openInputStream(underTest.readTests(1))) {
- ScannerReport.Test testResult = ScannerReport.Test.PARSER.parseDelimitedFrom(inputStream);
+ ScannerReport.Test testResult = ScannerReport.Test.parser().parseDelimitedFrom(inputStream);
assertThat(testResult.getDurationInMs()).isEqualTo(60_000);
assertThat(testResult.getStacktrace()).isEqualTo("stacktrace");
assertThat(testResult.getMsg()).isEqualTo("message");
- assertThat(testResult.getStatus()).isEqualTo(Constants.TestStatus.OK);
+ assertThat(testResult.getStatus()).isEqualTo(TestStatus.OK);
}
}
@@ -360,7 +358,7 @@ public class ScannerReportReaderTest {
.build()));
try (InputStream inputStream = FileUtils.openInputStream(underTest.readCoverageDetails(1))) {
- ScannerReport.CoverageDetail coverageDetail = ScannerReport.CoverageDetail.PARSER.parseDelimitedFrom(inputStream);
+ ScannerReport.CoverageDetail coverageDetail = ScannerReport.CoverageDetail.parser().parseDelimitedFrom(inputStream);
assertThat(coverageDetail.getTestName()).isEqualTo("test-name");
assertThat(coverageDetail.getCoveredFile(0).getFileRef()).isEqualTo(2);
assertThat(coverageDetail.getCoveredFile(0).getCoveredLineList()).containsExactly(1, 2, 3, 5, 7);
diff --git a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java
index 9a08cd726ac..c55abc01c9b 100644
--- a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java
+++ b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java
@@ -28,9 +28,9 @@ import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonar.core.util.CloseableIterator;
import org.sonar.core.util.Protobuf;
-import org.sonar.scanner.protocol.Constants;
-import org.sonar.scanner.protocol.output.ScannerReportWriter;
-import org.sonar.scanner.protocol.output.FileStructure;
+import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType;
+import org.sonar.scanner.protocol.output.ScannerReport.Measure.DoubleValue;
+import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
@@ -64,7 +64,7 @@ public class ScannerReportWriterTest {
.setRootComponentRef(1);
underTest.writeMetadata(metadata.build());
- ScannerReport.Metadata read = Protobuf.read(underTest.getFileStructure().metadataFile(), ScannerReport.Metadata.PARSER);
+ ScannerReport.Metadata read = Protobuf.read(underTest.getFileStructure().metadataFile(), ScannerReport.Metadata.parser());
assertThat(read.getAnalysisDate()).isEqualTo(15000000L);
assertThat(read.getProjectKey()).isEqualTo("PROJECT_A");
assertThat(read.getRootComponentRef()).isEqualTo(1);
@@ -80,7 +80,7 @@ public class ScannerReportWriterTest {
.setRef(1)
.setLanguage("java")
.setPath("src/Foo.java")
- .setType(Constants.ComponentType.FILE)
+ .setType(ComponentType.FILE)
.setIsTest(false)
.addChildRef(5)
.addChildRef(42);
@@ -89,10 +89,10 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.COMPONENT, 1)).isTrue();
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.COMPONENT, 1);
assertThat(file).exists().isFile();
- ScannerReport.Component read = Protobuf.read(file, ScannerReport.Component.PARSER);
+ ScannerReport.Component read = Protobuf.read(file, ScannerReport.Component.parser());
assertThat(read.getRef()).isEqualTo(1);
assertThat(read.getChildRefList()).containsOnly(5, 42);
- assertThat(read.hasName()).isFalse();
+ assertThat(read.getName()).isEmpty();
assertThat(read.getIsTest()).isFalse();
}
@@ -103,7 +103,6 @@ public class ScannerReportWriterTest {
// write data
ScannerReport.Issue issue = ScannerReport.Issue.newBuilder()
- .setLine(50)
.setMsg("the message")
.build();
@@ -112,7 +111,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.ISSUES, 1)).isTrue();
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.ISSUES, 1);
assertThat(file).exists().isFile();
- try (CloseableIterator<ScannerReport.Issue> read = Protobuf.readStream(file, ScannerReport.Issue.PARSER)) {
+ try (CloseableIterator<ScannerReport.Issue> read = Protobuf.readStream(file, ScannerReport.Issue.parser())) {
assertThat(Iterators.size(read)).isEqualTo(1);
}
}
@@ -122,9 +121,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.MEASURES, 1)).isFalse();
ScannerReport.Measure measure = ScannerReport.Measure.newBuilder()
- .setStringValue("text-value")
- .setDoubleValue(2.5d)
- .setValueType(Constants.MeasureValueType.DOUBLE)
+ .setDoubleValue(DoubleValue.newBuilder().setValue(2.5d).setData("text-value"))
.build();
underTest.writeComponentMeasures(1, asList(measure));
@@ -132,7 +129,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.MEASURES, 1)).isTrue();
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.MEASURES, 1);
assertThat(file).exists().isFile();
- try (CloseableIterator<ScannerReport.Measure> read = Protobuf.readStream(file, ScannerReport.Measure.PARSER)) {
+ try (CloseableIterator<ScannerReport.Measure> read = Protobuf.readStream(file, ScannerReport.Measure.parser())) {
assertThat(Iterators.size(read)).isEqualTo(1);
}
}
@@ -155,7 +152,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.CHANGESETS, 1)).isTrue();
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.CHANGESETS, 1);
assertThat(file).exists().isFile();
- ScannerReport.Changesets read = Protobuf.read(file, ScannerReport.Changesets.PARSER);
+ ScannerReport.Changesets read = Protobuf.read(file, ScannerReport.Changesets.parser());
assertThat(read.getComponentRef()).isEqualTo(1);
assertThat(read.getChangesetCount()).isEqualTo(1);
assertThat(read.getChangesetList()).hasSize(1);
@@ -184,7 +181,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.DUPLICATIONS, 1)).isTrue();
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.DUPLICATIONS, 1);
assertThat(file).exists().isFile();
- try (CloseableIterator<ScannerReport.Duplication> duplications = Protobuf.readStream(file, ScannerReport.Duplication.PARSER)) {
+ try (CloseableIterator<ScannerReport.Duplication> duplications = Protobuf.readStream(file, ScannerReport.Duplication.parser())) {
ScannerReport.Duplication dup = duplications.next();
assertThat(dup.getOriginPosition()).isNotNull();
assertThat(dup.getDuplicateList()).hasSize(1);
@@ -244,7 +241,7 @@ public class ScannerReportWriterTest {
File file = underTest.getFileStructure().fileFor(FileStructure.Domain.SYMBOLS, 1);
assertThat(file).exists().isFile();
- try (CloseableIterator<ScannerReport.Symbol> read = Protobuf.readStream(file, ScannerReport.Symbol.PARSER)) {
+ try (CloseableIterator<ScannerReport.Symbol> read = Protobuf.readStream(file, ScannerReport.Symbol.parser())) {
assertThat(read).hasSize(1);
}
}
@@ -255,12 +252,12 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, 1)).isFalse();
underTest.writeComponentSyntaxHighlighting(1, asList(
- ScannerReport.SyntaxHighlighting.newBuilder()
+ ScannerReport.SyntaxHighlightingRule.newBuilder()
.setRange(ScannerReport.TextRange.newBuilder()
.setStartLine(1)
.setEndLine(1)
.build())
- .setType(Constants.HighlightingType.ANNOTATION)
+ .setType(HighlightingType.ANNOTATION)
.build()));
assertThat(underTest.hasComponentData(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, 1)).isTrue();
@@ -272,7 +269,7 @@ public class ScannerReportWriterTest {
assertThat(underTest.hasComponentData(FileStructure.Domain.COVERAGES, 1)).isFalse();
underTest.writeComponentCoverage(1, asList(
- ScannerReport.Coverage.newBuilder()
+ ScannerReport.LineCoverage.newBuilder()
.setLine(1)
.setConditions(1)
.setUtHits(true)