Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
ASM: a very small and fast Java bytecode manipulation framework Copyright (c) 2000-2007 INRIA, France Telecom All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 package org.mockito.asm;

A non standard class, field, method or code attribute.

Author(s):
Eric Bruneton
Eugene Kuleshov
 
 public class Attribute {

    
The type of this attribute.
 
     public final String type;

    
The raw value of this attribute, used only for unknown attributes.
 
     byte[] value;

    
The next attribute in this attribute list. May be null.
 
     Attribute next;

    
Constructs a new empty attribute.

Parameters:
type the type of the attribute.
 
     protected Attribute(final String type) {
         this. = type;
     }

    
Returns true if this type of attribute is unknown. The default implementation of this method always returns true.

Returns:
true if this type of attribute is unknown.
 
     public boolean isUnknown() {
         return true;
     }

    
Returns true if this type of attribute is a code attribute.

Returns:
true if this type of attribute is a code attribute.
 
     public boolean isCodeAttribute() {
         return false;
     }

    
Returns the labels corresponding to this attribute.

Returns:
the labels corresponding to this attribute, or null if this attribute is not a code attribute that contains labels.
 
     protected Label[] getLabels() {
         return null;
     }

    
Reads a type attribute. This method must return a new Attribute object, of type type, corresponding to the len bytes starting at the given offset, in the given class reader.

Parameters:
cr the class that contains the attribute to be read.
off index of the first byte of the attribute's content in ClassReader.b. The 6 attribute header bytes, containing the type and the length of the attribute, are not taken into account here.
len the length of the attribute's content.
buf buffer to be used to call readUTF8, readClass or readConst.
codeOff index of the first byte of code's attribute content in cr.b, or -1 if the attribute to be read is not a code attribute. The 6 attribute header bytes, containing the type and the length of the attribute, are not taken into account here.
labels the labels of the method's code, or null if the attribute to be read is not a code attribute.
Returns:
a new Attribute object corresponding to the given bytes.
    protected Attribute read(
        final ClassReader cr,
        final int off,
        final int len,
        final char[] buf,
        final int codeOff,
        final Label[] labels)
    {
        Attribute attr = new Attribute();
        attr.value = new byte[len];
        System.arraycopy(cr.boffattr.value, 0, len);
        return attr;
    }

    
Returns the byte array form of this attribute.

Parameters:
cw the class to which this attribute must be added. This parameter can be used to add to the constant pool of this class the items that corresponds to this attribute.
code the bytecode of the method corresponding to this code attribute, or null if this attribute is not a code attributes.
len the length of the bytecode of the method corresponding to this code attribute, or null if this attribute is not a code attribute.
maxStack the maximum stack size of the method corresponding to this code attribute, or -1 if this attribute is not a code attribute.
maxLocals the maximum number of local variables of the method corresponding to this code attribute, or -1 if this attribute is not a code attribute.
Returns:
the byte array form of this attribute.
    protected ByteVector write(
        final ClassWriter cw,
        final byte[] code,
        final int len,
        final int maxStack,
        final int maxLocals)
    {
        ByteVector v = new ByteVector();
        v.data = ;
        v.length = .;
        return v;
    }

    
Returns the length of the attribute list that begins with this attribute.

Returns:
the length of the attribute list that begins with this attribute.
    final int getCount() {
        int count = 0;
        Attribute attr = this;
        while (attr != null) {
            count += 1;
            attr = attr.next;
        }
        return count;
    }

    
Returns the size of all the attributes in this attribute list.

Parameters:
cw the class writer to be used to convert the attributes into byte arrays, with the write method.
code the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.
len the length of the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.
maxStack the maximum stack size of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.
maxLocals the maximum number of local variables of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.
Returns:
the size of all the attributes in this attribute list. This size includes the size of the attribute headers.
    final int getSize(
        final ClassWriter cw,
        final byte[] code,
        final int len,
        final int maxStack,
        final int maxLocals)
    {
        Attribute attr = this;
        int size = 0;
        while (attr != null) {
            cw.newUTF8(attr.type);
            size += attr.write(cwcodelenmaxStackmaxLocals). + 6;
            attr = attr.next;
        }
        return size;
    }

    
Writes all the attributes of this attribute list in the given byte vector.

Parameters:
cw the class writer to be used to convert the attributes into byte arrays, with the write method.
code the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.
len the length of the bytecode of the method corresponding to these code attributes, or null if these attributes are not code attributes.
maxStack the maximum stack size of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.
maxLocals the maximum number of local variables of the method corresponding to these code attributes, or -1 if these attributes are not code attributes.
out where the attributes must be written.
    final void put(
        final ClassWriter cw,
        final byte[] code,
        final int len,
        final int maxStack,
        final int maxLocals,
        final ByteVector out)
    {
        Attribute attr = this;
        while (attr != null) {
            ByteVector b = attr.write(cwcodelenmaxStackmaxLocals);
            out.putShort(cw.newUTF8(attr.type)).putInt(b.length);
            out.putByteArray(b.data, 0, b.length);
            attr = attr.next;
        }
    }
New to GrepCode? Check out our FAQ X