Search in sources :

Example 6 with Attribute

use of com.android.dx.cf.iface.Attribute in project J2ME-Loader by nikita36078.

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 : Attribute(com.android.dx.cf.iface.Attribute) RawAttribute(com.android.dx.cf.attrib.RawAttribute) ConstantPool(com.android.dx.rop.cst.ConstantPool) RawAttribute(com.android.dx.cf.attrib.RawAttribute) ByteArray(com.android.dx.util.ByteArray)

Example 7 with Attribute

use of com.android.dx.cf.iface.Attribute in project J2ME-Loader by nikita36078.

the class StdAttributeFactory method sourceFile.

/**
 * Parses a {@code SourceFile} attribute.
 */
private Attribute sourceFile(DirectClassFile cf, int offset, int length, ParseObserver observer) {
    if (length != 2) {
        throwBadLength(2);
    }
    ByteArray bytes = cf.getBytes();
    ConstantPool pool = cf.getConstantPool();
    int idx = bytes.getUnsignedShort(offset);
    CstString cst = (CstString) pool.get(idx);
    Attribute result = new AttSourceFile(cst);
    if (observer != null) {
        observer.parsed(bytes, offset, 2, "source: " + cst);
    }
    return result;
}
Also used : Attribute(com.android.dx.cf.iface.Attribute) ConstantPool(com.android.dx.rop.cst.ConstantPool) CstString(com.android.dx.rop.cst.CstString) AttSourceFile(com.android.dx.cf.attrib.AttSourceFile) ByteArray(com.android.dx.util.ByteArray)

Example 8 with Attribute

use of com.android.dx.cf.iface.Attribute in project buck by facebook.

the class AnnotationLister method process.

/** Processes based on configuration specified in constructor. */
void process() {
    for (String path : args.files) {
        ClassPathOpener opener;
        opener = new ClassPathOpener(path, true, new ClassPathOpener.Consumer() {

            public boolean processFileBytes(String name, long lastModified, byte[] bytes) {
                if (!name.endsWith(".class")) {
                    return true;
                }
                ByteArray ba = new ByteArray(bytes);
                DirectClassFile cf = new DirectClassFile(ba, name, true);
                cf.setAttributeFactory(StdAttributeFactory.THE_ONE);
                AttributeList attributes = cf.getAttributes();
                Attribute att;
                String cfClassName = cf.getThisClass().getClassType().getClassName();
                if (cfClassName.endsWith(PACKAGE_INFO)) {
                    att = attributes.findFirst(AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME);
                    for (; att != null; att = attributes.findNext(att)) {
                        BaseAnnotations ann = (BaseAnnotations) att;
                        visitPackageAnnotation(cf, ann);
                    }
                    att = attributes.findFirst(AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
                    for (; att != null; att = attributes.findNext(att)) {
                        BaseAnnotations ann = (BaseAnnotations) att;
                        visitPackageAnnotation(cf, ann);
                    }
                } else if (isMatchingInnerClass(cfClassName) || isMatchingPackage(cfClassName)) {
                    printMatch(cf);
                } else {
                    att = attributes.findFirst(AttRuntimeInvisibleAnnotations.ATTRIBUTE_NAME);
                    for (; att != null; att = attributes.findNext(att)) {
                        BaseAnnotations ann = (BaseAnnotations) att;
                        visitClassAnnotation(cf, ann);
                    }
                    att = attributes.findFirst(AttRuntimeVisibleAnnotations.ATTRIBUTE_NAME);
                    for (; att != null; att = attributes.findNext(att)) {
                        BaseAnnotations ann = (BaseAnnotations) att;
                        visitClassAnnotation(cf, ann);
                    }
                }
                return true;
            }

            public void onException(Exception ex) {
                throw new RuntimeException(ex);
            }

            public void onProcessArchiveStart(File file) {
            }
        });
        opener.process();
    }
}
Also used : ClassPathOpener(com.android.dx.cf.direct.ClassPathOpener) DirectClassFile(com.android.dx.cf.direct.DirectClassFile) Attribute(com.android.dx.cf.iface.Attribute) AttributeList(com.android.dx.cf.iface.AttributeList) BaseAnnotations(com.android.dx.cf.attrib.BaseAnnotations) ByteArray(com.android.dx.util.ByteArray) File(java.io.File) DirectClassFile(com.android.dx.cf.direct.DirectClassFile)

Example 9 with Attribute

use of com.android.dx.cf.iface.Attribute in project buck by facebook.

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.android.dx.cf.iface.Attribute) StdAttributeList(com.android.dx.cf.iface.StdAttributeList) AttributeList(com.android.dx.cf.iface.AttributeList) AttSourceFile(com.android.dx.cf.attrib.AttSourceFile)

Example 10 with Attribute

use of com.android.dx.cf.iface.Attribute in project buck by facebook.

the class StdAttributeFactory method constantValue.

/**
     * Parses a {@code ConstantValue} attribute.
     */
private Attribute constantValue(DirectClassFile cf, int offset, int length, ParseObserver observer) {
    if (length != 2) {
        return throwBadLength(2);
    }
    ByteArray bytes = cf.getBytes();
    ConstantPool pool = cf.getConstantPool();
    int idx = bytes.getUnsignedShort(offset);
    TypedConstant cst = (TypedConstant) pool.get(idx);
    Attribute result = new AttConstantValue(cst);
    if (observer != null) {
        observer.parsed(bytes, offset, 2, "value: " + cst);
    }
    return result;
}
Also used : TypedConstant(com.android.dx.rop.cst.TypedConstant) Attribute(com.android.dx.cf.iface.Attribute) ConstantPool(com.android.dx.rop.cst.ConstantPool) ByteArray(com.android.dx.util.ByteArray) AttConstantValue(com.android.dx.cf.attrib.AttConstantValue)

Aggregations

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