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=2…
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=2…
is fixed.
Thanks
-Vincent
On Sep 10, 2012, at 4:59 PM, Vincent Massol <vincent(a)massol.net> 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