76 77 /** 78 * Beginning of the default handler block. 79 */ 80 public LabelNode dflt; 81 82 /** 83 * The values of the keys. This list is a list of {@link Integer} objects. 84 */ 85 public List<Integer> keys; 86 87 /** 88 * Beginnings of the handler blocks. This list is a list of 89 * {@link LabelNode} objects. 90 */ 91 public List<LabelNode> labels; 92 93 /** 94 * Constructs a new {@link LookupSwitchInsnNode}. 95 * 96 * @param dflt beginning of the default handler block. 97 * @param keys the values of the keys. 98 * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is 99 * the beginning of the handler block for the <tt>keys[i]</tt> key. 100 */ 101 public LookupSwitchInsnNode( 102 final LabelNode dflt, 103 final int[] keys, 104 final LabelNode[] labels) 105 { 106 super(Opcodes.LOOKUPSWITCH); 107 this.dflt = dflt; 108 this.keys = new ArrayList<Integer>(keys == null ? 0 : keys.length); 109 this.labels = new ArrayList<LabelNode>(labels == null ? 0 : labels.length); 110 if (keys != null) { 111 for (int i = 0; i < keys.length; ++i) { 112 this.keys.add(new Integer(keys[i])); 113 } 114 } 115 if (labels != null) { 116 this.labels.addAll(Arrays.asList(labels)); 117 } 118 } 119 120 @Override 121 public int getType() { 122 return LOOKUPSWITCH_INSN; 123 } 124 125 @Override 126 public void accept(final MethodVisitor mv) { 127 int[] keys = new int[this.keys.size()]; 128 for (int i = 0; i < keys.length; ++i) { 129 keys[i] = this.keys.get(i).intValue(); 130 } 131 Label[] labels = new Label[this.labels.size()]; 132 for (int i = 0; i < labels.length; ++i) { 133 labels[i] = this.labels.get(i).getLabel(); 134 } 135 mv.visitLookupSwitchInsn(dflt.getLabel(), keys, labels); 136 } 137 138 @Override 139 public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) { 140 LookupSwitchInsnNode clone = new LookupSwitchInsnNode(clone(dflt, 141 labels), null, clone(this.labels, labels)); 142 clone.keys.addAll(keys); 143 return clone; 144 } 145 } | 76 77 /** 78 * Beginning of the default handler block. 79 */ 80 public LabelNode dflt; 81 82 /** 83 * The values of the keys. This list is a list of {@link Integer} objects. 84 */ 85 public List<Integer> keys; 86 87 /** 88 * Beginnings of the handler blocks. This list is a list of 89 * {@link LabelNode} objects. 90 */ 91 public List<LabelNode> labels; 92 93 /** 94 * Constructs a new {@link LookupSwitchInsnNode}. 95 * 96 * @param dflt 97 * beginning of the default handler block. 98 * @param keys 99 * the values of the keys. 100 * @param labels 101 * beginnings of the handler blocks. <tt>labels[i]</tt> is the 102 * beginning of the handler block for the <tt>keys[i]</tt> key. 103 */ 104 public LookupSwitchInsnNode(final LabelNode dflt, final int[] keys, 105 final LabelNode[] labels) { 106 super(Opcodes.LOOKUPSWITCH); 107 this.dflt = dflt; 108 this.keys = new ArrayList<Integer>(keys == null ? 0 : keys.length); 109 this.labels = new ArrayList<LabelNode>(labels == null ? 0 110 : labels.length); 111 if (keys != null) { 112 for (int i = 0; i < keys.length; ++i) { 113 this.keys.add(new Integer(keys[i])); 114 } 115 } 116 if (labels != null) { 117 this.labels.addAll(Arrays.asList(labels)); 118 } 119 } 120 121 @Override 122 public int getType() { 123 return LOOKUPSWITCH_INSN; 124 } 125 126 @Override 127 public void accept(final MethodVisitor mv) { 128 int[] keys = new int[this.keys.size()]; 129 for (int i = 0; i < keys.length; ++i) { 130 keys[i] = this.keys.get(i).intValue(); 131 } 132 Label[] labels = new Label[this.labels.size()]; 133 for (int i = 0; i < labels.length; ++i) { 134 labels[i] = this.labels.get(i).getLabel(); 135 } 136 mv.visitLookupSwitchInsn(dflt.getLabel(), keys, labels); 137 acceptAnnotations(mv); 138 } 139 140 @Override 141 public AbstractInsnNode clone(final Map<LabelNode, LabelNode> labels) { 142 LookupSwitchInsnNode clone = new LookupSwitchInsnNode(clone(dflt, 143 labels), null, clone(this.labels, labels)); 144 clone.keys.addAll(keys); 145 return clone.cloneAnnotations(this); 146 } 147 } |