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 local variable declaration.
36 *
37 * @author Eric Bruneton
38 */
39public class LocalVariableNode {
40
41    /**
42     * The name of a local variable.
43     */
44    public String name;
45
46    /**
47     * The type descriptor of this local variable.
48     */
49    public String desc;
50
51    /**
52     * The signature of this local variable. May be <tt>null</tt>.
53     */
54    public String signature;
55
56    /**
57     * The first instruction corresponding to the scope of this local variable
58     * (inclusive).
59     */
60    public LabelNode start;
61
62    /**
63     * The last instruction corresponding to the scope of this local variable
64     * (exclusive).
65     */
66    public LabelNode end;
67
68    /**
69     * The local variable's index.
70     */
71    public int index;
72
73    /**
74     * Constructs a new {@link LocalVariableNode}.
75     *
76     * @param name the name of a local variable.
77     * @param desc the type descriptor of this local variable.
78     * @param signature the signature of this local variable. May be
79     *        <tt>null</tt>.
80     * @param start the first instruction corresponding to the scope of this
81     *        local variable (inclusive).
82     * @param end the last instruction corresponding to the scope of this local
83     *        variable (exclusive).
84     * @param index the local variable's index.
85     */
86    public LocalVariableNode(
87        final String name,
88        final String desc,
89        final String signature,
90        final LabelNode start,
91        final LabelNode end,
92        final int index)
93    {
94        this.name = name;
95        this.desc = desc;
96        this.signature = signature;
97        this.start = start;
98        this.end = end;
99        this.index = index;
100    }
101
102    /**
103     * Makes the given visitor visit this local variable declaration.
104     *
105     * @param mv a method visitor.
106     */
107    public void accept(final MethodVisitor mv) {
108        mv.visitLocalVariable(name,
109                desc,
110                signature,
111                start.getLabel(),
112                end.getLabel(),
113                index);
114    }
115}
116