1 17 package org.apache.bcel.classfile; 18 19 import java.io.DataInputStream ; 20 import java.io.DataOutputStream ; 21 import java.io.IOException ; 22 23 33 public final class StackMapEntry implements Cloneable { 34 35 private int byte_code_offset; 36 private int number_of_locals; 37 private StackMapType[] types_of_locals; 38 private int number_of_stack_items; 39 private StackMapType[] types_of_stack_items; 40 private ConstantPool constant_pool; 41 42 43 48 StackMapEntry(DataInputStream file, ConstantPool constant_pool) throws IOException { 49 this(file.readShort(), file.readShort(), null, -1, null, constant_pool); 50 types_of_locals = new StackMapType[number_of_locals]; 51 for (int i = 0; i < number_of_locals; i++) { 52 types_of_locals[i] = new StackMapType(file, constant_pool); 53 } 54 number_of_stack_items = file.readShort(); 55 types_of_stack_items = new StackMapType[number_of_stack_items]; 56 for (int i = 0; i < number_of_stack_items; i++) { 57 types_of_stack_items[i] = new StackMapType(file, constant_pool); 58 } 59 } 60 61 62 public StackMapEntry(int byte_code_offset, int number_of_locals, 63 StackMapType[] types_of_locals, int number_of_stack_items, 64 StackMapType[] types_of_stack_items, ConstantPool constant_pool) { 65 this.byte_code_offset = byte_code_offset; 66 this.number_of_locals = number_of_locals; 67 this.types_of_locals = types_of_locals; 68 this.number_of_stack_items = number_of_stack_items; 69 this.types_of_stack_items = types_of_stack_items; 70 this.constant_pool = constant_pool; 71 } 72 73 74 80 public final void dump( DataOutputStream file ) throws IOException { 81 file.writeShort(byte_code_offset); 82 file.writeShort(number_of_locals); 83 for (int i = 0; i < number_of_locals; i++) { 84 types_of_locals[i].dump(file); 85 } 86 file.writeShort(number_of_stack_items); 87 for (int i = 0; i < number_of_stack_items; i++) { 88 types_of_stack_items[i].dump(file); 89 } 90 } 91 92 93 96 public final String toString() { 97 StringBuffer buf = new StringBuffer (64); 98 buf.append("(offset=").append(byte_code_offset); 99 if (number_of_locals > 0) { 100 buf.append(", locals={"); 101 for (int i = 0; i < number_of_locals; i++) { 102 buf.append(types_of_locals[i]); 103 if (i < number_of_locals - 1) { 104 buf.append(", "); 105 } 106 } 107 buf.append("}"); 108 } 109 if (number_of_stack_items > 0) { 110 buf.append(", stack items={"); 111 for (int i = 0; i < number_of_stack_items; i++) { 112 buf.append(types_of_stack_items[i]); 113 if (i < number_of_stack_items - 1) { 114 buf.append(", "); 115 } 116 } 117 buf.append("}"); 118 } 119 buf.append(")"); 120 return buf.toString(); 121 } 122 123 124 public void setByteCodeOffset( int b ) { 125 byte_code_offset = b; 126 } 127 128 129 public int getByteCodeOffset() { 130 return byte_code_offset; 131 } 132 133 134 public void setNumberOfLocals( int n ) { 135 number_of_locals = n; 136 } 137 138 139 public int getNumberOfLocals() { 140 return number_of_locals; 141 } 142 143 144 public void setTypesOfLocals( StackMapType[] t ) { 145 types_of_locals = t; 146 } 147 148 149 public StackMapType[] getTypesOfLocals() { 150 return types_of_locals; 151 } 152 153 154 public void setNumberOfStackItems( int n ) { 155 number_of_stack_items = n; 156 } 157 158 159 public int getNumberOfStackItems() { 160 return number_of_stack_items; 161 } 162 163 164 public void setTypesOfStackItems( StackMapType[] t ) { 165 types_of_stack_items = t; 166 } 167 168 169 public StackMapType[] getTypesOfStackItems() { 170 return types_of_stack_items; 171 } 172 173 174 177 public StackMapEntry copy() { 178 try { 179 return (StackMapEntry) clone(); 180 } catch (CloneNotSupportedException e) { 181 } 182 return null; 183 } 184 185 186 193 public void accept( Visitor v ) { 194 v.visitStackMapEntry(this); 195 } 196 197 198 201 public final ConstantPool getConstantPool() { 202 return constant_pool; 203 } 204 205 206 209 public final void setConstantPool( ConstantPool constant_pool ) { 210 this.constant_pool = constant_pool; 211 } 212 } 213 | Popular Tags |