@@ -27,6 +27,7 @@ import org.sonar.api.internal.PluginContextImpl; | |||
import org.sonar.api.internal.SonarRuntimeImpl; | |||
import org.sonar.api.utils.Version; | |||
import org.sonar.xoo.lang.CpdTokenizerSensor; | |||
import org.sonar.xoo.rule.OneExternalIssuePerLineSensor; | |||
import static org.assertj.core.api.Assertions.assertThat; | |||
@@ -61,6 +62,6 @@ public class XooPluginTest { | |||
SonarRuntime runtime = SonarRuntimeImpl.forSonarQube(Version.parse("7.2"), SonarQubeSide.SCANNER); | |||
Plugin.Context context = new PluginContextImpl.Builder().setSonarRuntime(runtime).build(); | |||
new XooPlugin().define(context); | |||
assertThat(context.getExtensions()).hasSize(52).contains(CpdTokenizerSensor.class); | |||
assertThat(context.getExtensions()).hasSize(52).contains(OneExternalIssuePerLineSensor.class); | |||
} | |||
} |
@@ -188,7 +188,7 @@ CREATE TABLE "RULES" ( | |||
"DESCRIPTION_FORMAT" VARCHAR(20), | |||
"PRIORITY" INTEGER, | |||
"IS_TEMPLATE" BOOLEAN DEFAULT FALSE, | |||
"IS_EXTERNAL" BOOLEAN DEFAULT FALSE, | |||
"IS_EXTERNAL" BOOLEAN, | |||
"TEMPLATE_ID" INTEGER, | |||
"PLUGIN_CONFIG_KEY" VARCHAR(200), | |||
"NAME" VARCHAR(200), |
@@ -537,7 +537,6 @@ public class RuleDaoTest { | |||
.setConfigKey("NewConfigKey") | |||
.setSeverity(Severity.INFO) | |||
.setIsTemplate(true) | |||
.setIsExternal(true) | |||
.setLanguage("dart") | |||
.setTemplateId(3) | |||
.setDefRemediationFunction(DebtRemediationFunction.Type.LINEAR_OFFSET.toString()) | |||
@@ -563,7 +562,7 @@ public class RuleDaoTest { | |||
assertThat(ruleDto.getSeverity()).isEqualTo(0); | |||
assertThat(ruleDto.getLanguage()).isEqualTo("dart"); | |||
assertThat(ruleDto.isTemplate()).isTrue(); | |||
assertThat(ruleDto.isExternal()).isTrue(); | |||
assertThat(ruleDto.isExternal()).isFalse(); | |||
assertThat(ruleDto.getTemplateId()).isEqualTo(3); | |||
assertThat(ruleDto.getDefRemediationFunction()).isEqualTo("LINEAR_OFFSET"); | |||
assertThat(ruleDto.getDefRemediationGapMultiplier()).isEqualTo("5d"); | |||
@@ -834,10 +833,10 @@ public class RuleDaoTest { | |||
assertThat(firstRule.getType()).isEqualTo(r1.getType()); | |||
assertThat(firstRule.getCreatedAt()).isEqualTo(r1.getCreatedAt()); | |||
assertThat(firstRule.getUpdatedAt()).isEqualTo(r1.getUpdatedAt()); | |||
RuleForIndexingDto secondRule = it.next(); | |||
assertThat(secondRule.isExternal()).isTrue(); | |||
} | |||
@Test | |||
@@ -988,8 +987,7 @@ public class RuleDaoTest { | |||
.extracting(DeprecatedRuleKeyDto::getNewRepositoryKey, DeprecatedRuleKeyDto::getNewRuleKey) | |||
.containsExactly( | |||
tuple(null, null), | |||
tuple(null, null) | |||
); | |||
tuple(null, null)); | |||
} | |||
@Test | |||
@@ -1019,7 +1017,7 @@ public class RuleDaoTest { | |||
@Test | |||
public void deleteDeprecatedRuleKeys() { | |||
DeprecatedRuleKeyDto deprecatedRuleKeyDto1 = db.rules().insertDeprecatedKey(); | |||
db.rules().insertDeprecatedKey();; | |||
db.rules().insertDeprecatedKey(); | |||
assertThat(underTest.selectAllDeprecatedRuleKeys(db.getSession())).hasSize(2); | |||
@@ -38,7 +38,6 @@ public class AddRuleExternal extends DdlChange { | |||
.addColumn(BooleanColumnDef.newBooleanColumnDefBuilder() | |||
.setColumnName("is_external") | |||
.setIsNullable(true) | |||
.setDefaultValue(false) | |||
.build()) | |||
.build()); | |||
} |
@@ -30,6 +30,7 @@ public class DbVersion72 implements DbVersion { | |||
.add(2100, "Increase size of USERS.CRYPTED_PASSWORD", IncreaseCryptedPasswordSize.class) | |||
.add(2101, "Add HASH_METHOD to table users", AddHashMethodToUsersTable.class) | |||
.add(2102, "Populate HASH_METHOD on table users", PopulateHashMethodOnUsers.class) | |||
.add(2103, "Add isExternal boolean to rules", AddRuleExternal.class); | |||
.add(2103, "Add isExternal boolean to rules", AddRuleExternal.class) | |||
; | |||
} | |||
} |
@@ -28,7 +28,7 @@ public class DbVersion72Test { | |||
private DbVersion72 underTest = new DbVersion72(); | |||
@Test | |||
public void migrationNumber_starts_at_2000() { | |||
public void migrationNumber_starts_at_2100() { | |||
verifyMinimumMigrationNumber(underTest, 2100); | |||
} | |||
@@ -20,6 +20,7 @@ | |||
package org.sonar.server.computation.task.projectanalysis.issue; | |||
import java.util.Collections; | |||
import java.util.Objects; | |||
import java.util.Set; | |||
import javax.annotation.concurrent.Immutable; | |||
import org.sonar.api.rule.RuleKey; | |||
@@ -34,18 +35,12 @@ public class NewExternalRule implements Rule { | |||
private final String pluginKey; | |||
private NewExternalRule(Builder builder) { | |||
this.key = checkNotNull(builder.key, "key"); | |||
Objects.requireNonNull(builder.key, "'key' not expected to be null for an external rule"); | |||
this.key = builder.key; | |||
this.pluginKey = builder.pluginKey; | |||
this.name = builder.name; | |||
} | |||
private static <T> T checkNotNull(T obj, String name) { | |||
if (obj == null) { | |||
throw new IllegalStateException("'" + name + "' not expected to be null for an external rule"); | |||
} | |||
return obj; | |||
} | |||
@Override | |||
public int getId() { | |||
return 0; |
@@ -36,6 +36,9 @@ public interface Rule { | |||
RuleStatus getStatus(); | |||
/** | |||
* Will be null for external rules | |||
*/ | |||
@CheckForNull | |||
RuleType getType(); | |||
@@ -39,8 +39,6 @@ public class PersistExternalRulesStep implements ComputationStep { | |||
try (DbSession dbSession = dbClient.openSession(false)) { | |||
ruleRepository.persistNewExternalRules(dbSession); | |||
dbSession.flushStatements(); | |||
dbSession.commit(); | |||
} | |||
} |
@@ -46,7 +46,7 @@ public class NewExternalRuleTest { | |||
@Test | |||
public void fail_if_rule_key_is_not_set() { | |||
exception.expect(IllegalStateException.class); | |||
exception.expect(NullPointerException.class); | |||
exception.expectMessage("'key' not expected to be null for an external rule"); | |||
new NewExternalRule.Builder() |
@@ -50,7 +50,6 @@ import org.sonar.server.computation.task.projectanalysis.issue.IssueCache; | |||
import org.sonar.server.computation.task.projectanalysis.issue.RuleRepositoryImpl; | |||
import org.sonar.server.computation.task.projectanalysis.issue.UpdateConflictResolver; | |||
import org.sonar.server.computation.task.step.ComputationStep; | |||
import org.sonar.server.es.EsTester; | |||
import org.sonar.server.rule.ExternalRuleCreator; | |||
import org.sonar.server.util.cache.DiskCache; | |||
@@ -84,9 +83,6 @@ public class PersistIssuesStepTest extends BaseStepTest { | |||
private IssueCache issueCache; | |||
private ComputationStep step; | |||
@org.junit.Rule | |||
public EsTester es = EsTester.create(); | |||
private ExternalRuleCreator externalRuleCreator = mock(ExternalRuleCreator.class); | |||
@Override |
@@ -111,17 +111,15 @@ public class TransitionActionTest { | |||
@Test | |||
public void do_not_allow_transitions_for_issues_from_external_rule_engine() { | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("No transition allowed on issue from externally define rule"); | |||
loginAndAddProjectPermission("john", ISSUE_ADMIN); | |||
context.issue() | |||
.setIsFromExternalRuleEngine(true) | |||
.setStatus(STATUS_CLOSED); | |||
expectedException.expect(IllegalArgumentException.class); | |||
expectedException.expectMessage("No transition allowed on issue from externally define rule"); | |||
action.execute(ImmutableMap.of("transition", "close"), context); | |||
} | |||
@Test |
@@ -36,7 +36,7 @@ public interface Issue extends IIssue { | |||
*/ | |||
List<IssueLocation> locations(); | |||
} | |||
/** | |||
* Effort to fix the issue. Used by technical debt model. | |||
* @deprecated since 5.5 use {@link #gap()} | |||
@@ -51,13 +51,13 @@ public interface Issue extends IIssue { | |||
*/ | |||
@CheckForNull | |||
Double gap(); | |||
/** | |||
* Overridden severity. | |||
*/ | |||
@CheckForNull | |||
Severity overriddenSeverity(); | |||
/** | |||
* Primary locations for this issue. | |||
* @since 5.2 |