Note: there seems to be a big bug in Checkstyle and it seems that it's currently counting java.lang classes even though it should not. See https://sourceforge.net/tracker/?func=detail&aid=3575496&group_id=29721&atid... which I have just opened. I propose that while waiting for this bug to be fixed we use a specific checkstyle exclude *only for this check* when needed and put in comment TODO to remove it when https://sourceforge.net/tracker/?func=detail&aid=3575496&group_id=29721&atid... is fixed. Thanks -Vincent On Sep 10, 2012, at 4:59 PM, Vincent Massol <[email protected]> wrote:
Hi devs,
I wanted to understand how Checkstyle computes the Class Fan out so I debugged it.
Here are my findings:
* Some classes are excluded by default:
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");
* All classes in java.lang.* are excluded too * Annotation classes are not counted * Classes in the same package are counted (they won't appear in import since it's in the same package so don't count imports to get class fan out) * Static method calls are not counted. So for example StringUtils from Commons Lang never counts for class Fan out * Enums are not counted (no new XXX() done. That's why static method calls are not counted too BTW) * Classes used in class extend or implement are not counted too.
Hope it helps -Vincent