From 84c0fbaa08bc8f5db140e26395a37ce27568cb27 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Thu, 26 Jul 2012 23:37:58 +0200 Subject: [PATCH] SONAR-3702 API : AnnotationRuleParser does not detect overridden rule parameters --- .../sonar/api/rules/AnnotationRuleParser.java | 21 ++++++--------- .../api/rules/AnnotationRuleParserTest.java | 27 +++++++++++++++---- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java b/sonar-plugin-api/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java index df43d139657..ce3bdfacae0 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/rules/AnnotationRuleParser.java @@ -19,8 +19,6 @@ */ package org.sonar.api.rules; -import org.sonar.api.utils.SonarException; - import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import org.apache.commons.lang.StringUtils; @@ -29,6 +27,8 @@ import org.slf4j.LoggerFactory; import org.sonar.api.PropertyType; import org.sonar.api.ServerComponent; import org.sonar.api.utils.AnnotationUtils; +import org.sonar.api.utils.FieldUtils2; +import org.sonar.api.utils.SonarException; import org.sonar.check.Check; import java.lang.reflect.Field; @@ -72,13 +72,10 @@ public final class AnnotationRuleParser implements ServerComponent { rule.setSeverity(RulePriority.fromCheckPriority(ruleAnnotation.priority())); rule.setCardinality(ruleAnnotation.cardinality()); - Field[] fields = clazz.getDeclaredFields(); - if (fields != null) { - for (Field field : fields) { - addRuleProperty(rule, field); - } + List fields = FieldUtils2.getFields(clazz, true); + for (Field field : fields) { + addRuleProperty(rule, field); } - return rule; } @@ -89,11 +86,9 @@ public final class AnnotationRuleParser implements ServerComponent { rule.setDescription(checkAnnotation.description()); rule.setSeverity(RulePriority.fromCheckPriority(checkAnnotation.priority())); - Field[] fields = clazz.getDeclaredFields(); - if (fields != null) { - for (Field field : fields) { - addCheckProperty(rule, field); - } + List fields = FieldUtils2.getFields(clazz, true); + for (Field field : fields) { + addCheckProperty(rule, field); } return rule; } diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/rules/AnnotationRuleParserTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/rules/AnnotationRuleParserTest.java index 2fa2b5c30de..74877514357 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/rules/AnnotationRuleParserTest.java +++ b/sonar-plugin-api/src/test/java/org/sonar/api/rules/AnnotationRuleParserTest.java @@ -19,11 +19,10 @@ */ package org.sonar.api.rules; -import org.sonar.api.utils.SonarException; - import org.junit.Test; import org.junit.rules.ExpectedException; import org.sonar.api.PropertyType; +import org.sonar.api.utils.SonarException; import org.sonar.check.IsoCategory; import org.sonar.check.Priority; @@ -115,6 +114,18 @@ public class AnnotationRuleParserTest { assertThat(rule.getSeverity()).isEqualTo(RulePriority.MAJOR); } + @Test + public void overridden_rule() { + List rules = parseAnnotatedClass(OverridingRule.class); + assertThat(rules).hasSize(1); + Rule rule = rules.get(0); + assertThat(rule.getKey()).isEqualTo("overriding_foo"); + assertThat(rule.getName()).isEqualTo("Overriding Foo"); + assertThat(rule.getDescription()).isNull(); + assertThat(rule.getSeverity()).isEqualTo(RulePriority.MAJOR); + assertThat(rule.getParams()).hasSize(2); + } + @Test public void supportDeprecatedAnnotations() { List rules = parseAnnotatedClass(Check.class); @@ -141,19 +152,25 @@ public class AnnotationRuleParserTest { @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", priority = Priority.BLOCKER) static class RuleWithProperty { @org.sonar.check.RuleProperty(description = "Ignore ?", defaultValue = "false") - public String property; + private String property; + } + + @org.sonar.check.Rule(key = "overriding_foo", name = "Overriding Foo") + static class OverridingRule extends RuleWithProperty { + @org.sonar.check.RuleProperty + private String additionalProperty; } @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", priority = Priority.BLOCKER) static class RuleWithIntegerProperty { @org.sonar.check.RuleProperty(description = "Max", defaultValue = "12") - public Integer property; + private Integer property; } @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", priority = Priority.BLOCKER) static class RuleWithTextProperty { @org.sonar.check.RuleProperty(description = "text", defaultValue = "Long text", type = "TEXT") - public String property; + protected String property; } @org.sonar.check.Rule(key = "foo", name = "bar", description = "Foo Bar", priority = Priority.BLOCKER) -- 2.39.5