KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > puppycrawl > tools > checkstyle > checks > indentation > MethodDefHandler


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.indentation;
20
21 import com.puppycrawl.tools.checkstyle.api.DetailAST;
22 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
23
24 /**
25  * Handler for method definitions.
26  *
27  * @author jrichard
28  */

29 public class MethodDefHandler extends BlockParentHandler
30 {
31     /**
32      * Construct an instance of this handler with the given indentation check,
33      * abstract syntax tree, and parent handler.
34      *
35      * @param aIndentCheck the indentation check
36      * @param aAst the abstract syntax tree
37      * @param aParent the parent handler
38      */

39     public MethodDefHandler(IndentationCheck aIndentCheck,
40         DetailAST aAst, ExpressionHandler aParent)
41     {
42         super(aIndentCheck, (aAst.getType() == TokenTypes.CTOR_DEF)
43             ? "ctor def" : "method def", aAst, aParent);
44     }
45
46     /**
47      * There is no top level expression for this handler.
48      *
49      * @return null
50      */

51     protected DetailAST getToplevelAST()
52     {
53         // we check this stuff ourselves below
54
return null;
55     }
56
57     /**
58      * Check the indentation of the method name.
59      */

60     private void checkIdent()
61     {
62         final DetailAST ident = getMainAst().findFirstToken(TokenTypes.IDENT);
63         final int columnNo = expandedTabsColumnNo(ident);
64         if (startsLine(ident) && !getLevel().accept(columnNo)) {
65             logError(ident, "", columnNo);
66         }
67     }
68
69     /**
70      * Check the indentation of the throws clause.
71      */

72     private void checkThrows()
73     {
74         final DetailAST throwsAst =
75             getMainAst().findFirstToken(TokenTypes.LITERAL_THROWS);
76         if (throwsAst == null) {
77             return;
78         }
79
80         final int columnNo = expandedTabsColumnNo(throwsAst);
81         final IndentLevel expectedColumnNo =
82             new IndentLevel(getLevel(), getBasicOffset());
83
84         if (startsLine(throwsAst)
85             && !expectedColumnNo.accept(columnNo))
86         {
87             logError(throwsAst, "throws", columnNo, expectedColumnNo);
88         }
89     }
90
91     /**
92      * Check the indentation of the method type.
93      */

94     private void checkType()
95     {
96         final DetailAST type = getMainAst().findFirstToken(TokenTypes.TYPE);
97         final DetailAST ident = ExpressionHandler.getFirstToken(type);
98         final int columnNo = expandedTabsColumnNo(ident);
99         if (startsLine(ident) && !getLevel().accept(columnNo)) {
100             logError(ident, "return type", columnNo);
101         }
102     }
103
104     /**
105      * Check the indentation of the method parameters.
106      */

107     private void checkParameters()
108     {
109         final DetailAST params =
110             getMainAst().findFirstToken(TokenTypes.PARAMETERS);
111         checkExpressionSubtree(params, getLevel(), false, false);
112     }
113
114     /**
115      * Check the indentation of the expression we are handling.
116      */

117     public void checkIndentation()
118     {
119         checkModifiers();
120         checkIdent();
121         checkThrows();
122         if (getMainAst().getType() != TokenTypes.CTOR_DEF) {
123             checkType();
124         }
125         checkParameters();
126
127         if (getLCurly() == null) {
128             // asbtract method def -- no body
129
return;
130         }
131         super.checkIndentation();
132     }
133 }
134
Popular Tags