1 package com.sun.org.apache.bcel.internal.classfile; 2 3 56 57 import com.sun.org.apache.bcel.internal.Constants; 58 import java.io.*; 59 import java.util.*; 60 61 69 public final class Unknown extends Attribute { 70 private byte[] bytes; 71 private String name; 72 73 private static HashMap unknown_attributes = new HashMap(); 74 75 77 static Unknown[] getUnknownAttributes() { 78 Unknown[] unknowns = new Unknown[unknown_attributes.size()]; 79 Iterator entries = unknown_attributes.values().iterator(); 80 81 for(int i=0; entries.hasNext(); i++) 82 unknowns[i] = (Unknown)entries.next(); 83 84 unknown_attributes.clear(); 85 return unknowns; 86 } 87 88 92 public Unknown(Unknown c) { 93 this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); 94 } 95 96 104 public Unknown(int name_index, int length, byte[] bytes, 105 ConstantPool constant_pool) 106 { 107 super(Constants.ATTR_UNKNOWN, name_index, length, constant_pool); 108 this.bytes = bytes; 109 110 name = ((ConstantUtf8)constant_pool.getConstant(name_index, 111 Constants.CONSTANT_Utf8)).getBytes(); 112 unknown_attributes.put(name, this); 113 } 114 115 123 Unknown(int name_index, int length, DataInputStream file, 124 ConstantPool constant_pool) 125 throws IOException 126 { 127 this(name_index, length, (byte [])null, constant_pool); 128 129 if(length > 0) { 130 bytes = new byte[length]; 131 file.readFully(bytes); 132 } 133 } 134 135 142 public void accept(Visitor v) { 143 v.visitUnknown(this); 144 } 145 151 public final void dump(DataOutputStream file) throws IOException 152 { 153 super.dump(file); 154 if(length > 0) 155 file.write(bytes, 0, length); 156 } 157 160 public final byte[] getBytes() { return bytes; } 161 162 165 public final String getName() { return name; } 166 167 170 public final void setBytes(byte[] bytes) { 171 this.bytes = bytes; 172 } 173 174 177 public final String toString() { 178 if(length == 0 || bytes == null) 179 return "(Unknown attribute " + name + ")"; 180 181 String hex; 182 if(length > 10) { 183 byte[] tmp = new byte[10]; 184 System.arraycopy(bytes, 0, tmp, 0, 10); 185 hex = Utility.toHexString(tmp) + "... (truncated)"; 186 } 187 else 188 hex = Utility.toHexString(bytes); 189 190 return "(Unknown attribute " + name + ": " + hex + ")"; 191 } 192 193 196 public Attribute copy(ConstantPool constant_pool) { 197 Unknown c = (Unknown)clone(); 198 199 if(bytes != null) 200 c.bytes = (byte[])bytes.clone(); 201 202 c.constant_pool = constant_pool; 203 return c; 204 } 205 } 206 | Popular Tags |