From: Evgeny Mandrikov Date: Thu, 5 Jul 2012 12:38:29 +0000 (+0600) Subject: SONAR-2333 Add new rule to report about cycles between packages X-Git-Tag: 3.2~232 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9f82e65ddfbe95e5bfa0d6d7e78c6b2707948d9c;p=sonarqube.git SONAR-2333 Add new rule to report about cycles between packages * Add rule to the "Sonar way" profile * Compute cost of fix of violation --- diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/check/CycleBetweenPackagesCheck.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/check/CycleBetweenPackagesCheck.java index dfa13c23536..2abc22ca0e2 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/check/CycleBetweenPackagesCheck.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/check/CycleBetweenPackagesCheck.java @@ -21,6 +21,7 @@ package org.sonar.java.squid.check; import org.sonar.api.checks.CheckFactory; import org.sonar.api.rules.ActiveRule; +import org.sonar.check.BelongsToProfile; import org.sonar.check.Priority; import org.sonar.check.Rule; @@ -28,8 +29,11 @@ import javax.annotation.CheckForNull; /** * Companion of {@link org.sonar.plugins.squid.bridges.DesignBridge} which actually does the job on finding cycles and creation of violations. + * + * @since 3.2 */ @Rule(key = "CycleBetweenPackages", priority = Priority.MAJOR) +@BelongsToProfile(title = "Sonar way", priority = Priority.MAJOR) public class CycleBetweenPackagesCheck extends SquidCheck { /** diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SonarWayProfile.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SonarWayProfile.java index 2a999df7b23..5c0cdb89b17 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SonarWayProfile.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SonarWayProfile.java @@ -19,16 +19,11 @@ */ package org.sonar.plugins.squid; -import org.sonar.api.resources.Java; - -import com.google.common.collect.ImmutableList; import org.sonar.api.profiles.AnnotationProfileParser; import org.sonar.api.profiles.ProfileDefinition; import org.sonar.api.profiles.RulesProfile; +import org.sonar.api.resources.Java; import org.sonar.api.utils.ValidationMessages; -import org.sonar.java.ast.check.CommentedOutCodeLineCheck; - -import java.util.Collection; public class SonarWayProfile extends ProfileDefinition { private final AnnotationProfileParser annotationProfileParser; @@ -39,8 +34,6 @@ public class SonarWayProfile extends ProfileDefinition { @Override public RulesProfile createProfile(ValidationMessages messages) { - Collection rules = ImmutableList. of(CommentedOutCodeLineCheck.class); - - return annotationProfileParser.parse(SquidConstants.REPOSITORY_KEY, RulesProfile.SONAR_WAY_NAME, Java.KEY, rules, messages); + return annotationProfileParser.parse(SquidConstants.REPOSITORY_KEY, RulesProfile.SONAR_WAY_NAME, Java.KEY, SquidRuleRepository.getCheckClasses(), messages); } -} \ No newline at end of file +} diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/DesignBridge.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/DesignBridge.java index 6e279b03220..19685cd04f9 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/DesignBridge.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/DesignBridge.java @@ -165,7 +165,8 @@ public class DesignBridge extends Bridge { // If resource cannot be obtained, then silently ignore, because anyway warning will be printed by method saveEdge if ((fromFile != null) && (toFile != null)) { Violation violation = Violation.create(rule, fromFile) - .setMessage("Remove the dependency on the source file \"" + toFile.getLongName() + "\" to break a package cycle."); + .setMessage("Remove the dependency on the source file \"" + toFile.getLongName() + "\" to break a package cycle.") + .setCost((double) subEdge.getWeight()); context.saveViolation(violation); } } diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/SonarWayProfileTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/SonarWayProfileTest.java index 204a6fb66db..b72b2ffc10e 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/SonarWayProfileTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/SonarWayProfileTest.java @@ -41,7 +41,7 @@ public class SonarWayProfileTest { SonarWayProfile definition = new SonarWayProfile(new AnnotationProfileParser(ruleFinder())); RulesProfile profile = definition.createProfile(validation); - assertThat(profile.getActiveRulesByRepository(SquidConstants.REPOSITORY_KEY)).hasSize(1); + assertThat(profile.getActiveRulesByRepository(SquidConstants.REPOSITORY_KEY)).hasSize(2); assertThat(profile.getName()).isEqualTo(RulesProfile.SONAR_WAY_NAME); assertThat(validation.hasErrors()).isFalse(); } @@ -53,7 +53,7 @@ public class SonarWayProfileTest { SonarWayWithFindbugsProfile definition = new SonarWayWithFindbugsProfile(new SonarWayProfile(new AnnotationProfileParser(ruleFinder()))); RulesProfile profile = definition.createProfile(validation); - assertThat(profile.getActiveRulesByRepository(SquidConstants.REPOSITORY_KEY)).hasSize(1); + assertThat(profile.getActiveRulesByRepository(SquidConstants.REPOSITORY_KEY)).hasSize(2); assertThat(profile.getName()).isEqualTo(RulesProfile.SONAR_WAY_FINDBUGS_NAME); assertThat(validation.hasErrors()).isFalse(); }