Source code: com/puppycrawl/tools/checkstyle/checks/indentation/SwitchHandler.java
1 ////////////////////////////////////////////////////////////////////////////////
2 // checkstyle: Checks Java source code for adherence to a set of rules.
3 // Copyright (C) 2001-2003 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 switch statements.
26 *
27 * @author jrichard
28 */
29 public class SwitchHandler 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 SwitchHandler(IndentationCheck aIndentCheck,
40 DetailAST aAst, ExpressionHandler aParent)
41 {
42 super(aIndentCheck, "switch", aAst, aParent);
43 }
44
45 /**
46 * Get the left curly brace portion of the expression we are handling.
47 *
48 * @return the left curly brace expression
49 */
50 protected DetailAST getLCurly()
51 {
52 return getMainAst().findFirstToken(TokenTypes.LCURLY);
53 }
54
55 /**
56 * Get the right curly brace portion of the expression we are handling.
57 *
58 * @return the right curly brace expression
59 */
60 protected DetailAST getRCurly()
61 {
62 return getMainAst().findFirstToken(TokenTypes.RCURLY);
63 }
64
65 /**
66 * There is no list of statements child for this handler.
67 *
68 * @return null
69 */
70 protected DetailAST getListChild()
71 {
72 // all children should be taken care of by case handler (plus
73 // there is no parent of just the cases, if checking is needed
74 // here in the future, an additional way beyond checkChildren()
75 // will have to be devised to get children)
76 return null;
77 }
78
79 /**
80 * There is no child element that is not a list of statements.
81 *
82 * @return null
83 */
84 protected DetailAST getNonlistChild()
85 {
86 return null;
87 }
88
89 /**
90 * Check the indentation of the switch expression.
91 */
92 private void checkSwitchExpr()
93 {
94 checkExpressionSubtree(
95 (DetailAST) getMainAst().findFirstToken(TokenTypes.LPAREN).
96 getNextSibling(),
97 getLevel(),
98 false,
99 false);
100 }
101
102 /**
103 * Check the indentation of the expression we are handling.
104 */
105 public void checkIndentation()
106 {
107 checkSwitchExpr();
108 super.checkIndentation();
109 }
110 }