EnclosingMethodAttributepublic class EnclosingMethodAttribute extends Attribute The EnclosingMethod attribute is an optional fixed-length attribute in
the attributes table of the ClassFile structure. A class must have an
EnclosingMethod attribute if and only if it is a local class or an
anonymous class. A class may have no more than one EnclosingMethod attribute.
The EnclosingMethod attribute has the following format:
EnclosingMethod_attribute {
u2 attribute_name_index;
u4 attribute_length;
u2 class_index
u2 method_index;
}
The items of the EnclosingMethod_attribute structure are as follows:
- attribute_name_index
- The value of the attribute_name_index item must be a valid index
into the constant_pool table. The constant_pool entry at that index
must be a CONSTANT_Utf8_info structure representing the
string "EnclosingMethod".
- attribute_length
- The value of the attribute_length item is four.
- class_index
- The value of the class_index item must be a valid index into the
constant_pool table. The constant_pool entry at that index must be a
CONSTANT_Class_info structure representing the
innermost class that encloses the declaration of the current class.
- method_index
- If the current class is not immediately enclosed by a method or
constructor, then the value of the method_index item must be zero.
Otherwise, the value of the method_index item must be a valid
index into the constant_pool table. The constant_pool entry at that
index must be a CONSTANT_NameAndType_info structure
representing a the name and type of a method in the class
referenced by the class_index attribute above. It is the
responsibility of the Java compiler to ensure that the method
identified via the method_index is indeed the closest lexically
enclosing method of the class that contains this EnclosingMethod
attribute.
|
Fields Summary |
---|
public String | owner | public String | name | public String | desc |
Constructors Summary |
---|
public EnclosingMethodAttribute()
super("EnclosingMethod");
| public EnclosingMethodAttribute(String owner, String name, String desc)
this();
this.owner = owner;
this.name = name;
this.desc = desc;
|
Methods Summary |
---|
protected oracle.toplink.libraries.asm.Attribute | read(oracle.toplink.libraries.asm.ClassReader cr, int off, int len, char[] buf, int codeOff, oracle.toplink.libraries.asm.Label[] labels)
// CONSTANT_Class_info
String o = cr.readClass( off, buf);
// CONSTANT_NameAndType_info (skip CONSTANT_NameAndType tag)
int index = cr.getItem(cr.readUnsignedShort(off + 2));
String n = null;
String d = null;
if( index!=0) {
n = cr.readUTF8(index, buf);
d = cr.readUTF8(index + 2, buf);
}
return new EnclosingMethodAttribute( o, n, d);
| public java.lang.String | toString()
return new StringBuffer("owner:").append( owner)
.append(" name:").append(name)
.append(" desc:").append(desc).toString();
| protected oracle.toplink.libraries.asm.ByteVector | write(oracle.toplink.libraries.asm.ClassWriter cw, byte[] code, int len, int maxStack, int maxLocals)
return new ByteVector().putShort(cw.newClass(owner))
.putShort( name==null || desc==null ? 0 : cw.newNameType(name, desc));
|
|