1/***
2 * ASM: a very small and fast Java bytecode manipulation framework
3 * Copyright (c) 2000-2007 INRIA, France Telecom
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 * 3. Neither the name of the copyright holders nor the names of its
15 *    contributors may be used to endorse or promote products derived from
16 *    this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28 * THE POSSIBILITY OF SUCH DAMAGE.
29 */
30package org.mockito.asm.tree;
31
32import org.mockito.asm.MethodVisitor;
33
34/**
35 * A node that represents a try catch block.
36 *
37 * @author Eric Bruneton
38 */
39public class TryCatchBlockNode {
40
41    /**
42     * Beginning of the exception handler's scope (inclusive).
43     */
44    public LabelNode start;
45
46    /**
47     * End of the exception handler's scope (exclusive).
48     */
49    public LabelNode end;
50
51    /**
52     * Beginning of the exception handler's code.
53     */
54    public LabelNode handler;
55
56    /**
57     * Internal name of the type of exceptions handled by the handler. May be
58     * <tt>null</tt> to catch any exceptions (for "finally" blocks).
59     */
60    public String type;
61
62    /**
63     * Constructs a new {@link TryCatchBlockNode}.
64     *
65     * @param start beginning of the exception handler's scope (inclusive).
66     * @param end end of the exception handler's scope (exclusive).
67     * @param handler beginning of the exception handler's code.
68     * @param type internal name of the type of exceptions handled by the
69     *        handler, or <tt>null</tt> to catch any exceptions (for "finally"
70     *        blocks).
71     */
72    public TryCatchBlockNode(
73        final LabelNode start,
74        final LabelNode end,
75        final LabelNode handler,
76        final String type)
77    {
78        this.start = start;
79        this.end = end;
80        this.handler = handler;
81        this.type = type;
82    }
83
84    /**
85     * Makes the given visitor visit this try catch block.
86     *
87     * @param mv a method visitor.
88     */
89    public void accept(final MethodVisitor mv) {
90        mv.visitTryCatchBlock(start.getLabel(), end.getLabel(), handler == null
91                ? null
92                : handler.getLabel(), type);
93    }
94}
95