001 package serp.bytecode; 002 003 import java.io.*; 004 005 import serp.bytecode.visitor.*; 006 007 /** 008 * An unrecognized attribute; class files are allowed to contain 009 * attributes that are not recognized, and the JVM must ignore them. 010 * 011 * @author Abe White 012 */ 013 public class UnknownAttribute extends Attribute { 014 private byte[] _value = new byte[0]; 015 016 UnknownAttribute(int nameIndex, Attributes owner) { 017 super(nameIndex, owner); 018 } 019 020 int getLength() { 021 return _value.length; 022 } 023 024 /** 025 * The value is of unknown content, so it is stored as a byte array. 026 */ 027 public byte[] getValue() { 028 return _value; 029 } 030 031 /** 032 * The value is of unknown content, so it is stored as a byte array. 033 */ 034 public void setValue(byte[] value) { 035 if (value == null) 036 value = new byte[0]; 037 _value = value; 038 } 039 040 public void acceptVisit(BCVisitor visit) { 041 visit.enterUnknownAttribute(this); 042 visit.exitUnknownAttribute(this); 043 } 044 045 void read(Attribute other) { 046 setValue(((UnknownAttribute) other).getValue()); 047 } 048 049 void read(DataInput in, int length) throws IOException { 050 _value = new byte[length]; 051 in.readFully(_value); 052 } 053 054 void write(DataOutput out, int length) throws IOException { 055 out.write(_value); 056 } 057 }