Clover Coverage Report - Checkstyle
Coverage timestamp: Fri May 9 2008 10:48:13 EST
../../../../../../img/srcFileCovDistChart10.png 0% of files have more coverage
14   99   11   4.67
12   39   0.79   3
3     3.67  
1    
 
  AvoidStarImportCheck       Line # 54 96.6% 0.9655172
11 14 11 11 0.79
 
  (2)
 
1    ////////////////////////////////////////////////////////////////////////////////
2    // checkstyle: Checks Java source code for adherence to a set of rules.
3    // Copyright (C) 2001-2005 Oliver Burn
4    //
5    // This library is free software; you can redistribute it and/or
6    // modify it under the terms of the GNU Lesser General Public
7    // License as published by the Free Software Foundation; either
8    // version 2.1 of the License, or (at your option) any later version.
9    //
10    // This library is distributed in the hope that it will be useful,
11    // but WITHOUT ANY WARRANTY; without even the implied warranty of
12    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13    // Lesser General Public License for more details.
14    //
15    // You should have received a copy of the GNU Lesser General Public
16    // License along with this library; if not, write to the Free Software
17    // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18    ////////////////////////////////////////////////////////////////////////////////
19    package com.puppycrawl.tools.checkstyle.checks.imports;
20   
21    import com.puppycrawl.tools.checkstyle.api.Check;
22    import com.puppycrawl.tools.checkstyle.api.DetailAST;
23    import com.puppycrawl.tools.checkstyle.api.FullIdent;
24    import com.puppycrawl.tools.checkstyle.api.TokenTypes;
25   
26    /**
27    * <p>
28    * Check that finds import statements that use the * notation.
29    * </p>
30    * <p> Rationale: Importing all classes from a package leads to tight coupling
31    * between packages and might lead to problems when a new version of a library
32    * introduces name clashes.
33    * </p>
34    * <p>
35    * An example of how to configure the check is:
36    * </p>
37    * <pre>
38    * &lt;module name="AvoidStarImport"&gt;
39    * &lt;property name="excludes" value="java.io,java.net"/&gt;
40    * &lt;/module&gt;
41    * </pre>
42    *
43    * The optional "excludes" property allows for certain packages like
44    * java.io or java.net to be exempted from the rule. Note that the excludes
45    * property is not recursive, subpackages of excluded packages are not
46    * automatically excluded.
47    *
48    * Compatible with Java 1.5 source.
49    *
50    * @author Oliver Burn
51    * @author <a href="bschneider@vecna.com">Bill Schneider</a>
52    * @version 1.0
53    */
 
54    public class AvoidStarImportCheck
55    extends Check
56    {
57    /** the packages to exempt from this check. */
58    private String[] mExcludes = new String[0];
59   
60    /** {@inheritDoc} */
 
61  2 toggle public int[] getDefaultTokens()
62    {
63  2 return new int[] {TokenTypes.IMPORT};
64    }
65   
66    /**
67    * Sets the list of packages to exempt from the check.
68    * @param aExcludes a list of package names where star imports are ok
69    */
 
70  1 toggle public void setExcludes(String[] aExcludes)
71    {
72  1 mExcludes = new String[aExcludes.length];
73  3 for (int i = 0; i < aExcludes.length; i++) {
74  2 mExcludes[i] = aExcludes[i];
75  2 if (!mExcludes[i].endsWith(".*")) {
76    // force all package names to end with ".*" to disambiguate
77    // "java.io"
78  2 mExcludes[i] = mExcludes[i] + ".*";
79    }
80    }
81    }
82   
83    /** {@inheritDoc} */
 
84  36 toggle public void visitToken(DetailAST aAST)
85    {
86  36 final FullIdent name = FullIdent.createFullIdentBelow(aAST);
87  36 if ((name != null) && name.getText().endsWith(".*")) {
88  6 boolean exempt = false;
89  11 for (int i = 0; (i < mExcludes.length) && !exempt; i++) {
90  5 if (name.getText().equals(mExcludes[i])) {
91  2 exempt = true;
92    }
93    }
94  6 if (!exempt) {
95  4 log(aAST.getLineNo(), "import.avoidStar", name.getText());
96    }
97    }
98    }
99    }