Source code: com/puppycrawl/tools/checkstyle/checks/indentation/CaseHandler.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 case statements.
26 *
27 * @author jrichard
28 */
29 public class CaseHandler extends ExpressionHandler
30 {
31 /**
32 * The child elements of a case expression.
33 */
34 private final int[] mCaseChildren = new int[] {
35 TokenTypes.LITERAL_CASE,
36 TokenTypes.LITERAL_DEFAULT,
37 };
38
39 /**
40 * Construct an instance of this handler with the given indentation check,
41 * abstract syntax tree, and parent handler.
42 *
43 * @param aIndentCheck the indentation check
44 * @param aExpr the abstract syntax tree
45 * @param aParent the parent handler
46 */
47 public CaseHandler(IndentationCheck aIndentCheck,
48 DetailAST aExpr, ExpressionHandler aParent)
49 {
50 super(aIndentCheck, "case", aExpr, aParent);
51 }
52
53 /**
54 * Compute the indentation amount for this handler.
55 *
56 * @return the expected indentation amount
57 */
58 public IndentLevel getLevelImpl()
59 {
60 return new IndentLevel(getParent().getLevel(),
61 getIndentCheck().getCaseIndent());
62 }
63
64 /**
65 * Check the indentation of the case statement.
66 */
67 private void checkCase()
68 {
69 checkChildren(getMainAst(), mCaseChildren, getLevel(), true, false);
70 }
71
72 /**
73 * Indentation level suggested for a child element. Children don't have
74 * to respect this, but most do.
75 *
76 * @param aChild child AST (so suggestion level can differ based on child
77 * type)
78 *
79 * @return suggested indentation for child
80 */
81 public IndentLevel suggestedChildLevel(ExpressionHandler aChild)
82 {
83 return getLevel();
84 }
85
86 /**
87 * Check the indentation of the expression we are handling.
88 */
89 public void checkIndentation()
90 {
91 checkCase();
92 }
93 }