diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2022-09-15 13:49:31 -0500 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2022-09-16 20:03:14 +0000 |
commit | f51e80efde03d0af839d4991a31300f0f36088d3 (patch) | |
tree | 7c9f36e736e1ab83714c92512df0790242e4ca14 | |
parent | 227f5d3bfc797c8ecc7ebe7e283af3b68522c1ad (diff) | |
download | sonarqube-f51e80efde03d0af839d4991a31300f0f36088d3.tar.gz sonarqube-f51e80efde03d0af839d4991a31300f0f36088d3.zip |
SONAR-17287 Fix quality issues and adopt changes to API
7 files changed, 119 insertions, 83 deletions
diff --git a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/MultilineIssuesSensorTest.java b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/MultilineIssuesSensorTest.java index 449ed220f5b..916ff200329 100644 --- a/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/MultilineIssuesSensorTest.java +++ b/plugins/sonar-xoo-plugin/src/test/java/org/sonar/xoo/rule/MultilineIssuesSensorTest.java @@ -35,8 +35,9 @@ import org.sonar.api.batch.rule.ActiveRule; import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.sensor.internal.SensorContextTester; import org.sonar.api.batch.sensor.issue.Issue; +import org.sonar.api.batch.sensor.issue.NewIssue; +import org.sonar.api.batch.sensor.issue.NewIssue.FlowType; import org.sonar.api.batch.sensor.issue.internal.DefaultIssueFlow; -import org.sonar.api.batch.sensor.issue.internal.DefaultIssueFlow.Type; import org.sonar.api.internal.apachecommons.io.IOUtils; import org.sonar.xoo.Xoo; @@ -77,7 +78,7 @@ public class MultilineIssuesSensorTest { List<DefaultIssueFlow> defaultIssueFlows = flows.stream().map(DefaultIssueFlow.class::cast).collect(Collectors.toList()); - assertThat(defaultIssueFlows).extracting(DefaultIssueFlow::getType).containsExactlyInAnyOrder(Type.DATA, Type.EXECUTION); + assertThat(defaultIssueFlows).extracting(DefaultIssueFlow::type).containsExactlyInAnyOrder(FlowType.DATA, FlowType.EXECUTION); } private DefaultInputFile newTestFile(String content) { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TrackerRawInputFactoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TrackerRawInputFactoryTest.java index 3a598f67fba..44bb1724b0c 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TrackerRawInputFactoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/TrackerRawInputFactoryTest.java @@ -48,9 +48,9 @@ import org.sonar.core.issue.tracking.Input; import org.sonar.db.protobuf.DbIssues; import org.sonar.scanner.protocol.Constants; import org.sonar.scanner.protocol.output.ScannerReport; +import org.sonar.scanner.protocol.output.ScannerReport.FlowType; import org.sonar.scanner.protocol.output.ScannerReport.IssueType; import org.sonar.server.rule.CommonRuleKeys; -import org.sonarqube.ws.Common; import static java.util.Arrays.asList; import static java.util.Collections.emptyMap; @@ -167,11 +167,14 @@ public class TrackerRawInputFactoryTest { .setRuleRepository(ruleKey.repository()) .setRuleKey(ruleKey.rule()) .addFlow(ScannerReport.Flow.newBuilder() - .setType(ScannerReport.FlowType.DATA) + .setType(FlowType.DATA) .setDescription("flow1") .addLocation(ScannerReport.IssueLocation.newBuilder().setMsg("loc1").setComponentRef(1).build()) .addLocation(ScannerReport.IssueLocation.newBuilder().setMsg("loc2").setComponentRef(1).build())) .addFlow(ScannerReport.Flow.newBuilder() + .setType(FlowType.EXECUTION) + .addLocation(ScannerReport.IssueLocation.newBuilder().setTextRange(newTextRange(2)).setComponentRef(1).build())) + .addFlow(ScannerReport.Flow.newBuilder() .addLocation(ScannerReport.IssueLocation.newBuilder().setTextRange(newTextRange(2)).setComponentRef(1).build())) .build(); reportReader.putIssues(FILE.getReportAttributes().getRef(), singletonList(reportIssue)); @@ -179,14 +182,18 @@ public class TrackerRawInputFactoryTest { Collection<DefaultIssue> issues = input.getIssues(); DbIssues.Locations locations = Iterators.getOnlyElement(issues.iterator()).getLocations(); - assertThat(locations.getFlowCount()).isEqualTo(2); + assertThat(locations.getFlowCount()).isEqualTo(3); assertThat(locations.getFlow(0).getDescription()).isEqualTo("flow1"); assertThat(locations.getFlow(0).getType()).isEqualTo(DbIssues.FlowType.DATA); assertThat(locations.getFlow(0).getLocationList()).hasSize(2); assertThat(locations.getFlow(1).hasDescription()).isFalse(); - assertThat(locations.getFlow(1).hasType()).isFalse(); + assertThat(locations.getFlow(1).getType()).isEqualTo(DbIssues.FlowType.EXECUTION); assertThat(locations.getFlow(1).getLocationList()).hasSize(1); + + assertThat(locations.getFlow(2).hasDescription()).isFalse(); + assertThat(locations.getFlow(2).hasType()).isFalse(); + assertThat(locations.getFlow(2).getLocationList()).hasSize(1); } @Test @@ -291,6 +298,7 @@ public class TrackerRawInputFactoryTest { .setSeverity(Constants.Severity.BLOCKER) .setEffort(20L) .setType(issueType) + .addFlow(ScannerReport.Flow.newBuilder().setType(FlowType.DATA).addLocation(ScannerReport.IssueLocation.newBuilder().build()).build()) .build(); reportReader.putExternalIssues(FILE.getReportAttributes().getRef(), asList(reportIssue)); Input<DefaultIssue> input = underTest.create(FILE); @@ -307,6 +315,13 @@ public class TrackerRawInputFactoryTest { assertThat(issue.message()).isEqualTo("the message"); assertThat(issue.type()).isEqualTo(expectedRuleType); + DbIssues.Locations locations = Iterators.getOnlyElement(issues.iterator()).getLocations(); + assertThat(locations.getFlowCount()).isEqualTo(1); + assertThat(locations.getFlow(0).getType()).isEqualTo(DbIssues.FlowType.DATA); + assertThat(locations.getFlow(0).getLocationList()).hasSize(1); + + + // fields set by compute engine assertThat(issue.checksum()).isEqualTo(input.getLineHashSequence().getHashForLine(2)); assertThat(issue.tags()).isEmpty(); diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java index 84c1849a4f2..1b89f229f3a 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/hotspot/ws/ShowActionTest.java @@ -53,8 +53,10 @@ import org.sonar.db.DbTester; import org.sonar.db.component.BranchType; import org.sonar.db.component.ComponentDto; import org.sonar.db.issue.IssueDto; -import org.sonar.db.protobuf.DbCommons; +import org.sonar.db.protobuf.DbCommons.TextRange; import org.sonar.db.protobuf.DbIssues; +import org.sonar.db.protobuf.DbIssues.Flow; +import org.sonar.db.protobuf.DbIssues.FlowType; import org.sonar.db.rule.RuleDescriptionSectionContextDto; import org.sonar.db.rule.RuleDescriptionSectionDto; import org.sonar.db.rule.RuleDto; @@ -205,49 +207,31 @@ public class ShowActionTest { ComponentDto file = dbTester.components().insertComponent(newFileDto(project)); ComponentDto anotherFile = dbTester.components().insertComponent(newFileDto(project)); DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder() - .addFlow(DbIssues.Flow.newBuilder() + .addFlow(Flow.newBuilder() .setDescription("FLOW DESCRIPTION") - .setType(DbIssues.FlowType.DATA) + .setType(FlowType.DATA) .addAllLocation(Arrays.asList( DbIssues.Location.newBuilder() .setComponentId(file.uuid()) .setMsg("FLOW MESSAGE") - .setTextRange(DbCommons.TextRange.newBuilder() - .setStartLine(1) - .setEndLine(1) - .setStartOffset(0) - .setEndOffset(12) - .build()) - .build(), + .setTextRange(textRange(1, 1, 0, 12)).build(), DbIssues.Location.newBuilder() .setComponentId(anotherFile.uuid()) .setMsg("ANOTHER FLOW MESSAGE") - .setTextRange(DbCommons.TextRange.newBuilder() - .setStartLine(1) - .setEndLine(1) - .setStartOffset(0) - .setEndOffset(12) - .build()) - .build(), + .setTextRange(textRange(1, 1, 0, 12)).build(), DbIssues.Location.newBuilder() .setMsg("FLOW MESSAGE WITHOUT FILE UUID") - .setTextRange(DbCommons.TextRange.newBuilder() - .setStartLine(1) - .setEndLine(1) - .setStartOffset(0) - .setEndOffset(12) - .build()) - .build()))) - .addFlow(DbIssues.Flow.newBuilder() - .addAllLocation(Arrays.asList( - DbIssues.Location.newBuilder() - .setComponentId(file.uuid()) - .setTextRange(DbCommons.TextRange.newBuilder() - .setStartLine(1) - .setStartOffset(0) - .setEndOffset(12) - .build()) - .build()))); + .setTextRange(textRange(1, 1, 0, 12)).build()))) + .addFlow(Flow.newBuilder() + .addLocation(DbIssues.Location.newBuilder() + .setComponentId(file.uuid()) + .setTextRange(TextRange.newBuilder().setStartLine(1).setStartOffset(0).setEndOffset(12).build()) + .build())) + .addFlow(Flow.newBuilder() + .setType(FlowType.EXECUTION) + .addLocation(DbIssues.Location.newBuilder() + .setComponentId(file.uuid()) + .build())); RuleDto rule = newRule(SECURITY_HOTSPOT); var hotspot = dbTester.issues().insertHotspot(rule, project, file, i -> i.setLocations(locations.build())); mockChangelogAndCommentsFormattingContext(); @@ -258,7 +242,7 @@ public class ShowActionTest { .executeProtobuf(Hotspots.ShowWsResponse.class); assertThat(response.getKey()).isEqualTo(hotspot.getKey()); - assertThat(response.getFlowsCount()).isEqualTo(2); + assertThat(response.getFlowsCount()).isEqualTo(3); assertThat(response.getFlows(0).getDescription()).isEqualTo("FLOW DESCRIPTION"); assertThat(response.getFlows(0).getType()).isEqualTo(Common.FlowType.DATA); assertThat(response.getFlows(0).getLocationsList()) @@ -270,6 +254,8 @@ public class ShowActionTest { assertThat(response.getFlows(1).getDescription()).isEmpty(); assertThat(response.getFlows(1).hasType()).isFalse(); + + assertThat(response.getFlows(2).getType()).isEqualTo(Common.FlowType.EXECUTION); } @Test @@ -674,14 +660,7 @@ public class ShowActionTest { ComponentDto file = dbTester.components().insertComponent(newFileDto(project)); RuleDto rule = newRule(SECURITY_HOTSPOT); IssueDto hotspot = dbTester.issues().insertHotspot(rule, project, file, - t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder() - .setStartLine(startLine) - .setEndLine(endLine) - .setStartOffset(startOffset) - .setEndOffset(endOffset) - .build()) - .build())); + t -> t.setLocations(DbIssues.Locations.newBuilder().setTextRange(textRange(startLine, endLine, startOffset, endOffset)).build())); mockChangelogAndCommentsFormattingContext(); Hotspots.ShowWsResponse response = newRequest(hotspot) @@ -857,7 +836,7 @@ public class ShowActionTest { RuleDto rule = newRule(SECURITY_HOTSPOT); IssueDto hotspot = dbTester.issues().insertHotspot(rule, project, file, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); mockChangelogAndCommentsFormattingContext(); @@ -882,7 +861,7 @@ public class ShowActionTest { RuleDto rule = newRule(SECURITY_HOTSPOT, t -> t.setSecurityStandards(standards)); IssueDto hotspot = dbTester.issues().insertHotspot(rule, project, file, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); mockChangelogAndCommentsFormattingContext(); @@ -917,7 +896,7 @@ public class ShowActionTest { RuleDto rule = newRule(SECURITY_HOTSPOT); IssueDto hotspot = dbTester.issues().insertHotspot(rule, project, project, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); mockChangelogAndCommentsFormattingContext(); @@ -937,7 +916,7 @@ public class ShowActionTest { RuleDto rule = newRule(SECURITY_HOTSPOT); IssueDto hotspot = dbTester.issues().insertHotspot(rule, branch, file, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); mockChangelogAndCommentsFormattingContext(); @@ -958,7 +937,7 @@ public class ShowActionTest { RuleDto rule = newRule(SECURITY_HOTSPOT); IssueDto hotspot = dbTester.issues().insertHotspot(rule, pullRequest, file, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); mockChangelogAndCommentsFormattingContext(); @@ -977,7 +956,7 @@ public class ShowActionTest { ComponentDto file = dbTester.components().insertComponent(newFileDto(project)); IssueDto hotspot = dbTester.issues().insertHotspot(rule, project, file, t -> t.setLocations(DbIssues.Locations.newBuilder() - .setTextRange(DbCommons.TextRange.newBuilder().build()) + .setTextRange(TextRange.newBuilder().build()) .build())); List<Common.Changelog> changelog = IntStream.range(0, 1 + new Random().nextInt(12)) .mapToObj(i -> Common.Changelog.newBuilder().setUser("u" + i).build()) @@ -1181,6 +1160,15 @@ public class ShowActionTest { } } + private static TextRange textRange(int startLine, int endLine, int startOffset, int endOffset) { + return TextRange.newBuilder() + .setStartLine(startLine) + .setEndLine(endLine) + .setStartOffset(startOffset) + .setEndOffset(endOffset) + .build(); + } + private TestRequest newRequest(IssueDto hotspot) { return actionTester.newRequest() .setParam("hotspot", hotspot.getKey()); diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/AbstractDefaultIssue.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/AbstractDefaultIssue.java index 2fa3235e7c5..cc77d90a02f 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/AbstractDefaultIssue.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/AbstractDefaultIssue.java @@ -34,7 +34,7 @@ import org.sonar.api.batch.sensor.internal.DefaultStorable; import org.sonar.api.batch.sensor.internal.SensorStorage; import org.sonar.api.batch.sensor.issue.Issue.Flow; import org.sonar.api.batch.sensor.issue.IssueLocation; -import org.sonar.api.batch.sensor.issue.NewIssue; +import org.sonar.api.batch.sensor.issue.NewIssue.FlowType; import org.sonar.api.batch.sensor.issue.NewIssueLocation; import org.sonar.api.utils.PathUtils; @@ -72,25 +72,21 @@ public abstract class AbstractDefaultIssue<T extends AbstractDefaultIssue> exten } public T addLocation(NewIssueLocation secondaryLocation) { - flows.add(new DefaultIssueFlow(List.of(rewriteLocation((DefaultIssueLocation) secondaryLocation)), DefaultIssueFlow.Type.UNDEFINED, null)); + flows.add(new DefaultIssueFlow(List.of(rewriteLocation((DefaultIssueLocation) secondaryLocation)), FlowType.UNDEFINED, null)); return (T) this; } public T addFlow(Iterable<NewIssueLocation> locations) { - return addFlow(locations, DefaultIssueFlow.Type.UNDEFINED, null); + return addFlow(locations, FlowType.UNDEFINED, null); } - public T addFlow(Iterable<NewIssueLocation> flowLocations, NewIssue.FlowType flowType, @Nullable String flowDescription) { - return addFlow(flowLocations, DefaultIssueFlow.Type.valueOf(flowType.name()), flowDescription); - } - - private T addFlow(Iterable<NewIssueLocation> locations, DefaultIssueFlow.Type type, @Nullable String description) { + public T addFlow(Iterable<NewIssueLocation> flowLocations, FlowType type, @Nullable String flowDescription) { checkArgument(type != null, "Type can't be null"); List<IssueLocation> flowAsList = new ArrayList<>(); - for (NewIssueLocation issueLocation : locations) { + for (NewIssueLocation issueLocation : flowLocations) { flowAsList.add(rewriteLocation((DefaultIssueLocation) issueLocation)); } - flows.add(new DefaultIssueFlow(flowAsList, type, description)); + flows.add(new DefaultIssueFlow(flowAsList, type, flowDescription)); return (T) this; } diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueFlow.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueFlow.java index e4aabcc85da..76a47751c51 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueFlow.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueFlow.java @@ -24,14 +24,15 @@ import javax.annotation.CheckForNull; import javax.annotation.Nullable; import org.sonar.api.batch.sensor.issue.Issue; import org.sonar.api.batch.sensor.issue.IssueLocation; +import org.sonar.api.batch.sensor.issue.NewIssue.FlowType; public class DefaultIssueFlow implements Issue.Flow { private final List<IssueLocation> locations; - private final Type type; + private final FlowType type; @Nullable private final String description; - public DefaultIssueFlow(List<IssueLocation> locations, Type type, @Nullable String description) { + public DefaultIssueFlow(List<IssueLocation> locations, FlowType type, @Nullable String description) { this.locations = locations; this.type = type; this.description = description; @@ -42,16 +43,14 @@ public class DefaultIssueFlow implements Issue.Flow { return locations; } - public Type getType() { + @Override + public FlowType type() { return type; } @CheckForNull - public String getDescription() { + @Override + public String description() { return description; } - - public enum Type { - UNDEFINED, DATA, EXECUTION; - } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java index 515380b0e25..1f874295e48 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java @@ -37,10 +37,14 @@ import org.sonar.api.batch.fs.internal.DefaultTextRange; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.batch.rule.Severity; import org.sonar.api.batch.sensor.internal.SensorStorage; +import org.sonar.api.batch.sensor.issue.Issue; +import org.sonar.api.batch.sensor.issue.Issue.Flow; import org.sonar.api.batch.sensor.issue.NewIssue; +import org.sonar.api.batch.sensor.issue.NewIssue.FlowType; import org.sonar.api.rule.RuleKey; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.tuple; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -94,16 +98,35 @@ public class DefaultIssueTest { DefaultIssue issue = new DefaultIssue(project, storage) .at(new DefaultIssueLocation().on(inputFile)) - .addFlow(List.of(new DefaultIssueLocation().message("loc1").on(inputFile)), NewIssue.FlowType.DATA, "desc") + .addFlow(List.of(new DefaultIssueLocation().message("loc1").on(inputFile)), FlowType.DATA, "desc") .addFlow(List.of(new DefaultIssueLocation().message("loc1").on(inputFile).at(range1), new DefaultIssueLocation().message("loc1").on(inputFile).at(range2))) .forRule(RULE_KEY); - assertThat(issue.flows) - .extracting(DefaultIssueFlow::getType, DefaultIssueFlow::getDescription) - .containsExactly(tuple(DefaultIssueFlow.Type.DATA, "desc"), tuple(DefaultIssueFlow.Type.UNDEFINED, null)); + assertThat(issue.flows()) + .extracting(Flow::type, Flow::description) + .containsExactly(tuple(FlowType.DATA, "desc"), tuple(FlowType.UNDEFINED, null)); - assertThat(issue.flows.get(0).locations()).hasSize(1); - assertThat(issue.flows.get(1).locations()).hasSize(2); + assertThat(issue.flows().get(0).locations()).hasSize(1); + assertThat(issue.flows().get(1).locations()).hasSize(2); + } + + @Test + public void build_issue_with_secondary_locations() { + TextRange range1 = new DefaultTextRange(new DefaultTextPointer(1, 1), new DefaultTextPointer(1, 2)); + TextRange range2 = new DefaultTextRange(new DefaultTextPointer(2, 1), new DefaultTextPointer(2, 2)); + + DefaultIssue issue = new DefaultIssue(project, storage) + .at(new DefaultIssueLocation().on(inputFile)) + .addLocation(new DefaultIssueLocation().on(inputFile).at(range1).message("loc1")) + .addLocation(new DefaultIssueLocation().on(inputFile).at(range2).message("loc2")) + .forRule(RULE_KEY); + + assertThat(issue.flows()) + .extracting(Flow::type, Flow::description) + .containsExactly(tuple(FlowType.UNDEFINED, null), tuple(FlowType.UNDEFINED, null)); + + assertThat(issue.flows().get(0).locations()).hasSize(1); + assertThat(issue.flows().get(1).locations()).hasSize(1); } @Test @@ -178,6 +201,19 @@ public class DefaultIssueTest { } @Test + public void at_fails_if_called_twice() { + DefaultIssueLocation loc = new DefaultIssueLocation().on(inputFile); + DefaultIssue issue = new DefaultIssue(project, storage).at(loc); + assertThatThrownBy(() -> issue.at(loc)).isInstanceOf(IllegalStateException.class); + } + + @Test + public void at_fails_if_location_is_null() { + DefaultIssue issue = new DefaultIssue(project, storage); + assertThatThrownBy(() -> issue.at(null)).isInstanceOf(IllegalArgumentException.class); + } + + @Test public void default_issue_has_no_quickfix() { DefaultIssue issue = new DefaultIssue(project, storage); diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java index 965600c0a22..8688c6a3ebe 100644 --- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java +++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java @@ -32,6 +32,7 @@ import org.sonar.api.batch.rule.ActiveRules; import org.sonar.api.batch.sensor.issue.ExternalIssue; import org.sonar.api.batch.sensor.issue.Issue; import org.sonar.api.batch.sensor.issue.Issue.Flow; +import org.sonar.api.batch.sensor.issue.NewIssue.FlowType; import org.sonar.api.batch.sensor.issue.internal.DefaultIssueFlow; import org.sonar.scanner.protocol.Constants.Severity; import org.sonar.scanner.protocol.output.ScannerReport; @@ -181,15 +182,15 @@ public class IssuePublisher { } flowBuilder.addLocation(locationBuilder.build()); } - if (flow.getDescription() != null) { - flowBuilder.setDescription(flow.getDescription()); + if (flow.description() != null) { + flowBuilder.setDescription(flow.description()); } - flowBuilder.setType(toProtobufFlowType(flow.getType())); + flowBuilder.setType(toProtobufFlowType(flow.type())); consumer.accept(flowBuilder.build()); } } - private static ScannerReport.FlowType toProtobufFlowType(DefaultIssueFlow.Type flowType) { + private static ScannerReport.FlowType toProtobufFlowType(FlowType flowType) { switch (flowType) { case EXECUTION: return ScannerReport.FlowType.EXECUTION; |