From cd7d040b4d2c4a80e87ef9b5be9bbd964f19e97d Mon Sep 17 00:00:00 2001 From: Ivan Sopov Date: Thu, 28 Nov 2013 22:05:52 +0200 Subject: [PATCH] fix for issues #31 and #33 --- .../metrics/AbstractClassCouplingCheck.java | 70 ++++++++++--------- ...ClassDataAbstractionCouplingCheckTest.java | 3 +- .../ClassFanOutComplexityCheckTest.java | 4 +- src/xdocs/config.xml | 2 +- src/xdocs/config_metrics.xml | 34 +++++++++ 5 files changed, 74 insertions(+), 39 deletions(-) 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 408dffa8c..bdc007d7c 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/metrics/AbstractClassCouplingCheck.java @@ -18,6 +18,7 @@ //////////////////////////////////////////////////////////////////////////////// package com.puppycrawl.tools.checkstyle.checks.metrics; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.puppycrawl.tools.checkstyle.api.Check; import com.puppycrawl.tools.checkstyle.api.DetailAST; @@ -25,6 +26,7 @@ import com.puppycrawl.tools.checkstyle.api.FastStack; import com.puppycrawl.tools.checkstyle.api.FullIdent; import com.puppycrawl.tools.checkstyle.api.TokenTypes; import com.puppycrawl.tools.checkstyle.checks.CheckUtils; + import java.util.Set; /** @@ -36,7 +38,30 @@ import java.util.Set; public abstract class AbstractClassCouplingCheck extends Check { /** Class names to ignore. */ - private final Set mIgnoredClassNames = Sets.newHashSet(); + private static final Set DEFAULT_EXCLUDED_CLASSES = + ImmutableSet.builder() + // primitives + .add("boolean", "byte", "char", "double", "float", "int") + .add("long", "short", "void") + // wrappers + .add("Boolean", "Byte", "Character", "Double", "Float") + .add("Integer", "Long", "Short", "Void") + // java.lang.* + .add("Object", "Class") + .add("String", "StringBuffer", "StringBuilder") + // Exceptions + .add("ArrayIndexOutOfBoundsException", "Exception") + .add("RuntimeException", "IllegalArgumentException") + .add("IllegalStateException", "IndexOutOfBoundsException") + .add("NullPointerException", "Throwable", "SecurityException") + .add("UnsupportedOperationException") + // java.util.* + .add("List", "ArrayList", "Deque", "Queue", "LinkedList") + .add("Set", "HashSet", "SortedSet", "TreeSet") + .add("Map", "HashMap", "SortedMap", "TreeMap") + .build(); + /** User-configured class names to ignore. */ + private Set mExcludedClasses = DEFAULT_EXCLUDED_CLASSES; /** Allowed complexity. */ private int mMax; /** package of the file we check. */ @@ -54,38 +79,6 @@ public abstract class AbstractClassCouplingCheck extends Check protected AbstractClassCouplingCheck(int aDefaultMax) { setMax(aDefaultMax); - - mIgnoredClassNames.add("boolean"); - mIgnoredClassNames.add("byte"); - mIgnoredClassNames.add("char"); - mIgnoredClassNames.add("double"); - mIgnoredClassNames.add("float"); - mIgnoredClassNames.add("int"); - mIgnoredClassNames.add("long"); - mIgnoredClassNames.add("short"); - mIgnoredClassNames.add("void"); - mIgnoredClassNames.add("Boolean"); - mIgnoredClassNames.add("Byte"); - mIgnoredClassNames.add("Character"); - mIgnoredClassNames.add("Double"); - mIgnoredClassNames.add("Float"); - mIgnoredClassNames.add("Integer"); - mIgnoredClassNames.add("Long"); - mIgnoredClassNames.add("Object"); - mIgnoredClassNames.add("Short"); - mIgnoredClassNames.add("String"); - mIgnoredClassNames.add("StringBuffer"); - mIgnoredClassNames.add("Void"); - mIgnoredClassNames.add("ArrayIndexOutOfBoundsException"); - mIgnoredClassNames.add("Exception"); - mIgnoredClassNames.add("RuntimeException"); - mIgnoredClassNames.add("IllegalArgumentException"); - mIgnoredClassNames.add("IllegalStateException"); - mIgnoredClassNames.add("IndexOutOfBoundsException"); - mIgnoredClassNames.add("NullPointerException"); - mIgnoredClassNames.add("Throwable"); - mIgnoredClassNames.add("SecurityException"); - mIgnoredClassNames.add("UnsupportedOperationException"); } @Override @@ -109,6 +102,15 @@ public abstract class AbstractClassCouplingCheck extends Check mMax = aMax; } + /** + * Sets user-excluded classes to ignore. + * @param aExcludedClasses the list of classes to ignore. + */ + public final void setExcludedClasses(String[] aExcludedClasses) + { + mExcludedClasses = ImmutableSet.copyOf(aExcludedClasses); + } + @Override public final void beginTree(DetailAST aAST) { @@ -303,7 +305,7 @@ public abstract class AbstractClassCouplingCheck extends Check private boolean isSignificant(String aClassName) { return (aClassName.length() > 0) - && !mIgnoredClassNames.contains(aClassName) + && !mExcludedClasses.contains(aClassName) && !aClassName.startsWith("java.lang."); } } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassDataAbstractionCouplingCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassDataAbstractionCouplingCheckTest.java index 5c5ddd0af..bf668384e 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassDataAbstractionCouplingCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassDataAbstractionCouplingCheckTest.java @@ -32,9 +32,10 @@ public class ClassDataAbstractionCouplingCheckTest extends BaseCheckTestSupport createCheckConfig(ClassDataAbstractionCouplingCheck.class); checkConfig.addAttribute("max", "0"); + checkConfig.addAttribute("excludedClasses", "InnerClass"); String[] expected = { - "6:1: Class Data Abstraction Coupling is 4 (max allowed is 0) classes [AnotherInnerClass, HashMap, HashSet, InnerClass].", + "6:1: Class Data Abstraction Coupling is 4 (max allowed is 0) classes [AnotherInnerClass, HashMap, HashSet, int].", "7:5: Class Data Abstraction Coupling is 1 (max allowed is 0) classes [ArrayList].", "27:1: Class Data Abstraction Coupling is 2 (max allowed is 0) classes [HashMap, HashSet].", }; 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 5a3bdef0b..5a1fb27b1 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/checks/metrics/ClassFanOutComplexityCheckTest.java @@ -33,9 +33,7 @@ public class ClassFanOutComplexityCheckTest extends BaseCheckTestSupport checkConfig.addAttribute("max", "0"); String[] expected = { - "6:1: Class Fan-Out Complexity is 7 (max allowed is 0).", - "7:5: Class Fan-Out Complexity is 2 (max allowed is 0).", - "27:1: Class Fan-Out Complexity is 4 (max allowed is 0).", + "6:1: Class Fan-Out Complexity is 3 (max allowed is 0).", }; verify(checkConfig, diff --git a/src/xdocs/config.xml b/src/xdocs/config.xml index 830494d52..bdb7a68e5 100644 --- a/src/xdocs/config.xml +++ b/src/xdocs/config.xml @@ -885,7 +885,7 @@ ... <module name="SuppressionCommentFilter"/> ... -</module> +</module>

