if (newRule != null) {
newRule.setType(ruleType);
DebtRemediationFunction debtRemediationFunction = null;
switch (debtRemediationFunctionType) {
case CONSTANT_ISSUE:
// (1)
debtRemediationFunction = newRule.debtRemediationFunctions()
.create(debtRemediationFunctionType, null, baseEffort);
break;
case LINEAR:
debtRemediationFunction = newRule.debtRemediationFunctions()
.create(debtRemediationFunctionType, multiplier, null);
break;
case LINEAR_OFFSET:
debtRemediationFunction = newRule.debtRemediationFunctions()
.create(debtRemediationFunctionType, multiplier, baseEffort);
break;
default:
LOGGER.warn("Unexpected debt remediation function type :'{}'", debtRemediationFunctionType);
break;
}
newRule.setDebtRemediationFunction(debtRemediationFunction);
} else {
LOGGER.error("Could not obtain new rule for key '{}'.", key);
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface DebtComputationMetadata {
/**
* {@link RuleType}
*
* @return {@link RuleType} as a String
*/
RuleType ruleType();
/**
* {@link org.sonar.api.batch.debt.DebtRemediationFunction.Type} function to be used in order to compute debt.
*
* @return technical debt computation function
*/
Type debtRemediationFunctionType();
/**
* Offset that defines the base effort debt of a SonarQube issue.
*
* @return debt remediation cost base effort
*/
String remediationCostBaseEffort() default "";
/**
* Remediation cost multiplier.
*
* @return technical debt remediation cost multiplier
*/
String remediationCostMultiplier() default "";
/**
* Effort to fix explanation.
*
* @return explanation
*/
String effortToFixExplanation() default "";
}
2016.05.07 13:35:40 ERROR [o.s.s.c.t.CeWorkerCallableImpl] Failed to execute task AVSLAGJWc8oz2a0OCp7w java.lang.IllegalArgumentException: Constant/issue functions must only have a non empty base effort at org.sonar.api.internal.google.common.base.Preconditions.checkArgument(Preconditions.java:125) ~[sonar-plugin-api-5.5.jar:na] at org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction.validate(DefaultDebtRemediationFunction.java:108) ~[sonar-plugin-api-5.5.jar:na] at org.sonar.api.server.debt.internal.DefaultDebtRemediationFunction.<init>(DefaultDebtRemediationFunction.java:44) ~[sonar-plugin-api-5.5.jar:na] at org.sonar.server.computation.issue.RuleImpl.effectiveRemediationFunction(RuleImpl.java:128) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.issue.RuleImpl.<init>(RuleImpl.java:53) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.issue.RuleRepositoryImpl.loadRulesFromDb(RuleRepositoryImpl.java:102) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.issue.RuleRepositoryImpl.ensureInitialized(RuleRepositoryImpl.java:91) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.issue.RuleRepositoryImpl.findByKey(RuleRepositoryImpl.java:62) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.step.LoadQualityProfilesStep$IsValid.apply(LoadQualityProfilesStep.java:70) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.step.LoadQualityProfilesStep$IsValid.apply(LoadQualityProfilesStep.java:67) ~[sonar-server-5.5.jar:na] at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647) ~[guava-17.0.jar:na] at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) ~[guava-17.0.jar:na] at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) ~[guava-17.0.jar:na] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:268) ~[guava-17.0.jar:na] at com.google.common.collect.ImmutableList.copyOf(ImmutableList.java:226) ~[guava-17.0.jar:na] at com.google.common.collect.FluentIterable.toList(FluentIterable.java:334) ~[guava-17.0.jar:na] at org.sonar.server.computation.step.LoadQualityProfilesStep.execute(LoadQualityProfilesStep.java:63) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.step.ComputationStepExecutor.executeSteps(ComputationStepExecutor.java:64) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.step.ComputationStepExecutor.execute(ComputationStepExecutor.java:52) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.taskprocessor.report.ReportTaskProcessor.process(ReportTaskProcessor.java:75) ~[sonar-server-5.5.jar:na] at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.executeTask(CeWorkerCallableImpl.java:81) [sonar-server-5.5.jar:na] at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:56) [sonar-server-5.5.jar:na] at org.sonar.server.computation.taskprocessor.CeWorkerCallableImpl.call(CeWorkerCallableImpl.java:35) [sonar-server-5.5.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_51] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_51] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_51] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_51] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_51] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_51] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_51] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_51]
// (1)
debtRemediationFunction = newRule.debtRemediationFunctions().create(debtRemediationFunctionType, null, baseEffort);
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0000', baseEffort: '0min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0001', baseEffort: '20min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0002', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0003', baseEffort: '10min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0004', baseEffort: '10min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0005', baseEffort: '10min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0006', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0007', baseEffort: '10min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0008', baseEffort: '15min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0009', baseEffort: '15min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0010', baseEffort: '60min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0011', baseEffort: '3min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0012', baseEffort: '3min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0013', baseEffort: '3min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0014', baseEffort: '15min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0015', baseEffort: '60min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0016', baseEffort: '60min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0017', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0018', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0019', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0020', baseEffort: '10min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0021', baseEffort: '0min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0022', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0023', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0024', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0025', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0026', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0027', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0028', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0029', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0030', baseEffort: '5min', multiplier: 'null'
2016.05.08 10:16:00 INFO web[c.q.p.s.m.a.r.AbstractLanaRulesDefinition] key= 'M0031', baseEffort: '5min', multiplier: 'null'