Sfoglia il codice sorgente

SONAR-7414 Change Sensor API to update Issue#effortToFix to Issue#gap

tags/5.5-M11
Julien HENRY 8 anni fa
parent
commit
712c66d95a
23 ha cambiato i file con 96 aggiunte e 63 eliminazioni
  1. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java
  2. 2
    1
      server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java
  3. 1
    1
      sonar-batch-protocol/src/main/protobuf/batch_report.proto
  4. 8
    6
      sonar-batch/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java
  5. 1
    1
      sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java
  6. 8
    11
      sonar-batch/src/main/java/org/sonar/batch/issue/IssueTransformer.java
  7. 3
    3
      sonar-batch/src/main/java/org/sonar/batch/issue/ModuleIssues.java
  8. 1
    1
      sonar-batch/src/main/java/org/sonar/batch/issue/TrackedIssueAdapter.java
  9. 5
    5
      sonar-batch/src/main/java/org/sonar/batch/issue/tracking/TrackedIssue.java
  10. 1
    1
      sonar-batch/src/main/java/org/sonar/batch/postjob/DefaultPostJobContext.java
  11. 1
    1
      sonar-batch/src/main/java/org/sonar/batch/scan/report/JSONReport.java
  12. 1
    1
      sonar-batch/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java
  13. 1
    1
      sonar-batch/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java
  14. 1
    1
      sonar-batch/src/test/java/org/sonar/batch/issue/TrackedIssueAdapterTest.java
  15. 13
    15
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java
  16. 2
    2
      sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java
  17. 1
    1
      sonar-batch/src/test/java/org/sonar/batch/postjob/DefaultPostJobContextTest.java
  18. 1
    1
      sonar-batch/src/test/java/org/sonar/batch/scan/report/JSONReportTest.java
  19. 9
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java
  20. 8
    0
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/NewIssue.java
  21. 14
    4
      sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java
  22. 10
    2
      sonar-plugin-api/src/main/java/org/sonar/api/scan/issue/filter/FilterableIssue.java
  23. 2
    2
      sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/computation/issue/TrackerRawInputFactory.java Vedi File

