From a787d107f965f3e65a97e345222271f47954fac3 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Wed, 23 Jul 2014 18:00:32 +0200 Subject: SONAR-5389 Reset measure and issue builders after creation of object to allow reuse --- .../org/sonar/api/batch/sensor/SensorContext.java | 15 ++++++----- .../org/sonar/api/batch/sensor/issue/Issue.java | 3 ++- .../sonar/api/batch/sensor/issue/IssueBuilder.java | 5 ++-- .../batch/sensor/issue/internal/DefaultIssue.java | 1 + .../sensor/issue/internal/DefaultIssueBuilder.java | 18 ++++++++++--- .../sonar/api/batch/sensor/measure/Measure.java | 7 +++-- .../api/batch/sensor/measure/MeasureBuilder.java | 5 ++-- .../sensor/measure/internal/DefaultMeasure.java | 7 +++-- .../measure/internal/DefaultMeasureBuilder.java | 31 +++++++++++++--------- .../measure/internal/DefaultMeasureTest.java | 7 +++-- 10 files changed, 59 insertions(+), 40 deletions(-) (limited to 'sonar-plugin-api') diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java index 873fed63243..234b3865ca3 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/SensorContext.java @@ -19,16 +19,15 @@ */ package org.sonar.api.batch.sensor; -import org.sonar.api.batch.sensor.issue.Issue; -import org.sonar.api.batch.sensor.issue.IssueBuilder; -import org.sonar.api.batch.sensor.measure.Measure; -import org.sonar.api.batch.sensor.measure.MeasureBuilder; - import com.google.common.annotations.Beta; import org.sonar.api.batch.fs.FileSystem; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; import org.sonar.api.batch.rule.ActiveRules; +import org.sonar.api.batch.sensor.issue.Issue; +import org.sonar.api.batch.sensor.issue.IssueBuilder; +import org.sonar.api.batch.sensor.measure.Measure; +import org.sonar.api.batch.sensor.measure.MeasureBuilder; import org.sonar.api.config.Settings; import javax.annotation.CheckForNull; @@ -101,7 +100,11 @@ public interface SensorContext { /** * Add an issue. Use {@link #issueBuilder()} to create the new issue. - * @return true if the new issue is registered, false if the related rule does not exist or is disabled in the Quality profile. + * @return true if the new issue is registered, false if: + * */ boolean addIssue(Issue issue); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java index c56e623056c..a8d2512542a 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/Issue.java @@ -48,6 +48,7 @@ public interface Issue { /** * Message of the issue. */ + @CheckForNull String message(); /** @@ -65,7 +66,7 @@ public interface Issue { /** * See constants in {@link org.sonar.api.rule.Severity}. - * Can be null before issue is saved to tell to use severity configured in quality profile. + * Can be null before issue is saved. Means to use severity configured in quality profile. */ @CheckForNull String severity(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java index 5480103b1e7..f6b4fa85aaa 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/IssueBuilder.java @@ -56,7 +56,8 @@ public interface IssueBuilder { IssueBuilder onProject(); /** - * Line of the issue. Only available for {@link #onFile(InputFile)} issues. If no line is specified then issue is supposed to be global to the file. + * Line of the issue. Only available for {@link #onFile(InputFile)} issues. + * If no line is specified it means that issue is global to the file. */ IssueBuilder atLine(int line); @@ -77,7 +78,7 @@ public interface IssueBuilder { IssueBuilder severity(@Nullable String severity); /** - * Build the issue. + * Build the issue. After call of this method the builder is cleaned and can be used to build another issue. */ Issue build(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java index 9ca0fdd4f82..f3b56f73b6c 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java @@ -70,6 +70,7 @@ public class DefaultIssue implements Issue, Serializable { return ruleKey; } + @CheckForNull @Override public String message() { return message; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java index 62e89813f1c..fefbfb1e4c8 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueBuilder.java @@ -23,7 +23,6 @@ import com.google.common.base.Preconditions; import org.sonar.api.batch.fs.InputDir; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.InputPath; -import org.sonar.api.batch.sensor.issue.Issue; import org.sonar.api.batch.sensor.issue.IssueBuilder; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.Severity; @@ -108,8 +107,21 @@ public class DefaultIssueBuilder implements IssueBuilder { } @Override - public Issue build() { - return new DefaultIssue(this); + public DefaultIssue build() { + DefaultIssue result = new DefaultIssue(this); + reset(); + return result; + } + + private void reset() { + key = null; + onProject = false; + path = null; + ruleKey = null; + message = null; + line = null; + effortToFix = null; + severity = null; } } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java index ea606d45bd8..e7805affe65 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/Measure.java @@ -19,13 +19,12 @@ */ package org.sonar.api.batch.sensor.measure; -import org.sonar.api.batch.sensor.Sensor; - import com.google.common.annotations.Beta; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; +import org.sonar.api.batch.sensor.Sensor; -import javax.annotation.Nullable; +import javax.annotation.CheckForNull; import java.io.Serializable; @@ -39,7 +38,7 @@ public interface Measure { /** * The {@link InputFile} this measure belongs to. Returns null if measure is global to the project. */ - @Nullable + @CheckForNull InputFile inputFile(); Metric metric(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java index 05b16bee932..8dcfd9e37dd 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/MeasureBuilder.java @@ -19,10 +19,9 @@ */ package org.sonar.api.batch.sensor.measure; -import org.sonar.api.batch.measure.Metric; - import com.google.common.annotations.Beta; import org.sonar.api.batch.fs.InputFile; +import org.sonar.api.batch.measure.Metric; import java.io.Serializable; @@ -54,7 +53,7 @@ public interface MeasureBuilder { MeasureBuilder withValue(G value); /** - * Build the measure. + * Build the measure. After call of this method the builder is cleaned and can be used to build another measure. */ Measure build(); } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java index 6664a055b8a..e51f548d529 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasure.java @@ -19,8 +19,6 @@ */ package org.sonar.api.batch.sensor.measure.internal; -import org.sonar.api.batch.sensor.measure.Measure; - import com.google.common.base.Preconditions; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; @@ -28,8 +26,9 @@ import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; +import org.sonar.api.batch.sensor.measure.Measure; -import javax.annotation.Nullable; +import javax.annotation.CheckForNull; import java.io.Serializable; @@ -48,7 +47,7 @@ public class DefaultMeasure implements Measure, Seria this.value = builder.value; } - @Nullable + @CheckForNull @Override public InputFile inputFile() { return inputFile; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java index a1ef2e508d9..31fddee7652 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureBuilder.java @@ -19,41 +19,37 @@ */ package org.sonar.api.batch.sensor.measure.internal; -import org.sonar.api.batch.sensor.measure.MeasureBuilder; - import com.google.common.base.Preconditions; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; +import org.sonar.api.batch.sensor.measure.MeasureBuilder; import java.io.Serializable; public class DefaultMeasureBuilder implements MeasureBuilder { - Boolean onProject = null; + boolean onProject = false; InputFile file; Metric metric; G value; @Override public DefaultMeasureBuilder onFile(InputFile inputFile) { - onProject(false); - Preconditions.checkNotNull(inputFile, "inputFile should be non null"); + Preconditions.checkState(!this.onProject, "onProject already called"); + Preconditions.checkState(this.file == null, "onFile already called"); + Preconditions.checkNotNull(inputFile, "InputFile should be non null"); this.file = inputFile; return this; } @Override public DefaultMeasureBuilder onProject() { - onProject(true); - this.file = null; + Preconditions.checkState(!this.onProject, "onProject already called"); + Preconditions.checkState(this.file == null, "onFile already called"); + this.onProject = true; return this; } - private void onProject(boolean isOnProject) { - Preconditions.checkState(this.onProject == null, "onFile or onProject can be called only once"); - this.onProject = isOnProject; - } - @Override public DefaultMeasureBuilder forMetric(Metric metric) { Preconditions.checkState(metric != null, "Metric already defined"); @@ -72,6 +68,15 @@ public class DefaultMeasureBuilder implements MeasureBui @Override public DefaultMeasure build() { - return new DefaultMeasure(this); + DefaultMeasure result = new DefaultMeasure(this); + reset(); + return result; + } + + private void reset() { + onProject = false; + file = null; + metric = null; + value = null; } } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java index c75a31679b2..b894ffec092 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/measure/internal/DefaultMeasureTest.java @@ -19,14 +19,13 @@ */ package org.sonar.api.batch.sensor.measure.internal; -import org.sonar.api.batch.sensor.measure.Measure; -import org.sonar.api.batch.sensor.measure.internal.DefaultMeasureBuilder; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.batch.fs.internal.DefaultInputFile; +import org.sonar.api.batch.sensor.measure.Measure; import org.sonar.api.measures.CoreMetrics; + import static org.fest.assertions.Assertions.assertThat; public class DefaultMeasureTest { @@ -63,7 +62,7 @@ public class DefaultMeasureTest { @Test public void not_allowed_to_call_onFile_and_onProject() { thrown.expect(IllegalStateException.class); - thrown.expectMessage("onFile or onProject can be called only once"); + thrown.expectMessage("onProject already called"); new DefaultMeasureBuilder() .onProject() .onFile(new DefaultInputFile("src/Foo.php")) -- cgit v1.2.3 From e4fdef49e36d269ef5365a3056af67c8c3d5aceb Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Wed, 23 Jul 2014 20:55:46 +0200 Subject: SONAR-5417 Add rule name to active rule --- .../java/org/sonar/batch/protocol/input/ActiveRule.java | 9 +++++++-- .../batch/protocol/input/ProjectReferentialsTest.java | 4 ++-- .../referential/DefaultProjectReferentialsLoader.java | 2 +- .../java/org/sonar/batch/rule/ActiveRulesProvider.java | 1 + .../java/org/sonar/batch/scan2/DefaultSensorContext.java | 15 ++++----------- .../sonar/batch/mediumtest/fs/FileSystemMediumTest.java | 2 +- .../sonar/batch/mediumtest/issues/IssuesMediumTest.java | 2 +- .../batch/mediumtest/issues/IssuesOnDirMediumTest.java | 2 +- .../main/java/org/sonar/api/batch/rule/ActiveRule.java | 7 +++++++ .../sonar/api/batch/rule/internal/DefaultActiveRule.java | 8 ++++++++ .../org/sonar/api/batch/rule/internal/NewActiveRule.java | 6 ++++++ .../api/batch/rule/internal/ActiveRulesBuilderTest.java | 2 ++ 12 files changed, 41 insertions(+), 19 deletions(-) (limited to 'sonar-plugin-api') diff --git a/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/ActiveRule.java b/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/ActiveRule.java index 144a34b292b..6c1992ac1e2 100644 --- a/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/ActiveRule.java +++ b/sonar-batch-protocol/src/main/java/org/sonar/batch/protocol/input/ActiveRule.java @@ -26,12 +26,13 @@ import java.util.Map; public class ActiveRule { private final String repositoryKey, ruleKey; - private final String severity, internalKey, language; + private final String name, severity, internalKey, language; private final Map params = new HashMap(); - public ActiveRule(String repositoryKey, String ruleKey, String severity, String internalKey, String language) { + public ActiveRule(String repositoryKey, String ruleKey, String name, String severity, String internalKey, String language) { this.repositoryKey = repositoryKey; this.ruleKey = ruleKey; + this.name = name; this.severity = severity; this.internalKey = internalKey; this.language = language; @@ -45,6 +46,10 @@ public class ActiveRule { return ruleKey; } + public String name() { + return name; + } + public String severity() { return severity; } diff --git a/sonar-batch-protocol/src/test/java/org/sonar/batch/protocol/input/ProjectReferentialsTest.java b/sonar-batch-protocol/src/test/java/org/sonar/batch/protocol/input/ProjectReferentialsTest.java index 831f5e12cef..328939ca23d 100644 --- a/sonar-batch-protocol/src/test/java/org/sonar/batch/protocol/input/ProjectReferentialsTest.java +++ b/sonar-batch-protocol/src/test/java/org/sonar/batch/protocol/input/ProjectReferentialsTest.java @@ -38,7 +38,7 @@ public class ProjectReferentialsTest { ref.addQProfile(new QProfile("squid-java", "Java", "java", new SimpleDateFormat("dd/MM/yyyy").parse("14/03/1984"))); ref.addSettings("foo", new HashMap()); ref.settings("foo").put("prop", "value"); - ref.addActiveRule(new ActiveRule("repo", "rule", "MAJOR", "rule", "java")); + ref.addActiveRule(new ActiveRule("repo", "rule", "Rule", "MAJOR", "rule", "java")); ref.setTimestamp(10); System.out.println(ref.toJson()); @@ -46,7 +46,7 @@ public class ProjectReferentialsTest { .assertEquals( "{timestamp:10," + "qprofilesByLanguage:{java:{key:\"squid-java\",name:Java,language:java,rulesUpdatedAt:\"Mar 14, 1984 12:00:00 AM\"}}," - + "activeRules:[{repositoryKey:repo,ruleKey:rule,severity:MAJOR,internalKey:rule,language:java,params:{}}]," + + "activeRules:[{repositoryKey:repo,ruleKey:rule,name:Rule,severity:MAJOR,internalKey:rule,language:java,params:{}}]," + "settingsByModule:{foo:{prop:value}}}", ref.toJson(), true); } diff --git a/sonar-batch/src/main/java/org/sonar/batch/referential/DefaultProjectReferentialsLoader.java b/sonar-batch/src/main/java/org/sonar/batch/referential/DefaultProjectReferentialsLoader.java index 3ca6ff97634..4405eb259e8 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/referential/DefaultProjectReferentialsLoader.java +++ b/sonar-batch/src/main/java/org/sonar/batch/referential/DefaultProjectReferentialsLoader.java @@ -96,7 +96,7 @@ public class DefaultProjectReferentialsLoader implements ProjectReferentialsLoad } else { internalKey = rule.getConfigKey(); } - ActiveRule activeRule = new ActiveRule(rule.ruleKey().repository(), rule.ruleKey().rule(), activeDto.getSeverityString(), internalKey, rule.getLanguage()); + ActiveRule activeRule = new ActiveRule(rule.ruleKey().repository(), rule.ruleKey().rule(), rule.getName(), activeDto.getSeverityString(), internalKey, rule.getLanguage()); // load parameter values for (ActiveRuleParamDto paramDto : paramDtosByActiveRuleId.get(activeDto.getId())) { diff --git a/sonar-batch/src/main/java/org/sonar/batch/rule/ActiveRulesProvider.java b/sonar-batch/src/main/java/org/sonar/batch/rule/ActiveRulesProvider.java index 9b6b009d3df..a539b744073 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/rule/ActiveRulesProvider.java +++ b/sonar-batch/src/main/java/org/sonar/batch/rule/ActiveRulesProvider.java @@ -48,6 +48,7 @@ public class ActiveRulesProvider extends ProviderAdapter { ActiveRulesBuilder builder = new ActiveRulesBuilder(); for (ActiveRule activeRule : ref.activeRules()) { NewActiveRule newActiveRule = builder.create(RuleKey.of(activeRule.repositoryKey(), activeRule.ruleKey())); + newActiveRule.setName(activeRule.name()); newActiveRule.setSeverity(activeRule.severity()); newActiveRule.setLanguage(activeRule.language()); newActiveRule.setInternalKey(activeRule.internalKey()); diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java index c2119b18d02..f54dab6af55 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java @@ -26,7 +26,6 @@ import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; import org.sonar.api.batch.rule.ActiveRule; import org.sonar.api.batch.rule.ActiveRules; -import org.sonar.api.batch.rule.Rule; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.issue.Issue; import org.sonar.api.batch.sensor.issue.IssueBuilder; @@ -129,22 +128,16 @@ public class DefaultSensorContext implements SensorContext { resourceKey = def.getKey(); } RuleKey ruleKey = issue.ruleKey(); - // TODO we need a Rule referential on batch side - Rule rule = null; - // Rule rule = rules.find(ruleKey); - // if (rule == null) { - // throw MessageException.of(String.format("The rule '%s' does not exist.", ruleKey)); - // } ActiveRule activeRule = activeRules.find(ruleKey); if (activeRule == null) { // rule does not exist or is not enabled -> ignore the issue return false; } - if (/* Strings.isNullOrEmpty(rule.name()) && */Strings.isNullOrEmpty(issue.message())) { + if (Strings.isNullOrEmpty(activeRule.name()) && Strings.isNullOrEmpty(issue.message())) { throw MessageException.of(String.format("The rule '%s' has no name and the related issue has no message.", ruleKey)); } - updateIssue((DefaultIssue) issue, activeRule, rule); + updateIssue((DefaultIssue) issue, activeRule); if (issueFilters.accept(SensorContextAdaptor.toDefaultIssue(def.getKey(), resourceKey, issue), null)) { issueCache.put(def.getKey(), resourceKey, (DefaultIssue) issue); @@ -154,9 +147,9 @@ public class DefaultSensorContext implements SensorContext { return false; } - private void updateIssue(DefaultIssue issue, ActiveRule activeRule, Rule rule) { + private void updateIssue(DefaultIssue issue, ActiveRule activeRule) { if (Strings.isNullOrEmpty(issue.message())) { - issue.setMessage(rule.name()); + issue.setMessage(activeRule.name()); } if (issue.severity() == null) { diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java index ace6681869b..674f472d0b5 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/fs/FileSystemMediumTest.java @@ -50,7 +50,7 @@ public class FileSystemMediumTest { public BatchMediumTester tester = BatchMediumTester.builder() .registerPlugin("xoo", new XooPlugin()) .addDefaultQProfile("xoo", "Sonar Way") - .activateRule(new ActiveRule("xoo", "OneIssuePerLine", "MAJOR", "xoo", "xoo")) + .activateRule(new ActiveRule("xoo", "OneIssuePerLine", "One issue per line", "MAJOR", "xoo", "xoo")) .bootstrapProperties(ImmutableMap.of("sonar.analysis.mode", "sensor")) .build(); diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java index 3fec3ccb251..875e7e6d510 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesMediumTest.java @@ -45,7 +45,7 @@ public class IssuesMediumTest { public BatchMediumTester tester = BatchMediumTester.builder() .registerPlugin("xoo", new XooPlugin()) .addDefaultQProfile("xoo", "Sonar Way") - .activateRule(new ActiveRule("xoo", "OneIssuePerLine", "MAJOR", "OneIssuePerLine.internal", "xoo")) + .activateRule(new ActiveRule("xoo", "OneIssuePerLine", "One issue per line", "MAJOR", "OneIssuePerLine.internal", "xoo")) .bootstrapProperties(ImmutableMap.of("sonar.analysis.mode", "sensor")) .build(); diff --git a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java index bbd1aefd719..fdf6b15e857 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/mediumtest/issues/IssuesOnDirMediumTest.java @@ -44,7 +44,7 @@ public class IssuesOnDirMediumTest { public BatchMediumTester tester = BatchMediumTester.builder() .registerPlugin("xoo", new XooPlugin()) .addDefaultQProfile("xoo", "Sonar Way") - .activateRule(new ActiveRule("xoo", "OneIssueOnDirPerFile", "MINOR", "xoo", "xoo")) + .activateRule(new ActiveRule("xoo", "OneIssueOnDirPerFile", "One issue per line", "MINOR", "xoo", "xoo")) .bootstrapProperties(ImmutableMap.of("sonar.analysis.mode", "sensor")) .build(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java index 3e3d18651e9..d24fa2eed84 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java @@ -22,6 +22,7 @@ package org.sonar.api.batch.rule; import org.sonar.api.rule.RuleKey; import javax.annotation.CheckForNull; + import java.util.Map; /** @@ -32,6 +33,12 @@ public interface ActiveRule { RuleKey ruleKey(); + /** + * Name of the rule. + * @since 4.5 + */ + String name(); + /** * Non-null severity. * @see org.sonar.api.rule.Severity diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java index 5eeea77687d..b37fc6a8890 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java @@ -24,16 +24,19 @@ import org.sonar.api.batch.rule.ActiveRule; import org.sonar.api.rule.RuleKey; import javax.annotation.concurrent.Immutable; + import java.util.Map; @Immutable class DefaultActiveRule implements ActiveRule { private final RuleKey ruleKey; + private final String name; private final String severity, internalKey, language; private final Map params; DefaultActiveRule(NewActiveRule newActiveRule) { this.severity = newActiveRule.severity; + this.name = newActiveRule.name; this.internalKey = newActiveRule.internalKey; this.ruleKey = newActiveRule.ruleKey; this.params = ImmutableMap.copyOf(newActiveRule.params); @@ -45,6 +48,11 @@ class DefaultActiveRule implements ActiveRule { return ruleKey; } + @Override + public String name() { + return name; + } + @Override public String severity() { return severity; diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/NewActiveRule.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/NewActiveRule.java index dd4b53d5953..3f20d89bf3f 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/NewActiveRule.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/NewActiveRule.java @@ -33,6 +33,7 @@ import java.util.Map; */ public class NewActiveRule { final RuleKey ruleKey; + String name; String severity = Severity.defaultSeverity(); Map params = new HashMap(); String internalKey, language; @@ -43,6 +44,11 @@ public class NewActiveRule { this.ruleKey = ruleKey; } + public NewActiveRule setName(String name) { + this.name = name; + return this; + } + public NewActiveRule setSeverity(@Nullable String severity) { this.severity = StringUtils.defaultIfBlank(severity, Severity.defaultSeverity()); return this; diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java index 584b1ea7663..3d2ac27b8a1 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java @@ -40,6 +40,7 @@ public class ActiveRulesBuilderTest { public void build_rules() throws Exception { ActiveRules activeRules = new ActiveRulesBuilder() .create(RuleKey.of("squid", "S0001")) + .setName("My Rule") .setSeverity(Severity.CRITICAL) .setInternalKey("__S0001__") .setParam("min", "20") @@ -58,6 +59,7 @@ public class ActiveRulesBuilderTest { ActiveRule squid1 = activeRules.find(RuleKey.of("squid", "S0001")); assertThat(squid1.ruleKey().repository()).isEqualTo("squid"); assertThat(squid1.ruleKey().rule()).isEqualTo("S0001"); + assertThat(squid1.name()).isEqualTo("My Rule"); assertThat(squid1.severity()).isEqualTo(Severity.CRITICAL); assertThat(squid1.internalKey()).isEqualTo("__S0001__"); assertThat(squid1.params()).hasSize(1); -- cgit v1.2.3 From 7b9679e8749287b46b195464a22fbd751dbf5cf3 Mon Sep 17 00:00:00 2001 From: Julien HENRY Date: Thu, 24 Jul 2014 09:28:10 +0200 Subject: SONAR-5389 Do not expose rule name in active rule as we may drop it soon --- .../src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java | 6 +++--- .../src/main/java/org/sonar/api/batch/rule/ActiveRule.java | 6 ------ .../java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java | 3 +-- .../org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java | 2 +- 4 files changed, 5 insertions(+), 12 deletions(-) (limited to 'sonar-plugin-api') diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java index f54dab6af55..6f4b2bdec70 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan2/DefaultSensorContext.java @@ -24,8 +24,8 @@ import org.sonar.api.batch.bootstrap.ProjectDefinition; import org.sonar.api.batch.fs.FileSystem; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.measure.Metric; -import org.sonar.api.batch.rule.ActiveRule; import org.sonar.api.batch.rule.ActiveRules; +import org.sonar.api.batch.rule.internal.DefaultActiveRule; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.batch.sensor.issue.Issue; import org.sonar.api.batch.sensor.issue.IssueBuilder; @@ -128,7 +128,7 @@ public class DefaultSensorContext implements SensorContext { resourceKey = def.getKey(); } RuleKey ruleKey = issue.ruleKey(); - ActiveRule activeRule = activeRules.find(ruleKey); + DefaultActiveRule activeRule = (DefaultActiveRule) activeRules.find(ruleKey); if (activeRule == null) { // rule does not exist or is not enabled -> ignore the issue return false; @@ -147,7 +147,7 @@ public class DefaultSensorContext implements SensorContext { return false; } - private void updateIssue(DefaultIssue issue, ActiveRule activeRule) { + private void updateIssue(DefaultIssue issue, DefaultActiveRule activeRule) { if (Strings.isNullOrEmpty(issue.message())) { issue.setMessage(activeRule.name()); } diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java index d24fa2eed84..35447556df9 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/ActiveRule.java @@ -33,12 +33,6 @@ public interface ActiveRule { RuleKey ruleKey(); - /** - * Name of the rule. - * @since 4.5 - */ - String name(); - /** * Non-null severity. * @see org.sonar.api.rule.Severity diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java index b37fc6a8890..08d34525d69 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/batch/rule/internal/DefaultActiveRule.java @@ -28,7 +28,7 @@ import javax.annotation.concurrent.Immutable; import java.util.Map; @Immutable -class DefaultActiveRule implements ActiveRule { +public class DefaultActiveRule implements ActiveRule { private final RuleKey ruleKey; private final String name; private final String severity, internalKey, language; @@ -48,7 +48,6 @@ class DefaultActiveRule implements ActiveRule { return ruleKey; } - @Override public String name() { return name; } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java index 3d2ac27b8a1..448880b9e4b 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/rule/internal/ActiveRulesBuilderTest.java @@ -59,7 +59,7 @@ public class ActiveRulesBuilderTest { ActiveRule squid1 = activeRules.find(RuleKey.of("squid", "S0001")); assertThat(squid1.ruleKey().repository()).isEqualTo("squid"); assertThat(squid1.ruleKey().rule()).isEqualTo("S0001"); - assertThat(squid1.name()).isEqualTo("My Rule"); + assertThat(((DefaultActiveRule) squid1).name()).isEqualTo("My Rule"); assertThat(squid1.severity()).isEqualTo(Severity.CRITICAL); assertThat(squid1.internalKey()).isEqualTo("__S0001__"); assertThat(squid1.params()).hasSize(1); -- cgit v1.2.3