Example usage for org.objectweb.asm Type getSort

List of usage examples for org.objectweb.asm Type getSort

Introduction

In this page you can find the example usage for org.objectweb.asm Type getSort.

Prototype

public int getSort() 

Source Link

Document

Returns the sort of this type.

Usage

From source file:analysis.ReferenceGenerator.java

License:Open Source License

private void addTypeClassRef(Type type) {
    if (type.getSort() == Type.OBJECT) {
        addClassRef(type.getInternalName());
    }
}

From source file:apb.processors.NotNullClassInstrumenter.java

License:Apache License

private static boolean isReferenceType(Type type) {
    return type.getSort() == 10 || type.getSort() == 9;
}

From source file:ca.weblite.asm.JavaSourceMirrorLoader.java

@Override
public MirrorType findMirror(Type type) {
    MirrorType out = super.findMirror(type);
    if (out != null) {
        return out;
    }/* w  ww  . j av a 2  s.co  m*/

    if (type.getSort() == Type.ARRAY) {
        return findArrayMirror(Type.getType(type.getDescriptor().substring(1)));
    }

    ClassNode node = loader.findClass(type);
    if (node != null) {
        BytecodeMirror mirror = new BytecodeMirror(context, node, ancestorLoader);
        return mirror;
    }
    return null;

}

From source file:ca.weblite.mirah.ant.mirrors.JavaSourceMirrorLoader.java

@Override
public MirrorType findMirror(Type type) {
    MirrorType out = null;/*from www  . j av  a 2 s. c om*/
    if ((out = super.findMirror(type)) == null) {
        if (type.getSort() == Type.ARRAY) {
            return findArrayMirror(Type.getType(type.getDescriptor().substring(1)));
        }
        String path = null;
        String[] parts = type.getInternalName().split("/");
        int len = parts.length;
        while (path == null && len > 0) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < len; i++) {
                sb.append(parts[i]).append("/");
            }
            String test = sb.substring(0, sb.length() - 1) + ".java";
            path = findInClassPath(test);
        }
        ClassNode node = new ClassNode();

    }
    return out;
}

From source file:ch.eiafr.cojac.FloatReplaceClassVisitor.java

License:Apache License