@@ -125,8 +125,8 @@ public class TrackerRawInputFactory {
if (reportIssue.hasSeverity()) {
issue.setSeverity(reportIssue.getSeverity().name());
}
if (reportIssue.hasEffortToFix()) {
issue.setGap(reportIssue.getEffortToFix());
if (reportIssue.hasGap()) {
issue.setGap(reportIssue.getGap());
}
DbIssues.Locations.Builder dbLocationsBuilder = DbIssues.Locations.newBuilder();
if (reportIssue.hasTextRange()) {

+ 2
- 1
server/sonar-server/src/test/java/org/sonar/server/computation/issue/TrackerRawInputFactoryTest.java Vedi File

@@ -93,7 +93,7 @@ public class TrackerRawInputFactoryTest {
.setRuleRepository("java")
.setRuleKey("S001")
.setSeverity(Constants.Severity.BLOCKER)
.setEffortToFix(3.14)
.setGap(3.14)
.build();
reportReader.putIssues(FILE.getReportAttributes().getRef(), asList(reportIssue));
Input<DefaultIssue> input = underTest.create(FILE);
@@ -107,6 +107,7 @@ public class TrackerRawInputFactoryTest {
assertThat(issue.severity()).isEqualTo(Severity.BLOCKER);
assertThat(issue.line()).isEqualTo(2);
assertThat(issue.effortToFix()).isEqualTo(3.14);
assertThat(issue.gap()).isEqualTo(3.14);
assertThat(issue.message()).isEqualTo("the message");

// fields set by compute engine

+ 1
- 1
sonar-batch-protocol/src/main/protobuf/batch_report.proto Vedi File

@@ -100,7 +100,7 @@ message Issue {
optional int32 line = 3;
optional string msg = 4;
optional Severity severity = 5;
optional double effort_to_fix = 6;
optional double gap = 6;
// 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;

+ 8
- 6
sonar-batch/src/main/java/org/sonar/batch/issue/DefaultFilterableIssue.java Vedi File

@@ -19,16 +19,13 @@
*/
package org.sonar.batch.issue;

import java.util.Date;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

import org.sonar.api.resources.Project;
import org.sonar.api.rule.RuleKey;

import java.util.Date;

import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.api.scan.issue.filter.FilterableIssue;
import org.sonar.batch.protocol.output.BatchReport.Issue;

public class DefaultFilterableIssue implements FilterableIssue {
private final Issue rawIssue;
@@ -67,9 +64,14 @@ public class DefaultFilterableIssue implements FilterableIssue {
return rawIssue.hasLine() ? rawIssue.getLine() : null;
}

@Override
public Double gap() {
return rawIssue.hasGap() ? rawIssue.getGap() : null;
}

@Override
public Double effortToFix() {
return rawIssue.hasEffortToFix() ? rawIssue.getEffortToFix() : null;
return gap();
}

@Override

+ 1
- 1
sonar-batch/src/main/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilter.java Vedi File

@@ -88,7 +88,7 @@ class DeprecatedIssueAdapterForFilter implements Issue {

@Override
public Double gap() {
return rawIssue.hasEffortToFix() ? rawIssue.getEffortToFix() : null;
return rawIssue.hasGap() ? rawIssue.getGap() : null;
}

@Override

+ 8
- 11
sonar-batch/src/main/java/org/sonar/batch/issue/IssueTransformer.java Vedi File

@@ -19,26 +19,23 @@
*/
package org.sonar.batch.issue;

import org.sonar.batch.issue.tracking.SourceHashHolder;

import org.sonar.batch.protocol.input.BatchInput.ServerIssue;
import com.google.common.base.Preconditions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import javax.annotation.Nullable;
import org.sonar.api.issue.Issue;
import org.sonar.api.rule.RuleKey;
import org.sonar.batch.index.BatchComponent;
import org.sonar.batch.issue.tracking.SourceHashHolder;
import org.sonar.batch.issue.tracking.TrackedIssue;
import org.sonar.batch.protocol.input.BatchInput.ServerIssue;
import org.sonar.batch.protocol.output.BatchReport;
import org.sonar.batch.protocol.output.BatchReport.TextRange;
import org.sonar.core.component.ComponentKeys;
import org.sonar.core.util.Uuids;

import javax.annotation.Nullable;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

public class IssueTransformer {
private IssueTransformer() {
// static only
@@ -96,7 +93,7 @@ public class IssueTransformer {
issue.setKey(Uuids.createFast());
issue.setComponentKey(component.key());
issue.setRuleKey(ruleKey);
issue.setEffortToFix(rawIssue.hasEffortToFix() ? rawIssue.getEffortToFix() : null);
issue.setGap(rawIssue.hasGap() ? rawIssue.getGap() : null);
issue.setSeverity(rawIssue.getSeverity().name());
issue.setMessage(rawIssue.hasMsg() ? rawIssue.getMsg() : null);
issue.setResolution(null);

+ 3
- 3
sonar-batch/src/main/java/org/sonar/batch/issue/ModuleIssues.java Vedi File

@@ -91,9 +91,9 @@ public class ModuleIssues {
builder.setLine(primaryTextRange.start().line());
builder.setTextRange(toProtobufTextRange(primaryTextRange));
}
Double effortToFix = issue.effortToFix();
if (effortToFix != null) {
builder.setEffortToFix(effortToFix);
Double gap = issue.gap();
if (gap != null) {
builder.setGap(gap);
}
applyFlows(issue);
BatchReport.Issue rawIssue = builder.build();

+ 1
- 1
sonar-batch/src/main/java/org/sonar/batch/issue/TrackedIssueAdapter.java Vedi File

@@ -79,7 +79,7 @@ public class TrackedIssueAdapter implements Issue {

@Override
public Double gap() {
return issue.effortToFix();
return issue.gap();
}

@Override

+ 5
- 5
sonar-batch/src/main/java/org/sonar/batch/issue/tracking/TrackedIssue.java Vedi File

@@ -39,7 +39,7 @@ public class TrackedIssue implements Trackable, Serializable {
private Integer startLineOffset;
private Integer endLine;
private Integer endLineOffset;
private Double effortToFix;
private Double gap;
private boolean isNew;
private Date creationDate;
private String resolution;
@@ -186,8 +186,8 @@ public class TrackedIssue implements Trackable, Serializable {
return severity;
}

public Double effortToFix() {
return effortToFix;
public Double gap() {
return gap;
}

public Date getCreationDate() {
@@ -222,8 +222,8 @@ public class TrackedIssue implements Trackable, Serializable {
return this;
}

public TrackedIssue setEffortToFix(Double effortToFix) {
this.effortToFix = effortToFix;
public TrackedIssue setGap(Double gap) {
this.gap = gap;
return this;
}


+ 1
- 1
sonar-batch/src/main/java/org/sonar/batch/postjob/DefaultPostJobContext.java Vedi File

@@ -108,7 +108,7 @@ public class DefaultPostJobContext implements PostJobContext {

@Override
public Double effortToFix() {
return wrapped.effortToFix();
return wrapped.gap();
}

@Override

+ 1
- 1
sonar-batch/src/main/java/org/sonar/batch/scan/report/JSONReport.java Vedi File

@@ -148,7 +148,7 @@ public class JSONReport implements Reporter {
.prop("resolution", issue.resolution())
.prop("isNew", issue.isNew())
.prop("assignee", issue.assignee())
.prop("effortToFix", issue.effortToFix())
.prop("effortToFix", issue.gap())
.propDateTime("creationDate", issue.creationDate());
if (!StringUtils.isEmpty(issue.reporter())) {
logins.add(issue.reporter());

+ 1
- 1
sonar-batch/src/test/java/org/sonar/batch/issue/DefaultFilterableIssueTest.java Vedi File

@@ -47,7 +47,7 @@ public class DefaultFilterableIssueTest {
private Issue createIssue() {
Issue.Builder builder = Issue.newBuilder();

builder.setEffortToFix(3.0);
builder.setGap(3.0);
builder.setLine(30);
builder.setSeverity(Severity.MAJOR);
return builder.build();

+ 1
- 1
sonar-batch/src/test/java/org/sonar/batch/issue/DeprecatedIssueAdapterForFilterTest.java Vedi File

@@ -52,7 +52,7 @@ public class DeprecatedIssueAdapterForFilterTest {
.setSeverity(Severity.BLOCKER)
.setMsg("msg")
.setLine(1)
.setEffortToFix(2.0)
.setGap(2.0)
.build(),
COMPONENT_KEY);


+ 1
- 1
sonar-batch/src/test/java/org/sonar/batch/issue/TrackedIssueAdapterTest.java Vedi File

@@ -39,7 +39,7 @@ public class TrackedIssueAdapterTest {
.setSeverity("MAJOR")
.setMessage("msg")
.setStartLine(1)
.setEffortToFix(2.0)
.setGap(2.0)
.setStatus("RESOLVED")
.setResolution("FIXED")
.setReporter("toto")

+ 13
- 15
sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/ProjectBuilderMediumTest.java Vedi File

@@ -19,9 +19,11 @@
*/
package org.sonar.batch.mediumtest.fs;

import org.sonar.api.utils.MessageException;

import com.google.common.collect.ImmutableMap;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
@@ -29,24 +31,20 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.junit.rules.TemporaryFolder;
import org.sonar.api.utils.MessageException;
import org.sonar.batch.mediumtest.BatchMediumTester;
import org.sonar.batch.mediumtest.TaskResult;
import org.sonar.batch.protocol.output.BatchReport.Issue;
import org.sonar.xoo.XooPlugin;
import org.sonar.xoo.rule.XooRulesDefinition;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

public class ProjectBuilderMediumTest {

@Rule
public TemporaryFolder temp = new TemporaryFolder();
@Rule
public ExpectedException exception = ExpectedException.none();

@@ -71,7 +69,7 @@ public class ProjectBuilderMediumTest {
@Test
public void testProjectBuilder() throws IOException {
File baseDir = prepareProject();
TaskResult result = tester.newTask()
.properties(ImmutableMap.<String, String>builder()
.put("sonar.task", "scan")
@@ -92,18 +90,18 @@ public class ProjectBuilderMediumTest {
if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
assertThat(issue.hasEffortToFix()).isFalse();
assertThat(issue.hasGap()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();

}
@Test
// SONAR-6976
public void testProjectBuilderWithNewLine() throws IOException {
File baseDir = prepareProject();
exception.expect(MessageException.class);
exception.expectMessage("is not a valid branch name");
tester.newTask()
@@ -147,12 +145,12 @@ public class ProjectBuilderMediumTest {
if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
assertThat(issue.hasEffortToFix()).isFalse();
assertThat(issue.hasGap()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();
}
private File prepareProject() throws IOException {
File baseDir = temp.getRoot();
File module1Dir = new File(baseDir, "module1");
@@ -163,7 +161,7 @@ public class ProjectBuilderMediumTest {

File xooFile = new File(srcDir, "sample.xoo");
FileUtils.write(xooFile, "1\n2\n3\n4\n5\n6\n7\n8\n9\n10");
return baseDir;
}


+ 2
- 2
sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java Vedi File

@@ -106,7 +106,7 @@ public class IssuesMediumTest {
.start();

List<Issue> issues = result.issuesFor(result.inputFile("xources/hello/HelloJava.xoo"));
assertThat(issues).hasSize(8 /* lines */+ 1 /* file */);
assertThat(issues).hasSize(8 /* lines */ + 1 /* file */);
}

@Test
@@ -170,7 +170,7 @@ public class IssuesMediumTest {
if (issue.getLine() == 1) {
foundIssueAtLine1 = true;
assertThat(issue.getMsg()).isEqualTo("This issue is generated on each line");
assertThat(issue.hasEffortToFix()).isFalse();
assertThat(issue.hasGap()).isFalse();
}
}
assertThat(foundIssueAtLine1).isTrue();

+ 1
- 1
sonar-batch/src/test/java/org/sonar/batch/postjob/DefaultPostJobContextTest.java Vedi File

@@ -61,7 +61,7 @@ public class DefaultPostJobContextTest {

TrackedIssue defaultIssue = new TrackedIssue();
defaultIssue.setComponentKey("foo:src/Foo.php");
defaultIssue.setEffortToFix(2.0);
defaultIssue.setGap(2.0);
defaultIssue.setNew(true);
defaultIssue.setKey("xyz");
defaultIssue.setStartLine(1);

+ 1
- 1
sonar-batch/src/test/java/org/sonar/batch/scan/report/JSONReportTest.java Vedi File

@@ -111,7 +111,7 @@ public class JSONReportTest {
issue.setEndLine(2);
issue.setStartLineOffset(3);
issue.setEndLineOffset(4);
issue.setEffortToFix(3.14);
issue.setGap(3.14);
issue.setReporter("julien");
issue.setAssignee("simon");
issue.setCreationDate(SIMPLE_DATE_FORMAT.parse("2013-04-24"));

+ 9
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java Vedi File

@@ -48,10 +48,19 @@ public interface Issue {

/**
* Effort to fix the issue. Used by technical debt model.
* @deprecated since 5.5 use {@link #gap()}
*/
@CheckForNull
@Deprecated
Double effortToFix();

/**
* Gap used to compute the effort for fixing the issue.
* @since 5.5
*/
@CheckForNull
Double gap();

/**
* Overridden severity.
*/

+ 8
- 0
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/NewIssue.java Vedi File

@@ -40,9 +40,17 @@ public interface NewIssue {

/**
* Effort to fix the issue.
* @deprecated since 5.5 use {@link #gap(Double)}
*/
@Deprecated
NewIssue effortToFix(@Nullable Double effortToFix);

/**
* Gap used for the computation of the effort.
* @since 5.5
*/
NewIssue gap(@Nullable Double gap);

/**
* Override severity of the issue.
* Setting a null value or not calling this method means to use severity configured in quality profile.

+ 14
- 4
sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java Vedi File

@@ -53,7 +53,7 @@ public class DefaultIssue extends DefaultStorable implements Issue, NewIssue {
}

private RuleKey ruleKey;
private Double effortToFix;
private Double gap;
private Severity overriddenSeverity;
private IssueLocation primaryLocation;
private List<List<IssueLocation>> flows = new ArrayList<>();
@@ -74,8 +74,13 @@ public class DefaultIssue extends DefaultStorable implements Issue, NewIssue {

@Override
public DefaultIssue effortToFix(@Nullable Double effortToFix) {
Preconditions.checkArgument(effortToFix == null || effortToFix >= 0, format("Effort to fix must be greater than or equal 0 (got %s)", effortToFix));
this.effortToFix = effortToFix;
return gap(effortToFix);
}

@Override
public DefaultIssue gap(@Nullable Double gap) {
Preconditions.checkArgument(gap == null || gap >= 0, format("Gap must be greater than or equal 0 (got %s)", gap));
this.gap = gap;
return this;
}

@@ -124,9 +129,14 @@ public class DefaultIssue extends DefaultStorable implements Issue, NewIssue {
return this.overriddenSeverity;
}

@Override
public Double gap() {
return this.gap;
}

@Override
public Double effortToFix() {
return this.effortToFix;
return this.gap;
}

@Override

+ 10
- 2
sonar-plugin-api/src/main/java/org/sonar/api/scan/issue/filter/FilterableIssue.java Vedi File

@@ -19,9 +19,8 @@
*/
package org.sonar.api.scan.issue.filter;

import org.sonar.api.rule.RuleKey;

import java.util.Date;
import org.sonar.api.rule.RuleKey;

/**
* @since 5.3
@@ -38,8 +37,17 @@ public interface FilterableIssue {

Integer line();

/**
* @deprecated since 5.5 use {@link #gap()}
*/
@Deprecated
Double effortToFix();

/**
* @since 5.5
*/
Double gap();

Date creationDate();

String projectKey();

+ 2
- 2
sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java Vedi File

@@ -46,12 +46,12 @@ public class DefaultIssueTest {
.at(inputFile.selectLine(1))
.message("Wrong way!"))
.forRule(RuleKey.of("repo", "rule"))
.effortToFix(10.0);
.gap(10.0);

assertThat(issue.primaryLocation().inputComponent()).isEqualTo(inputFile);
assertThat(issue.ruleKey()).isEqualTo(RuleKey.of("repo", "rule"));
assertThat(issue.primaryLocation().textRange().start().line()).isEqualTo(1);
assertThat(issue.effortToFix()).isEqualTo(10.0);
assertThat(issue.gap()).isEqualTo(10.0);
assertThat(issue.primaryLocation().message()).isEqualTo("Wrong way!");

issue.save();

Loading…
Annulla
Salva