KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > puppycrawl > tools > checkstyle > checks > imports > AvoidStarImportCheck


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 JavaDoc[] mExcludes = new String JavaDoc[0];
59
60     /** {@inheritDoc} */
61     public int[] getDefaultTokens()
62     {
63         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     public void setExcludes(String JavaDoc[] aExcludes)
71     {
72         mExcludes = new String JavaDoc[aExcludes.length];
73         for (int i = 0; i < aExcludes.length; i++) {
74             mExcludes[i] = aExcludes[i];
75             if (!mExcludes[i].endsWith(".*")) {
76                 // force all package names to end with ".*" to disambiguate
77
// "java.io"
78
mExcludes[i] = mExcludes[i] + ".*";
79             }
80         }
81     }
82
83     /** {@inheritDoc} */
84     public void visitToken(DetailAST aAST)
85     {
86         final FullIdent name = FullIdent.createFullIdentBelow(aAST);
87         if ((name != null) && name.getText().endsWith(".*")) {
88             boolean exempt = false;
89             for (int i = 0; (i < mExcludes.length) && !exempt; i++) {
90                 if (name.getText().equals(mExcludes[i])) {
91                     exempt = true;
92                 }
93             }
94             if (!exempt) {
95                 log(aAST.getLineNo(), "import.avoidStar", name.getText());
96             }
97         }
98     }
99 }
100
Popular Tags