1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/*** 2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ASM: a very small and fast Java bytecode manipulation framework 3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Copyright (c) 2000-2007 INRIA, France Telecom 4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * All rights reserved. 5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Redistribution and use in source and binary forms, with or without 7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * modification, are permitted provided that the following conditions 8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * are met: 9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 1. Redistributions of source code must retain the above copyright 10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * notice, this list of conditions and the following disclaimer. 11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 2. Redistributions in binary form must reproduce the above copyright 12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * notice, this list of conditions and the following disclaimer in the 13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * documentation and/or other materials provided with the distribution. 14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 3. Neither the name of the copyright holders nor the names of its 15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * contributors may be used to endorse or promote products derived from 16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this software without specific prior written permission. 17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * THE POSSIBILITY OF SUCH DAMAGE. 29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpackage org.mockito.asm.tree; 31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport java.util.List; 33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport java.util.Map; 34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport org.mockito.asm.MethodVisitor; 36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/** 38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * A node that represents a bytecode instruction. <i>An instruction can appear 39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * at most once in at most one {@link InsnList} at a time</i>. 40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @author Eric Bruneton 42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic abstract class AbstractInsnNode { 44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link InsnNode} instructions. 47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int INSN = 0; 49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link IntInsnNode} instructions. 52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int INT_INSN = 1; 54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link VarInsnNode} instructions. 57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int VAR_INSN = 2; 59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link TypeInsnNode} instructions. 62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int TYPE_INSN = 3; 64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link FieldInsnNode} instructions. 67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int FIELD_INSN = 4; 69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link MethodInsnNode} instructions. 72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int METHOD_INSN = 5; 74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link JumpInsnNode} instructions. 77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int JUMP_INSN = 6; 79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link LabelNode} "instructions". 82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int LABEL = 7; 84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link LdcInsnNode} instructions. 87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int LDC_INSN = 8; 89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link IincInsnNode} instructions. 92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int IINC_INSN = 9; 94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link TableSwitchInsnNode} instructions. 97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int TABLESWITCH_INSN = 10; 99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link LookupSwitchInsnNode} instructions. 102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int LOOKUPSWITCH_INSN = 11; 104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link MultiANewArrayInsnNode} instructions. 107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int MULTIANEWARRAY_INSN = 12; 109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link FrameNode} "instructions". 112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int FRAME = 13; 114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The type of {@link LineNumberNode} "instructions". 117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public static final int LINE = 14; 119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * The opcode of this instruction. 122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen protected int opcode; 124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Previous instruction in the list to which this instruction belongs. 127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 128674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen AbstractInsnNode prev; 129674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 130674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 131674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Next instruction in the list to which this instruction belongs. 132674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 133674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen AbstractInsnNode next; 134674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 135674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 136674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Index of this instruction in the list to which it belongs. The value of 137674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this field is correct only when {@link InsnList#cache} is not null. A 138674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * value of -1 indicates that this instruction does not belong to any 139674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * {@link InsnList}. 140674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 141674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen int index; 142674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 143674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 144674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Constructs a new {@link AbstractInsnNode}. 145674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 146674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param opcode the opcode of the instruction to be constructed. 147674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 148674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen protected AbstractInsnNode(final int opcode) { 149674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen this.opcode = opcode; 150674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen this.index = -1; 151674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 152674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 153674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 154674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the opcode of this instruction. 155674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 156674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the opcode of this instruction. 157674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 158674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public int getOpcode() { 159674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return opcode; 160674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 161674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 162674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 163674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the type of this instruction. 164674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 165674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the type of this instruction, i.e. one the constants defined in 166674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * this class. 167674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 168674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public abstract int getType(); 169674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 170674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 171674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the previous instruction in the list to which this instruction 172674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * belongs, if any. 173674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 174674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the previous instruction in the list to which this instruction 175674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * belongs, if any. May be <tt>null</tt>. 176674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 177674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public AbstractInsnNode getPrevious() { 178674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return prev; 179674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 180674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 181674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 182674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the next instruction in the list to which this instruction 183674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * belongs, if any. 184674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 185674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the next instruction in the list to which this instruction 186674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * belongs, if any. May be <tt>null</tt>. 187674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 188674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public AbstractInsnNode getNext() { 189674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return next; 190674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 191674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 192674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 193674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Makes the given code visitor visit this instruction. 194674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 195674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param cv a code visitor. 196674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 197674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public abstract void accept(final MethodVisitor cv); 198674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 199674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 200674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns a copy of this instruction. 201674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 202674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param labels a map from LabelNodes to cloned LabelNodes. 203674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return a copy of this instruction. The returned instruction does not 204674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * belong to any {@link InsnList}. 205674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 206674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen public abstract AbstractInsnNode clone(final Map labels); 207674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 208674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 209674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the clone of the given label. 210674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 211674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param label a label. 212674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param map a map from LabelNodes to cloned LabelNodes. 213674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the clone of the given label. 214674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 215674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen static LabelNode clone(final LabelNode label, final Map map) { 216674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return (LabelNode) map.get(label); 217674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 218674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen 219674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen /** 220674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * Returns the clones of the given labels. 221674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * 222674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param labels a list of labels. 223674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @param map a map from LabelNodes to cloned LabelNodes. 224674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen * @return the clones of the given labels. 225674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen */ 226674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen static LabelNode[] clone(final List labels, final Map map) { 227674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen LabelNode[] clones = new LabelNode[labels.size()]; 228674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen for (int i = 0; i < clones.length; ++i) { 229674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen clones[i] = (LabelNode) map.get(labels.get(i)); 230674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 231674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen return clones; 232674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen } 233674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen} 234