FileDocCategorySizeDatePackage
Unknown.javaAPI DocJava SE 6 API7150Tue Jun 10 00:22:18 BST 2008com.sun.org.apache.bcel.internal.classfile

Unknown

public final class Unknown extends Attribute
This class represents a reference to an unknown (i.e., application-specific) attribute of a class. It is instantiated from the Attribute.readAttribute() method. Applications that need to read in application-specific attributes should create an AttributeReader implementation and attach it via Attribute.addAttributeReader.
version
$Id: Unknown.java,v 1.1.2.1 2005/07/31 23:46:30 jeffsuttor Exp $
see
com.sun.org.apache.bcel.internal.classfile.Attribute
see
com.sun.org.apache.bcel.internal.classfile.AttributeReader
author
M. Dahm

Fields Summary
private byte[]
bytes
private String
name
private static HashMap
unknown_attributes
Constructors Summary
public Unknown(Unknown c)
Initialize from another object. Note that both objects use the same references (shallow copy). Use clone() for a physical copy.

    this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool());
  
public Unknown(int name_index, int length, byte[] bytes, ConstantPool constant_pool)
Create a non-standard attribute.

param
name_index Index in constant pool
param
length Content length in bytes
param
bytes Attribute contents
param
constant_pool Array of constants

    super(Constants.ATTR_UNKNOWN, name_index, length, constant_pool);
    this.bytes = bytes;

    name = ((ConstantUtf8)constant_pool.getConstant(name_index,
						    Constants.CONSTANT_Utf8)).getBytes();
    unknown_attributes.put(name, this);
  
Unknown(int name_index, int length, DataInputStream file, ConstantPool constant_pool)
Construct object from file stream.

param
name_index Index in constant pool
param
length Content length in bytes
param
file Input stream
param
constant_pool Array of constants
throws
IOException

    this(name_index, length, (byte [])null, constant_pool);

    if(length > 0) {
      bytes = new byte[length];
      file.readFully(bytes);
    }
  
Methods Summary
public 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

    v.visitUnknown(this);
  
public com.sun.org.apache.bcel.internal.classfile.Attributecopy(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)

return
deep copy of this attribute

    Unknown c = (Unknown)clone();

    if(bytes != null)
      c.bytes = (byte[])bytes.clone();

    c.constant_pool = constant_pool;
    return c;
  
public final voiddump(java.io.DataOutputStream file)
Dump unknown bytes to file stream.

param
file Output file stream
throws
IOException

    super.dump(file);
    if(length > 0)
      file.write(bytes, 0, length);
  
public final byte[]getBytes()

return
data bytes.

 return bytes; 
public final java.lang.StringgetName()

return
name of attribute.

 return name; 
static com.sun.org.apache.bcel.internal.classfile.Unknown[]getUnknownAttributes()

return
array of unknown attributes, but just one for each kind.


                
     
    Unknown[] unknowns = new Unknown[unknown_attributes.size()];
    Iterator  entries  = unknown_attributes.values().iterator();

    for(int i=0; entries.hasNext(); i++)
      unknowns[i] = (Unknown)entries.next();

    unknown_attributes.clear();
    return unknowns;
  
public final voidsetBytes(byte[] bytes)

param
bytes.

    this.bytes = bytes;
  
public final java.lang.StringtoString()

return
String representation.

    if(length == 0 || bytes == null)
      return "(Unknown attribute " + name + ")";

    String hex;
    if(length > 10) {
      byte[] tmp = new byte[10];
      System.arraycopy(bytes, 0, tmp, 0, 10);
      hex = Utility.toHexString(tmp) + "... (truncated)";
    }
    else
      hex = Utility.toHexString(bytes);

    return "(Unknown attribute " + name + ": " + hex + ")";