001package serp.bytecode;
002
003import java.io.*;
004
005import 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 */
013public 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}