aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Mandrikov <mandrikov@gmail.com>2012-07-05 18:38:29 +0600
committerEvgeny Mandrikov <mandrikov@gmail.com>2012-07-05 19:06:30 +0600
commit9f82e65ddfbe95e5bfa0d6d7e78c6b2707948d9c (patch)
tree9c2c25d92264cd4a169bf4718140bcd789d0d403
parentd60f2a710fd1d419c9bd1fe38d321a487ea06d03 (diff)
downloadsonarqube-9f82e65ddfbe95e5bfa0d6d7e78c6b2707948d9c.tar.gz
sonarqube-9f82e65ddfbe95e5bfa0d6d7e78c6b2707948d9c.zip
SONAR-2333 Add new rule to report about cycles between packages
* Add rule to the "Sonar way" profile * Compute cost of fix of violation
-rw-r--r--plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/squid/check/CycleBetweenPackagesCheck.java4
-rw-r--r--plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/SonarWayProfile.java13
-rw-r--r--plugins/sonar-squid-java-plugin/src/main/java/org/sonar/plugins/squid/bridges/DesignBridge.java3
-rw-r--r--plugins/sonar-squid-java-plugin/src/test/java/org/sonar/plugins/squid/SonarWayProfileTest.java4
4 files changed, 11 insertions, 13 deletions
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<Class> rules = ImmutableList.<Class> 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();
}