Search in sources :

Example 1 with StdTypeList

use of com.android.dx.rop.type.StdTypeList in project RocooFix by dodola.

the class ClassReferenceListBuilder method addDependencies.

private void addDependencies(ConstantPool pool) {
    for (Constant constant : pool.getEntries()) {
        if (constant instanceof CstType) {
            checkDescriptor(((CstType) constant).getClassType());
        } else if (constant instanceof CstFieldRef) {
            checkDescriptor(((CstFieldRef) constant).getType());
        } else if (constant instanceof CstMethodRef) {
            Prototype proto = ((CstMethodRef) constant).getPrototype();
            checkDescriptor(proto.getReturnType());
            StdTypeList args = proto.getParameterTypes();
            for (int i = 0; i < args.size(); i++) {
                checkDescriptor(args.get(i));
            }
        }
    }
}
Also used : Prototype(com.android.dx.rop.type.Prototype) StdTypeList(com.android.dx.rop.type.StdTypeList) Constant(com.android.dx.rop.cst.Constant) CstType(com.android.dx.rop.cst.CstType) CstFieldRef(com.android.dx.rop.cst.CstFieldRef) CstMethodRef(com.android.dx.rop.cst.CstMethodRef)

Example 2 with StdTypeList

use of com.android.dx.rop.type.StdTypeList in project RocooFix by dodola.

the class ClassReferenceListBuilder method checkPrototype.

private void checkPrototype(Prototype proto) {
    checkDescriptor(proto.getReturnType().getDescriptor());
    StdTypeList args = proto.getParameterTypes();
    for (int i = 0; i < args.size(); i++) {
        checkDescriptor(args.get(i).getDescriptor());
    }
}
Also used : StdTypeList(com.android.dx.rop.type.StdTypeList)

Example 3 with StdTypeList

use of com.android.dx.rop.type.StdTypeList in project buck by facebook.

the class AttributeTranslator method translateInnerClasses.

/**
     * Gets the {@code InnerClasses} attribute out of a given
     * {@link AttributeList}, if any, translating it to one or more of an
     * {@code InnerClass}, {@code EnclosingClass}, or
     * {@code MemberClasses} annotation.
     *
     * @param thisClass {@code non-null;} type representing the class being
     * processed
     * @param attribs {@code non-null;} the attributes list to search in
     * @param needEnclosingClass whether to include an
     * {@code EnclosingClass} annotation
     * @return {@code null-ok;} the converted list of annotations, if there
     * was an attribute to translate
     */
private static Annotations translateInnerClasses(CstType thisClass, AttributeList attribs, boolean needEnclosingClass) {
    AttInnerClasses innerClasses = (AttInnerClasses) attribs.findFirst(AttInnerClasses.ATTRIBUTE_NAME);
    if (innerClasses == null) {
        return null;
    }
    /*
         * Search the list for the element representing the current class
         * as well as for any named member classes.
         */
    InnerClassList list = innerClasses.getInnerClasses();
    int size = list.size();
    InnerClassList.Item foundThisClass = null;
    ArrayList<Type> membersList = new ArrayList<Type>();
    for (int i = 0; i < size; i++) {
        InnerClassList.Item item = list.get(i);
        CstType innerClass = item.getInnerClass();
        if (innerClass.equals(thisClass)) {
            foundThisClass = item;
        } else if (thisClass.equals(item.getOuterClass())) {
            membersList.add(innerClass.getClassType());
        }
    }
    int membersSize = membersList.size();
    if ((foundThisClass == null) && (membersSize == 0)) {
        return null;
    }
    Annotations result = new Annotations();
    if (foundThisClass != null) {
        result.add(AnnotationUtils.makeInnerClass(foundThisClass.getInnerName(), foundThisClass.getAccessFlags()));
        if (needEnclosingClass) {
            CstType outer = foundThisClass.getOuterClass();
            if (outer == null) {
                throw new Warning("Ignoring InnerClasses attribute for an " + "anonymous inner class\n" + "(" + thisClass.toHuman() + ") that doesn't come with an\n" + "associated EnclosingMethod attribute. " + "This class was probably produced by a\n" + "compiler that did not target the modern " + ".class file format. The recommended\n" + "solution is to recompile the class from " + "source, using an up-to-date compiler\n" + "and without specifying any \"-target\" type " + "options. The consequence of ignoring\n" + "this warning is that reflective operations " + "on this class will incorrectly\n" + "indicate that it is *not* an inner class.");
            }
            result.add(AnnotationUtils.makeEnclosingClass(foundThisClass.getOuterClass()));
        }
    }
    if (membersSize != 0) {
        StdTypeList typeList = new StdTypeList(membersSize);
        for (int i = 0; i < membersSize; i++) {
            typeList.set(i, membersList.get(i));
        }
        typeList.setImmutable();
        result.add(AnnotationUtils.makeMemberClasses(typeList));
    }
    result.setImmutable();
    return result;
}
Also used : Type(com.android.dx.rop.type.Type) CstType(com.android.dx.rop.cst.CstType) Warning(com.android.dx.util.Warning) AttRuntimeVisibleAnnotations(com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations) AttRuntimeVisibleParameterAnnotations(com.android.dx.cf.attrib.AttRuntimeVisibleParameterAnnotations) Annotations(com.android.dx.rop.annotation.Annotations) AttRuntimeInvisibleAnnotations(com.android.dx.cf.attrib.AttRuntimeInvisibleAnnotations) AttRuntimeInvisibleParameterAnnotations(com.android.dx.cf.attrib.AttRuntimeInvisibleParameterAnnotations) StdTypeList(com.android.dx.rop.type.StdTypeList) CstType(com.android.dx.rop.cst.CstType) ArrayList(java.util.ArrayList) InnerClassList(com.android.dx.cf.attrib.InnerClassList) AttInnerClasses(com.android.dx.cf.attrib.AttInnerClasses)

