FileDocCategorySizeDatePackage
Attribute.javaAPI DocJava SE 5 API9212Fri Aug 26 14:55:16 BST 2005com.sun.org.apache.bcel.internal.classfile

Attribute

public abstract class Attribute extends Object implements Node, Cloneable
Abstract 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.
version
$Id: Attribute.java,v 1.1.1.1 2001/10/29 19:59:57 jvanzyl Exp $
author
M. Dahm
see
ConstantValue
see
SourceFile
see
Code
see
Unknown
see
ExceptionTable
see
LineNumberTable
see
LocalVariableTable
see
InnerClasses
see
Synthetic
see
Deprecated

Fields Summary
protected int
name_index
protected int
length
protected byte
tag
protected ConstantPool
constant_pool
Constructors Summary
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 voidaccept(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.

param
v Visitor object

public java.lang.Objectclone()
Use copy() if you want to have a deep copy(), i.e., with all references copied correctly.

return
shallow copy of this attribute

    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.Attributecopy(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)

return
deep copy of this attribute

public voiddump(java.io.DataOutputStream file)
Dump attribute to file stream in binary format.

param
file Output file stream
throw
IOException

    file.writeShort(name_index);
    file.writeInt(length);
  
public final com.sun.org.apache.bcel.internal.classfile.ConstantPoolgetConstantPool()

return
Constant pool used by this object.
see
ConstantPool

 return constant_pool; 
public final intgetLength()

return
Length of attribute field in bytes.

 return length; 
public final intgetNameIndex()

return
Name index in constant pool of attribute name.

 return name_index; 
public final bytegetTag()

return
Tag of attribute, i.e., its type. Value may not be altered, thus there is no setTag() method.

 return tag; 
static final com.sun.org.apache.bcel.internal.classfile.AttributereadAttribute(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:
      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 InternalError("Ooops! default case reached.");
    }
  
public final voidsetConstantPool(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)

param
constant_pool Constant pool to be used for this object.
see
ConstantPool

    this.constant_pool = constant_pool;
  
public final voidsetLength(int length)

param
Attribute length in bytes.

    this.length = length;
  
public final voidsetNameIndex(int name_index)

param
name_index of attribute.

    this.name_index = name_index;
  
public java.lang.StringtoString()

return
attribute name.

    return Constants.ATTRIBUTE_NAMES[tag];