From 08a286dbec6dec2a6a5bdc75e18152daf7ef77ff Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Thu, 10 Feb 2005 11:23:51 +0000 Subject: [PATCH] ClassFanOutComplexity should treat annotations and enums as classes (bug 1109205) --- .../metrics/AbstractClassCouplingCheck.java | 4 ++++ .../metrics/ClassFanOutComplexityCheck.java | 2 ++ .../tools/checkstyle/Input15Extensions.java | 20 +++++++++++++++++++ .../ClassFanOutComplexityCheckTest.java | 11 ++++++++++ src/xdocs/releasenotes.xml | 3 +++ 5 files changed, 40 insertions(+) create mode 100644 src/testinputs/com/puppycrawl/tools/checkstyle/Input15Extensions.java diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java index 8b3992170..061c2745d 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java @@ -129,6 +129,8 @@ public abstract class AbstractClassCouplingCheck extends Check break; case TokenTypes.CLASS_DEF: case TokenTypes.INTERFACE_DEF: + case TokenTypes.ANNOTATION_DEF: + case TokenTypes.ENUM_DEF: visitClassDef(aAST); break; case TokenTypes.TYPE: @@ -151,6 +153,8 @@ public abstract class AbstractClassCouplingCheck extends Check switch (aAST.getType()) { case TokenTypes.CLASS_DEF: case TokenTypes.INTERFACE_DEF: + case TokenTypes.ANNOTATION_DEF: + case TokenTypes.ENUM_DEF: leaveClassDef(); break; default: diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheck.java index 2903efa70..0f055dbc8 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheck.java @@ -46,9 +46,11 @@ public final class ClassFanOutComplexityCheck extends AbstractClassCouplingCheck TokenTypes.PACKAGE_DEF, TokenTypes.CLASS_DEF, TokenTypes.INTERFACE_DEF, + TokenTypes.ENUM_DEF, TokenTypes.TYPE, TokenTypes.LITERAL_NEW, TokenTypes.LITERAL_THROWS, + TokenTypes.ANNOTATION_DEF, }; } diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/Input15Extensions.java b/src/testinputs/com/puppycrawl/tools/checkstyle/Input15Extensions.java new file mode 100644 index 000000000..5390b146e --- /dev/null +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/Input15Extensions.java @@ -0,0 +1,20 @@ +// someexamples of 1.5 extensions + +@interface MyAnnotation { + String name(); +} + +@MyAnnotation(name = "ABC") +public class Input15Extensions +{ + +} + +enum Enum1 +{ + A, B, C; + Enum1() {} + public String toString() { + return ""; //some custom implementation + } +} diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java index bb0aa64d8..08d8e3f40 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java @@ -18,4 +18,15 @@ public class ClassFanOutComplexityCheckTest extends BaseCheckTestCase { verify(checkConfig, getPath("metrics" + File.separator +"ClassCouplingCheckTestInput.java"), expected); } + + public void test15() throws Exception { + DefaultConfiguration checkConfig = createCheckConfig(ClassFanOutComplexityCheck.class); + + checkConfig.addAttribute("max", "0"); + + String[] expected = { + }; + + verify(checkConfig, getPath("Input15Extensions.java"), expected); + } } diff --git a/src/xdocs/releasenotes.xml b/src/xdocs/releasenotes.xml index 8e376e19d..3d5e19cf0 100755 --- a/src/xdocs/releasenotes.xml +++ b/src/xdocs/releasenotes.xml @@ -69,6 +69,9 @@
  • ModifiedControlVariable check changed to work with for-each correctly (1101851)
  • +
  • Annotations and enums are classes too and should be treated so by + ClassFanOutComplexity checks (bug 1109205)
  • +