KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > asm > tree > LookupSwitchInsnNode


1 /***
2  * ASM: a very small and fast Java bytecode manipulation framework
3  * Copyright (c) 2000-2005 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  */

30 package com.tc.asm.tree;
31
32 import com.tc.asm.Label;
33 import com.tc.asm.Opcodes;
34 import com.tc.asm.MethodVisitor;
35
36 import java.util.List JavaDoc;
37 import java.util.ArrayList JavaDoc;
38 import java.util.Arrays JavaDoc;
39
40 /**
41  * A node that represents a LOOKUPSWITCH instruction.
42  *
43  * @author Eric Bruneton
44  */

45 public class LookupSwitchInsnNode extends AbstractInsnNode {
46
47     /**
48      * Beginning of the default handler block.
49      */

50     public Label dflt;
51
52     /**
53      * The values of the keys. This list is a list of {@link Integer} objects.
54      */

55     public List JavaDoc keys;
56
57     /**
58      * Beginnings of the handler blocks. This list is a list of {@link Label}
59      * objects.
60      */

61     public List JavaDoc labels;
62
63     /**
64      * Constructs a new {@link LookupSwitchInsnNode}.
65      *
66      * @param dflt beginning of the default handler block.
67      * @param keys the values of the keys.
68      * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
69      * the beginning of the handler block for the <tt>keys[i]</tt> key.
70      */

71     public LookupSwitchInsnNode(
72         final Label dflt,
73         final int[] keys,
74         final Label[] labels)
75     {
76         super(Opcodes.LOOKUPSWITCH);
77         this.dflt = dflt;
78         this.keys = new ArrayList JavaDoc(keys == null ? 0 : keys.length);
79         this.labels = new ArrayList JavaDoc(labels == null ? 0 : labels.length);
80         if (keys != null) {
81             for (int i = 0; i < keys.length; ++i) {
82                 this.keys.add(new Integer JavaDoc(keys[i]));
83             }
84         }
85         if (labels != null) {
86             this.labels.addAll(Arrays.asList(labels));
87         }
88     }
89
90     public void accept(final MethodVisitor mv) {
91         int[] keys = new int[this.keys.size()];
92         for (int i = 0; i < keys.length; ++i) {
93             keys[i] = ((Integer JavaDoc) this.keys.get(i)).intValue();
94         }
95         Label[] labels = new Label[this.labels.size()];
96         this.labels.toArray(labels);
97         mv.visitLookupSwitchInsn(dflt, keys, labels);
98     }
99
100     public int getType() {
101         return LOOKUPSWITCH_INSN;
102     }
103 }
104
Popular Tags