Search in sources :

Example 6 with Attribute

use of com.taobao.android.dx.cf.iface.Attribute in project atlas by alibaba.

the class AttributeFactory method parse0.

/**
     * Parses attribute content. The base class implements this by constructing
     * an instance of {@link RawAttribute}. Subclasses are expected to
     * override this to do something better in most cases.
     *
     * @param cf {@code non-null;} class file to parse from
     * @param context context to parse in; one of the {@code CTX_*}
     * constants
     * @param name {@code non-null;} the attribute name
     * @param offset offset into {@code bytes} to start parsing at; this
     * is the offset to the start of attribute data, not to the header
     * @param length the length of the attribute data
     * @param observer {@code null-ok;} parse observer to report to, if any
     * @return {@code non-null;} an appropriately-constructed {@link Attribute}
     */
protected Attribute parse0(DirectClassFile cf, int context, String name, int offset, int length, ParseObserver observer) {
    ByteArray bytes = cf.getBytes();
    ConstantPool pool = cf.getConstantPool();
    Attribute result = new RawAttribute(name, bytes, offset, length, pool);
    if (observer != null) {
        observer.parsed(bytes, offset, length, "attribute data");
    }
    return result;
}
Also used : RawAttribute(com.taobao.android.dx.cf.attrib.RawAttribute) Attribute(com.taobao.android.dx.cf.iface.Attribute) ConstantPool(com.taobao.android.dx.rop.cst.ConstantPool) RawAttribute(com.taobao.android.dx.cf.attrib.RawAttribute) ByteArray(com.taobao.android.dx.util.ByteArray)

Example 7 with Attribute

use of com.taobao.android.dx.cf.iface.Attribute in project atlas by alibaba.

the class AttributeListParser method parse.

/**
     * Does the actual parsing.
     */
private void parse() {
    int sz = list.size();
    // Skip the count.
    int at = offset + 2;
    ByteArray bytes = cf.getBytes();
    if (observer != null) {
        observer.parsed(bytes, offset, 2, "attributes_count: " + Hex.u2(sz));
    }
    for (int i = 0; i < sz; i++) {
        try {
            if (observer != null) {
                observer.parsed(bytes, at, 0, "\nattributes[" + i + "]:\n");
                observer.changeIndent(1);
            }
            Attribute attrib = attributeFactory.parse(cf, context, at, observer);
            at += attrib.byteLength();
            list.set(i, attrib);
            if (observer != null) {
                observer.changeIndent(-1);
                observer.parsed(bytes, at, 0, "end attributes[" + i + "]\n");
            }
        } catch (ParseException ex) {
            ex.addContext("...while parsing attributes[" + i + "]");
            throw ex;
        } catch (RuntimeException ex) {
            ParseException pe = new ParseException(ex);
            pe.addContext("...while parsing attributes[" + i + "]");
            throw pe;
        }
    }
    endOffset = at;
}
Also used : Attribute(com.taobao.android.dx.cf.iface.Attribute) ByteArray(com.taobao.android.dx.util.ByteArray) ParseException(com.taobao.android.dx.cf.iface.ParseException)

Example 8 with Attribute

use of com.taobao.android.dx.cf.iface.Attribute in project atlas by alibaba.

the class DirectClassFile method getSourceFile.

/** {@inheritDoc} */
public CstString getSourceFile() {
    AttributeList attribs = getAttributes();
    Attribute attSf = attribs.findFirst(AttSourceFile.ATTRIBUTE_NAME);
    if (attSf instanceof AttSourceFile) {
        return ((AttSourceFile) attSf).getSourceFile();
    }
    return null;
}
Also used : Attribute(com.taobao.android.dx.cf.iface.Attribute) AttributeList(com.taobao.android.dx.cf.iface.AttributeList) StdAttributeList(com.taobao.android.dx.cf.iface.StdAttributeList) AttSourceFile(com.taobao.android.dx.cf.attrib.AttSourceFile)

Aggregations

Attribute (com.taobao.android.dx.cf.iface.Attribute)8 ByteArray (com.taobao.android.dx.util.ByteArray)7 ConstantPool (com.taobao.android.dx.rop.cst.ConstantPool)5 AttSourceFile (com.taobao.android.dx.cf.attrib.AttSourceFile)2 AttributeList (com.taobao.android.dx.cf.iface.AttributeList)2 CstString (com.taobao.android.dx.rop.cst.CstString)2 AttConstantValue (com.taobao.android.dx.cf.attrib.AttConstantValue)1 AttEnclosingMethod (com.taobao.android.dx.cf.attrib.AttEnclosingMethod)1 AttSignature (com.taobao.android.dx.cf.attrib.AttSignature)1 BaseAnnotations (com.taobao.android.dx.cf.attrib.BaseAnnotations)1 RawAttribute (com.taobao.android.dx.cf.attrib.RawAttribute)1 ClassPathOpener (com.taobao.android.dx.cf.direct.ClassPathOpener)1 DirectClassFile (com.taobao.android.dx.cf.direct.DirectClassFile)1 ParseException (com.taobao.android.dx.cf.iface.ParseException)1 StdAttributeList (com.taobao.android.dx.cf.iface.StdAttributeList)1 CstNat (com.taobao.android.dx.rop.cst.CstNat)1 CstType (com.taobao.android.dx.rop.cst.CstType)1 TypedConstant (com.taobao.android.dx.rop.cst.TypedConstant)1 File (java.io.File)1