diff --git a/src/xdocs/config_metrics.xml b/src/xdocs/config_metrics.xml index 43f8d9bc7..f40a7b12a 100644 --- a/src/xdocs/config_metrics.xml +++ b/src/xdocs/config_metrics.xml @@ -144,6 +144,23 @@ integer 7 + + excludedClasses + User-configured class names to ignore + String Set + boolean, byte, char, double, float, int, + long, short, void, Boolean, Byte, Character, Double, Float, + Integer, Long, Short, Void, + Object, Class, String, StringBuffer, StringBuilder, + ArrayIndexOutOfBoundsException, Exception, + RuntimeException, IllegalArgumentException, + IllegalStateException, IndexOutOfBoundsException, + NullPointerException, Throwable, SecurityException, + UnsupportedOperationException, + List, ArrayList, Deque, Queue, LinkedList, + Set, HashSet, SortedSet, TreeSet, + Map, HashMap, SortedMap, TreeMap + @@ -202,6 +219,23 @@ integer 20 + + excludedClasses + User-configured class names to ignore + String Set + boolean, byte, char, double, float, int, + long, short, void, Boolean, Byte, Character, Double, Float, + Integer, Long, Short, Void, + Object, Class, String, StringBuffer, StringBuilder, + ArrayIndexOutOfBoundsException, Exception, + RuntimeException, IllegalArgumentException, + IllegalStateException, IndexOutOfBoundsException, + NullPointerException, Throwable, SecurityException, + UnsupportedOperationException, + List, ArrayList, Deque, Queue, LinkedList, + Set, HashSet, SortedSet, TreeSet, + Map, HashMap, SortedMap, TreeMap +