Example 4 with StdTypeList

use of com.android.dx.rop.type.StdTypeList in project buck by facebook.

the class ProtoIdItem method writeTo.

/** {@inheritDoc} */
@Override
public void writeTo(DexFile file, AnnotatedOutput out) {
    int shortyIdx = file.getStringIds().indexOf(shortForm);
    int returnIdx = file.getTypeIds().indexOf(prototype.getReturnType());
    int paramsOff = OffsettedItem.getAbsoluteOffsetOr0(parameterTypes);
    if (out.annotates()) {
        StringBuilder sb = new StringBuilder();
        sb.append(prototype.getReturnType().toHuman());
        sb.append(" proto(");
        StdTypeList params = prototype.getParameterTypes();
        int size = params.size();
        for (int i = 0; i < size; i++) {
            if (i != 0) {
                sb.append(", ");
            }
            sb.append(params.getType(i).toHuman());
        }
        sb.append(")");
        out.annotate(0, indexString() + ' ' + sb.toString());
        out.annotate(4, "  shorty_idx:      " + Hex.u4(shortyIdx) + " // " + shortForm.toQuoted());
        out.annotate(4, "  return_type_idx: " + Hex.u4(returnIdx) + " // " + prototype.getReturnType().toHuman());
        out.annotate(4, "  parameters_off:  " + Hex.u4(paramsOff));
    }
    out.writeInt(shortyIdx);
    out.writeInt(returnIdx);
    out.writeInt(paramsOff);
}
Also used : StdTypeList(com.android.dx.rop.type.StdTypeList)

Example 5 with StdTypeList

use of com.android.dx.rop.type.StdTypeList in project buck by facebook.

the class ProtoIdItem method makeShortForm.

/**
     * Creates the short-form of the given prototype.
     *
     * @param prototype {@code non-null;} the prototype
     * @return {@code non-null;} the short form
     */
private static CstString makeShortForm(Prototype prototype) {
    StdTypeList parameters = prototype.getParameterTypes();
    int size = parameters.size();
    StringBuilder sb = new StringBuilder(size + 1);
    sb.append(shortFormCharFor(prototype.getReturnType()));
    for (int i = 0; i < size; i++) {
        sb.append(shortFormCharFor(parameters.getType(i)));
    }
    return new CstString(sb.toString());
}
Also used : StdTypeList(com.android.dx.rop.type.StdTypeList) CstString(com.android.dx.rop.cst.CstString)

Aggregations

StdTypeList (com.android.dx.rop.type.StdTypeList)12 CstType (com.android.dx.rop.cst.CstType)6 Type (com.android.dx.rop.type.Type)5 Prototype (com.android.dx.rop.type.Prototype)3 Constant (com.android.dx.rop.cst.Constant)2 CstFieldRef (com.android.dx.rop.cst.CstFieldRef)2 CstMethodRef (com.android.dx.rop.cst.CstMethodRef)2 CstString (com.android.dx.rop.cst.CstString)2 ByteArrayByteInput (com.android.dex.util.ByteArrayByteInput)1 ByteInput (com.android.dex.util.ByteInput)1 AttInnerClasses (com.android.dx.cf.attrib.AttInnerClasses)1 AttRuntimeInvisibleAnnotations (com.android.dx.cf.attrib.AttRuntimeInvisibleAnnotations)1 AttRuntimeInvisibleParameterAnnotations (com.android.dx.cf.attrib.AttRuntimeInvisibleParameterAnnotations)1 AttRuntimeVisibleAnnotations (com.android.dx.cf.attrib.AttRuntimeVisibleAnnotations)1 AttRuntimeVisibleParameterAnnotations (com.android.dx.cf.attrib.AttRuntimeVisibleParameterAnnotations)1 InnerClassList (com.android.dx.cf.attrib.InnerClassList)1 LocalList (com.android.dx.dex.code.LocalList)1 PositionList (com.android.dx.dex.code.PositionList)1 Annotations (com.android.dx.rop.annotation.Annotations)1 BasicBlock (com.android.dx.rop.code.BasicBlock)1