Attributepublic abstract class Attribute extends Object implements Serializable, Node, CloneableAbstract super class for Attribute objects. Currently the
ConstantValue, SourceFile, Code,
Exceptiontable, LineNumberTable,
LocalVariableTable, InnerClasses and
Synthetic attributes are supported. The
Unknown attribute stands for non-standard-attributes. |
Fields Summary |
---|
protected int | name_index | protected int | length | protected byte | tag | protected ConstantPool | constant_pool | private static HashMap | readers |
Constructors Summary |
---|
protected Attribute(byte tag, int name_index, int length, ConstantPool constant_pool)
this.tag = tag;
this.name_index = name_index;
this.length = length;
this.constant_pool = constant_pool;
|
Methods Summary |
---|
public abstract void | accept(com.sun.org.apache.bcel.internal.classfile.Visitor v)Called by objects that are traversing the nodes of the tree implicitely
defined by the contents of a Java class. I.e., the hierarchy of methods,
fields, attributes, etc. spawns a tree of objects.
| public static void | addAttributeReader(java.lang.String name, com.sun.org.apache.bcel.internal.classfile.AttributeReader r)Add an Attribute reader capable of parsing (user-defined) attributes
named "name". You should not add readers for the standard attributes
such as "LineNumberTable", because those are handled internally.
readers.put(name, r);
| public java.lang.Object | clone()Use copy() if you want to have a deep copy(), i.e., with all references
copied correctly.
Object o = null;
try {
o = super.clone();
} catch(CloneNotSupportedException e) {
e.printStackTrace(); // Never occurs
}
return o;
| public abstract com.sun.org.apache.bcel.internal.classfile.Attribute | copy(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)
| public void | dump(java.io.DataOutputStream file)Dump attribute to file stream in binary format.
file.writeShort(name_index);
file.writeInt(length);
| public final com.sun.org.apache.bcel.internal.classfile.ConstantPool | getConstantPool() return constant_pool;
| public final int | getLength() return length;
| public final int | getNameIndex() return name_index;
| public final byte | getTag() return tag;
| public static final com.sun.org.apache.bcel.internal.classfile.Attribute | readAttribute(java.io.DataInputStream file, com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)
ConstantUtf8 c;
String name;
int name_index;
int length;
byte tag = Constants.ATTR_UNKNOWN; // Unknown attribute
// Get class name from constant pool via `name_index' indirection
name_index = (int)file.readUnsignedShort();
c = (ConstantUtf8)constant_pool.getConstant(name_index,
Constants.CONSTANT_Utf8);
name = c.getBytes();
// Length of data in bytes
length = file.readInt();
// Compare strings to find known attribute
for(byte i=0; i < Constants.KNOWN_ATTRIBUTES; i++) {
if(name.equals(Constants.ATTRIBUTE_NAMES[i])) {
tag = i; // found!
break;
}
}
// Call proper constructor, depending on `tag'
switch(tag) {
case Constants.ATTR_UNKNOWN:
AttributeReader r = (AttributeReader)readers.get(name);
if(r != null)
return r.createAttribute(name_index, length, file, constant_pool);
else
return new Unknown(name_index, length, file, constant_pool);
case Constants.ATTR_CONSTANT_VALUE:
return new ConstantValue(name_index, length, file, constant_pool);
case Constants.ATTR_SOURCE_FILE:
return new SourceFile(name_index, length, file, constant_pool);
case Constants.ATTR_CODE:
return new Code(name_index, length, file, constant_pool);
case Constants.ATTR_EXCEPTIONS:
return new ExceptionTable(name_index, length, file, constant_pool);
case Constants.ATTR_LINE_NUMBER_TABLE:
return new LineNumberTable(name_index, length, file, constant_pool);
case Constants.ATTR_LOCAL_VARIABLE_TABLE:
return new LocalVariableTable(name_index, length, file, constant_pool);
case Constants.ATTR_INNER_CLASSES:
return new InnerClasses(name_index, length, file, constant_pool);
case Constants.ATTR_SYNTHETIC:
return new Synthetic(name_index, length, file, constant_pool);
case Constants.ATTR_DEPRECATED:
return new Deprecated(name_index, length, file, constant_pool);
case Constants.ATTR_PMG:
return new PMGClass(name_index, length, file, constant_pool);
case Constants.ATTR_SIGNATURE:
return new Signature(name_index, length, file, constant_pool);
case Constants.ATTR_STACK_MAP:
return new StackMap(name_index, length, file, constant_pool);
default: // Never reached
throw new IllegalStateException("Ooops! default case reached.");
}
| public static void | removeAttributeReader(java.lang.String name)Remove attribute reader
readers.remove(name);
| public final void | setConstantPool(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)
this.constant_pool = constant_pool;
| public final void | setLength(int length)
this.length = length;
| public final void | setNameIndex(int name_index)
this.name_index = name_index;
| public java.lang.String | toString()
return Constants.ATTRIBUTE_NAMES[tag];
|
|