@@ -75,7 +75,7 @@ public class OneExternalIssuePerLineSensor implements Sensor { | |||
.at(file.selectLine(line)) | |||
.message("This issue is generated on each line")) | |||
.severity(Severity.valueOf(SEVERITY)) | |||
.remediationEffort(EFFORT) | |||
.remediationEffortMinutes(EFFORT) | |||
.type(type) | |||
.save(); | |||
} |
@@ -31,12 +31,10 @@ import org.sonar.api.server.debt.DebtRemediationFunction; | |||
public class NewExternalRule implements Rule { | |||
private final RuleKey key; | |||
private final String name; | |||
private final RuleType type; | |||
private final String pluginKey; | |||
private NewExternalRule(Builder builder) { | |||
this.key = checkNotNull(builder.key, "key"); | |||
this.type = checkNotNull(builder.type, "type"); | |||
this.pluginKey = builder.pluginKey; | |||
this.name = builder.name; | |||
} | |||
@@ -70,7 +68,7 @@ public class NewExternalRule implements Rule { | |||
@Override | |||
public RuleType getType() { | |||
return type; | |||
return null; | |||
} | |||
@Override | |||
@@ -95,8 +93,6 @@ public class NewExternalRule implements Rule { | |||
public static class Builder { | |||
private RuleKey key; | |||
private String severity; | |||
private RuleType type; | |||
private String pluginKey; | |||
private String name; | |||
@@ -110,19 +106,6 @@ public class NewExternalRule implements Rule { | |||
return this; | |||
} | |||
public Builder setType(RuleType type) { | |||
this.type = type; | |||
return this; | |||
} | |||
public String severity() { | |||
return severity; | |||
} | |||
public RuleType type() { | |||
return type; | |||
} | |||
public String name() { | |||
return name; | |||
} |
@@ -214,13 +214,9 @@ public class TrackerRawInputFactory { | |||
private NewExternalRule toExternalRule(ScannerReport.ExternalIssue reportIssue) { | |||
NewExternalRule.Builder builder = new NewExternalRule.Builder() | |||
.setType(toRuleType(reportIssue.getType())) | |||
.setName(RuleKey.of(reportIssue.getRuleRepository(), reportIssue.getRuleKey()).toString()) | |||
.setKey(RuleKey.of(RuleKey.EXTERNAL_RULE_REPO_PREFIX + reportIssue.getRuleRepository(), reportIssue.getRuleKey())); | |||
if (reportIssue.getSeverity() != Severity.UNSET_SEVERITY) { | |||
builder.setSeverity(reportIssue.getSeverity().name()); | |||
} | |||
return builder.build(); | |||
} | |||
@@ -22,7 +22,6 @@ package org.sonar.server.computation.task.projectanalysis.issue; | |||
import org.junit.Test; | |||
import org.junit.rules.ExpectedException; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.rules.RuleType; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -35,31 +34,14 @@ public class NewExternalRuleTest { | |||
NewExternalRule.Builder builder = new NewExternalRule.Builder() | |||
.setKey(RuleKey.of("repo", "rule")) | |||
.setPluginKey("repo") | |||
.setName("name") | |||
.setSeverity("MAJOR") | |||
.setType(RuleType.BUG); | |||
.setName("name"); | |||
assertThat(builder.severity()).isEqualTo("MAJOR"); | |||
assertThat(builder.type()).isEqualTo(RuleType.BUG); | |||
assertThat(builder.name()).isEqualTo("name"); | |||
NewExternalRule rule = builder.build(); | |||
assertThat(rule.getName()).isEqualTo("name"); | |||
assertThat(rule.getPluginKey()).isEqualTo("repo"); | |||
assertThat(rule.getSeverity()).isEqualTo("MAJOR"); | |||
assertThat(rule.getType()).isEqualTo(RuleType.BUG); | |||
} | |||
@Test | |||
public void fail_if_type_is_not_set() { | |||
exception.expect(IllegalStateException.class); | |||
exception.expectMessage("'type' not expected to be null for an external rule"); | |||
new NewExternalRule.Builder() | |||
.setKey(RuleKey.of("repo", "rule")) | |||
.setSeverity("MAJOR") | |||
.build(); | |||
} | |||
@Test | |||
@@ -68,8 +50,6 @@ public class NewExternalRuleTest { | |||
exception.expectMessage("'key' not expected to be null for an external rule"); | |||
new NewExternalRule.Builder() | |||
.setSeverity("MAJOR") | |||
.setType(RuleType.BUG) | |||
.build(); | |||
} | |||
} |
@@ -50,8 +50,6 @@ import static org.mockito.Mockito.verify; | |||
import static org.mockito.Mockito.verifyNoMoreInteractions; | |||
import static org.mockito.Mockito.when; | |||
import static org.mockito.internal.verification.VerificationModeFactory.times; | |||
import static org.sonar.api.rule.Severity.BLOCKER; | |||
import static org.sonar.api.rules.RuleType.BUG; | |||
public class RuleRepositoryImplTest { | |||
@@ -274,13 +272,11 @@ public class RuleRepositoryImplTest { | |||
underTest.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder() | |||
.setKey(ruleKey) | |||
.setPluginKey("eslint") | |||
.setSeverity(BLOCKER) | |||
.setType(BUG) | |||
.build()); | |||
assertThat(underTest.getByKey(ruleKey)).isNotNull(); | |||
assertThat(underTest.getByKey(ruleKey).getPluginKey()).isEqualTo("eslint"); | |||
assertThat(underTest.getByKey(ruleKey).getType()).isEqualTo(BUG); | |||
assertThat(underTest.getByKey(ruleKey).getType()).isNull(); | |||
RuleDao ruleDao = dbClient.ruleDao(); | |||
Optional<RuleDefinitionDto> ruleDefinitionDto = ruleDao.selectDefinitionByKey(dbClient.openSession(false), ruleKey); | |||
@@ -295,8 +291,6 @@ public class RuleRepositoryImplTest { | |||
underTest.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder() | |||
.setKey(ruleKey) | |||
.setPluginKey("eslint") | |||
.setSeverity(BLOCKER) | |||
.setType(BUG) | |||
.build()); | |||
underTest.persistNewExternalRules(db.getSession()); |
@@ -39,8 +39,6 @@ import org.sonar.server.rule.index.RuleIndexDefinition; | |||
import org.sonar.server.rule.index.RuleIndexer; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.api.rule.Severity.BLOCKER; | |||
import static org.sonar.api.rules.RuleType.BUG; | |||
public class PersistExternalRulesStepTest extends BaseStepTest { | |||
@@ -57,7 +55,7 @@ public class PersistExternalRulesStepTest extends BaseStepTest { | |||
private RuleRepositoryImpl ruleRepository; | |||
@org.junit.Rule | |||
public EsTester es = EsTester.create(); | |||
public EsTester es = EsTester.create(); | |||
private RuleIndexer indexer = new RuleIndexer(es.client(), dbClient); | |||
private ExternalRuleCreator externalRuleCreator = new ExternalRuleCreator(dbClient, System2.INSTANCE, indexer); | |||
@@ -80,9 +78,7 @@ public class PersistExternalRulesStepTest extends BaseStepTest { | |||
ruleRepository.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder() | |||
.setKey(ruleKey) | |||
.setPluginKey("eslint") | |||
.setSeverity(BLOCKER) | |||
.setName("eslint:no-cond-assign") | |||
.setType(BUG) | |||
.build()); | |||
underTest.execute(); | |||
@@ -95,8 +91,8 @@ public class PersistExternalRulesStepTest extends BaseStepTest { | |||
assertThat(reloaded.getRuleKey()).isEqualTo("no-cond-assign"); | |||
assertThat(reloaded.getRepositoryKey()).isEqualTo("eslint"); | |||
assertThat(reloaded.isExternal()).isTrue(); | |||
assertThat(reloaded.getType()).isEqualTo(2); | |||
assertThat(reloaded.getSeverity()).isEqualTo(4); | |||
assertThat(reloaded.getType()).isEqualTo(0); | |||
assertThat(reloaded.getSeverity()).isNull(); | |||
assertThat(reloaded.getName()).isEqualTo("eslint:no-cond-assign"); | |||
assertThat(reloaded.getPluginKey()).isEqualTo("eslint"); | |||
@@ -111,8 +107,6 @@ public class PersistExternalRulesStepTest extends BaseStepTest { | |||
ruleRepository.insertNewExternalRuleIfAbsent(ruleKey, () -> new NewExternalRule.Builder() | |||
.setKey(ruleKey) | |||
.setPluginKey("eslint") | |||
.setSeverity(BLOCKER) | |||
.setType(BUG) | |||
.build()); | |||
underTest.execute(); |
@@ -30,7 +30,6 @@ import org.sonar.server.es.EsTester; | |||
import org.sonar.server.rule.index.RuleIndexer; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
import static org.sonar.api.rules.RuleType.BUG; | |||
public class ExternalRuleCreatorTest { | |||
@@ -49,7 +48,6 @@ public class ExternalRuleCreatorTest { | |||
NewExternalRule externalRule = new NewExternalRule.Builder() | |||
.setKey(ruleKey) | |||
.setPluginKey("eslint") | |||
.setType(BUG) | |||
.setName("name") | |||
.build(); | |||
@@ -45,7 +45,7 @@ public interface NewExternalIssue { | |||
/** | |||
* Effort to fix the issue, in minutes. | |||
*/ | |||
NewExternalIssue remediationEffort(@Nullable Long effort); | |||
NewExternalIssue remediationEffortMinutes(@Nullable Long effortInMinutes); | |||
/** | |||
* Set the severity of the issue. |
@@ -45,7 +45,7 @@ public class DefaultExternalIssue extends AbstractDefaultIssue<DefaultExternalIs | |||
} | |||
@Override | |||
public DefaultExternalIssue remediationEffort(@Nullable Long effort) { | |||
public DefaultExternalIssue remediationEffortMinutes(@Nullable Long effort) { | |||
Preconditions.checkArgument(effort == null || effort >= 0, format("effort must be greater than or equal 0 (got %s)", effort)); | |||
this.effort = effort; | |||
return this; |
@@ -51,7 +51,7 @@ public class DefaultExternalIssueTest { | |||
.at(inputFile.selectLine(1)) | |||
.message("Wrong way!")) | |||
.forRule(RuleKey.of("repo", "rule")) | |||
.remediationEffort(10l) | |||
.remediationEffortMinutes(10l) | |||
.type(RuleType.BUG) | |||
.severity(Severity.BLOCKER); | |||
@@ -77,7 +77,7 @@ public class DefaultExternalIssueTest { | |||
.at(inputFile.selectLine(1)) | |||
.message("Wrong way!")) | |||
.forRule(RuleKey.of("repo", "rule")) | |||
.remediationEffort(10l) | |||
.remediationEffortMinutes(10l) | |||
.severity(Severity.BLOCKER); | |||
exception.expect(IllegalStateException.class); | |||
@@ -93,7 +93,7 @@ public class DefaultExternalIssueTest { | |||
.on(mock(InputComponent.class)) | |||
.message("Wrong way!")) | |||
.forRule(RuleKey.of("repo", "rule")) | |||
.remediationEffort(10l) | |||
.remediationEffortMinutes(10l) | |||
.severity(Severity.BLOCKER); | |||
exception.expect(IllegalStateException.class); | |||
@@ -110,7 +110,7 @@ public class DefaultExternalIssueTest { | |||
.at(inputFile.selectLine(1)) | |||
.message("Wrong way!")) | |||
.forRule(RuleKey.of("repo", "rule")) | |||
.remediationEffort(10l) | |||
.remediationEffortMinutes(10l) | |||
.type(RuleType.BUG); | |||
exception.expect(IllegalStateException.class); |
@@ -58,6 +58,7 @@ public class ExternalIssueImporter { | |||
NewExternalIssue externalIssue = context.newExternalIssue() | |||
.forRule(RuleKey.of(issue.engineId, issue.ruleId)) | |||
.severity(Severity.valueOf(issue.severity)) | |||
.remediationEffortMinutes(20L) | |||
.type(RuleType.valueOf(issue.type)); | |||
NewIssueLocation primary = fillLocation(context, externalIssue.newLocation(), issue.primaryLocation); |
@@ -108,6 +108,8 @@ public class ReportParser { | |||
String ruleId; | |||
String severity; | |||
String type; | |||
@Nullable | |||
Integer effortMinutes; | |||
Location primaryLocation; | |||
@Nullable | |||
Location[] secondaryLocations; |
@@ -33,6 +33,7 @@ import org.sonar.api.batch.sensor.issue.internal.DefaultIssue; | |||
import org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation; | |||
import org.sonar.api.rule.RuleKey; | |||
import org.sonar.api.rule.Severity; | |||
import org.sonar.api.rules.RuleType; | |||
import org.sonar.api.utils.MessageException; | |||
import org.sonar.scanner.protocol.output.ScannerReport; | |||
import org.sonar.scanner.report.ReportPublisher; | |||
@@ -154,6 +155,7 @@ public class ModuleIssuesTest { | |||
DefaultExternalIssue issue = new DefaultExternalIssue() | |||
.at(new DefaultIssueLocation().on(file).at(file.selectLine(3)).message("Foo")) | |||
.type(RuleType.BUG) | |||
.forRule(SQUID_RULE_KEY) | |||
.severity(org.sonar.api.batch.rule.Severity.CRITICAL); | |||