@Override
public FieldVisitor visitField(int accessFlags, String fieldName, String fieldType, String genericSignature,
        Object initValStatic) {/*  w ww  .  ja v  a 2 s.  co m*/
    if (fieldType.equals("F")) {
        return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null);
    } else if (fieldType.equals("D")) {
        return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature,
                null);
    } else if (fieldType.equals(Type.getType(Float.class).getDescriptor())) {
        return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null);
    } else if (fieldType.equals(Type.getType(Double.class).getDescriptor())) {
        return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature,
                null);
    }

    Type type = Type.getType(fieldType);
    if (type.getSort() == Type.ARRAY) {
        if (type.getElementType().equals(Type.FLOAT_TYPE)) {
            String desc = arrayDescriptor(type.getDimensions(), COJAC_FLOAT_WRAPPER_TYPE_DESCR);
            return super.visitField(accessFlags, fieldName, desc, genericSignature, null);
        } else if (type.getElementType().equals(Type.DOUBLE_TYPE)) {
            String desc = arrayDescriptor(type.getDimensions(), COJAC_DOUBLE_WRAPPER_TYPE_DESCR);
            return super.visitField(accessFlags, fieldName, desc, genericSignature, null);
        }
    }
    return super.visitField(accessFlags, fieldName, fieldType, genericSignature, initValStatic);
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private Object[] addReturnTypeTo(Object[] stackContent, Type returnType) {
    int sort = returnType.getSort();
    if (sort == Type.VOID)
        return stackContent;
    if (sort == Type.ARRAY || sort == Type.OBJECT)
        return addTo(stackContent, returnType.getInternalName());
    // else primitive type
    switch (sort) {
    case Type.BOOLEAN:
    case Type.BYTE:
    case Type.CHAR:
    case Type.SHORT:
    case Type.INT:
        return addTo(stackContent, Opcodes.INTEGER);
    case Type.LONG:
        return addTo(stackContent, Opcodes.LONG);
    //return addTo(addTo(stackContent, Opcodes.LONG), Opcodes.TOP);
    }//from   w  w w  . j av a2  s  .c o m
    return stackContent;
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private static void explodeOnStack(MethodVisitor mv, ConversionContext cc, boolean wantTheConversion) {
    Type[] args = wantTheConversion ? cc.outArgs : cc.inArgs;
    // stack >> ... allParamsArr
    for (int i = 0; i < args.length; i++) {
        // stack >> ... allParamsArr
        Type oa = args[i];
        int oaSort = oa.getSort();
        mv.visitInsn(DUP);/*w ww . j a  v a2  s .  c  o  m*/
        mv.visitLdcInsn(i);
        mv.visitInsn(AALOAD);
        boolean keepBothVersions = (oa.getSort() == Type.ARRAY);
        if (keepBothVersions) {
            mv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
            mv.visitLdcInsn(wantTheConversion ? 1 : 0);
            mv.visitInsn(AALOAD);
        }

        if (oaSort == Type.ARRAY || oaSort == Type.OBJECT) { // else: primitive type
            mv.visitTypeInsn(CHECKCAST, oa.getInternalName());
        } else {
            String jWrapperName = getJWrapper(oa).getInternalName();
            mv.visitTypeInsn(CHECKCAST, jWrapperName);
            mv.visitMethodInsn(INVOKEVIRTUAL, jWrapperName, getWrapperToPrimitiveMethod(oa),
                    "()" + oa.getDescriptor(), false);
        }

        if (oa.getSize() == 2) { //    Object DD  Swap when double or long
            mv.visitInsn(DUP2_X1); // DD Object DD
            mv.visitInsn(POP2); // DD Object
        } else {
            mv.visitInsn(SWAP);
        }
        // stack >> ... nprmI allParamsArr
    }
    mv.visitInsn(POP);
    // stack >> ... nprm0 nprm1 nprm2...
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private static void convertReturnType(MethodVisitor mv, String desc) {
    Type returnType = Type.getReturnType(desc);
    Type cojacType = afterFloatReplacement(returnType);
    if (returnType.equals(cojacType) == false) {
        convertRealToCojacType(returnType, mv);
    }/*from w w w . java2  s  . c o  m*/
    if (returnType.equals(OBJ_TYPE)) {
        convertObjectToCojac(mv, returnType);
    } else if (returnType.getSort() == Type.ARRAY && returnType.getElementType().equals(OBJ_TYPE)) {
        convertObjectToCojac(mv, returnType);
    }
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private void createConvertMethod(String convertDesc, ConversionContext cc) {
    if (ccv.isProxyMethod(COJAC_TYPE_CONVERT_NAME, convertDesc))
        return; // the method already exists
    MethodVisitor newMv = ccv.addProxyMethod(ACC_STATIC, COJAC_TYPE_CONVERT_NAME, convertDesc, null, null);
    int varIndex = 0;
    newMv.visitLdcInsn(cc.outArgs.length + 1); // additional cell for the AllAsObjects array
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr
    newMv.visitInsn(DUP);/*from  w  ww .  ja va  2  s  .c o  m*/
    newMv.visitLdcInsn(cc.outArgs.length);
    newMv.visitInsn(DUP);
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr prmsArr n asObjArr
    newMv.visitInsn(AASTORE);
    // stack >> prmsArr

    for (int i = 0; i < cc.outArgs.length; i++) {
        Type ia = cc.inArgs[i];
        newMv.visitInsn(DUP);
        newMv.visitInsn(DUP);
        newMv.visitLdcInsn(cc.outArgs.length);
        // stack >> prmsArr prmsArr prmsArr n
        newMv.visitInsn(AALOAD);
        newMv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
        // stack >> prmsArr prmsArr asObjArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr asObjArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        convertPrimitiveToObject(newMv, cc.inArgs[i]);
        // stack >> prmsArr prmsArr asObjArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr prmsArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        varIndex += cc.inArgs[i].getSize();
        // stack >> prmsArr prmsArr i pi
        boolean keepBothVersions = (ia.getSort() == Type.ARRAY);
        if (keepBothVersions) { // keep the old reference (the Cojac one)
            newMv.visitLdcInsn(2);
            newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
            // stack >> prmsArr prmsArr i pi piArr
            newMv.visitInsn(DUP_X1);
            // stack >> prmsArr prmsArr i piArr pi piArr
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr piArr pi
            newMv.visitInsn(DUP_X1);
            newMv.visitLdcInsn(0);
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr pi piArr pi 0
            newMv.visitInsn(AASTORE);
            // stack >> prmsArr prmsArr i piArr
        }
        // stack >> prmsArr prmsArr i pi
        if (cc.needsConversion(i)) {
            convertCojacToRealType(cc.asOriginalJavaType(i), newMv);
        } else if (cc.shouldObjParamBeConverted && (ia.equals(OBJ_TYPE) || ia.equals(OBJ_ARRAY_TYPE))) {
            convertObjectToReal(newMv, ia);
        }
        /* This is where we could decide to convert back to JavaWrapper
         * when the argument is declared as Object
         * We don't do that to keep "enriched numbers" in collections
         * but sometimes we would like to convert, eg printf, format...
         */
        convertPrimitiveToObject(newMv, cc.outArgs[i]);
        // stack >> prmsArr prmsArr i pi
        if (keepBothVersions) { // keep the new reference (the java one)
            newMv.visitInsn(SWAP);
            newMv.visitInsn(DUP_X1);
            newMv.visitInsn(SWAP);
            newMv.visitLdcInsn(1);
            newMv.visitInsn(SWAP);
            newMv.visitInsn(AASTORE);
        }
        // stack >> prmsArr prmsArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr
    }
    newMv.visitInsn(ARETURN);
    newMv.visitMaxs(0, 0);
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private static boolean isPrimitiveFloatOrDoubleArray(Type realType) {
    if (realType.getSort() != Type.ARRAY)
        return false;
    Type t = realType.getElementType();
    if (t.equals(Type.FLOAT_TYPE) || t.equals(Type.DOUBLE_TYPE))
        return true;
    return false;
}