01: ////////////////////////////////////////////////////////////////////////////////
02: // checkstyle: Checks Java source code for adherence to a set of rules.
03: // Copyright (C) 2001-2007 Oliver Burn
04: //
05: // This library is free software; you can redistribute it and/or
06: // modify it under the terms of the GNU Lesser General Public
07: // License as published by the Free Software Foundation; either
08: // version 2.1 of the License, or (at your option) any later version.
09: //
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.coding;
20:
21: import com.puppycrawl.tools.checkstyle.api.DetailAST;
22: import com.puppycrawl.tools.checkstyle.api.TokenTypes;
23:
24: /**
25: * Restricts nested try-catch-finally blocks to a specified depth (default = 1).
26: * @author <a href="mailto:simon@redhillconsulting.com.au">Simon Harris</a>
27: */
28: public final class NestedTryDepthCheck extends AbstractNestedDepthCheck {
29: /** default allowed nesting depth */
30: private static final int DEFAULT_MAX = 1;
31:
32: /** Creates new check instance with default allowed nesting depth. */
33: public NestedTryDepthCheck() {
34: super (DEFAULT_MAX);
35: }
36:
37: /** {@inheritDoc} */
38: public int[] getDefaultTokens() {
39: return new int[] { TokenTypes.LITERAL_TRY };
40: }
41:
42: /** {@inheritDoc} */
43: public void visitToken(DetailAST aAST) {
44: switch (aAST.getType()) {
45: case TokenTypes.LITERAL_TRY:
46: visitLiteralTry(aAST);
47: break;
48: default:
49: throw new IllegalStateException(aAST.toString());
50: }
51: }
52:
53: /** {@inheritDoc} */
54: public void leaveToken(DetailAST aAST) {
55: switch (aAST.getType()) {
56: case TokenTypes.LITERAL_TRY:
57: leaveLiteralTry();
58: break;
59: default:
60: throw new IllegalStateException(aAST.toString());
61: }
62: }
63:
64: /**
65: * Increases current nesting depth.
66: * @param aTry node for try.
67: */
68: private void visitLiteralTry(DetailAST aTry) {
69: nestIn(aTry, "nested.try.depth");
70: }
71:
72: /** Decreases current nesting depth */
73: private void leaveLiteralTry() {
74: nestOut();
75: }
76: }
|