Example usage for org.objectweb.asm Type getDimensions

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

Introduction

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

Prototype

public int getDimensions() 

Source Link

Document

Returns the number of dimensions of this array type.

Usage

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. j a v a2  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

public static void convertRealToCojacType(Type realType, MethodVisitor mv) {
    // WRAPPER SPEC: FW.fromFloat(float) -> FW,  FW.fromRealFloatWrapper(Float) -> FW
    // WRAPPER SPEC: DW.fromDouble(double) -> DW, DW.fromRealDoubleWrapper(Double) -> DW
    if (realType.equals(Type.FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromFloat",
                "(F)" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromRealFloatWrapper",
                "(" + JWRAPPER_FLOAT_TYPE.getDescriptor() + ")" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(Type.DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromDouble",
                "(D)" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromRealDoubleWrapper",
                "(" + JWRAPPER_DOUBLE_TYPE.getDescriptor() + ")" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (isPrimitiveFloatOrDoubleArray(realType)) {
        mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName());
        mv.visitLdcInsn(realType.getDimensions());
        if (realType.getElementType().equals(Type.FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (realType.getElementType().equals(Type.DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        }/*  ww  w.  java  2 s . c o m*/
        mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName());
    }
}

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

License:Apache License

public static void convertCojacToRealType(Type realType, MethodVisitor mv) {
    if (realType.equals(Type.FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toFloat",
                "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")F", false);
    } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toRealFloatWrapper",
                "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")" + FL_DESCR, false);
    } else if (realType.equals(Type.DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toDouble",
                "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")D", false);
    } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toRealDoubleWrapper",
                "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")" + DL_DESCR, false);
    } else if (isPrimitiveFloatOrDoubleArray(realType) || isJWrapperFloatOrDoubleArray(realType)) {
        mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName());
        mv.visitLdcInsn(realType.getDimensions());
        Type eType = realType.getElementType();
        if (eType.equals(Type.FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToPrimitive",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(Type.DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToPrimitive",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(JWRAPPER_FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToJWrapper",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(JWRAPPER_DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToJWrapper",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        }/*  w  w  w  .  j  a  v  a 2  s . c  om*/
        mv.visitTypeInsn(CHECKCAST, realType.getInternalName());
    }
}

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

License:Apache License

/** Float|float|Double|double [array] -> CojacWrapper */
public static Type afterFloatReplacement(Type type) {
    if (type.equals(Type.getType(Float.class)))
        return COJAC_FLOAT_WRAPPER_TYPE;
    if (type.equals(Type.FLOAT_TYPE))
        return COJAC_FLOAT_WRAPPER_TYPE;
    if (type.equals(Type.getType(Double.class)))
        return COJAC_DOUBLE_WRAPPER_TYPE;
    if (type.equals(Type.DOUBLE_TYPE))
        return COJAC_DOUBLE_WRAPPER_TYPE;
    if (type.getSort() == Type.ARRAY) {
        Type newType = afterFloatReplacement(type.getElementType());
        if (type.equals(newType))
            return type;
        String desc = "";
        for (int i = 0; i < type.getDimensions(); i++)
            desc += "[";
        desc += newType.getDescriptor();
        return Type.getType(desc);
    }//from w  w  w.  j a v  a 2s .c o  m
    return type;
}

From source file:cl.inria.stiq.db.structure.impl.StructureDatabase.java

License:Open Source License

public static ITypeInfo getType(IMutableStructureDatabase aStructureDatabase, String aName,
        boolean aCreateIfAbsent, boolean aFailIfAbsent) {
    aName = transformClassName(aName);//  www.  j a  va  2 s. c  om
    Type theType = Type.getType(aName);
    switch (theType.getSort()) {
    case Type.OBJECT: {
        String theClassName = theType.getClassName();
        return aCreateIfAbsent ? aStructureDatabase.getNewClass(theClassName)
                : aStructureDatabase.getClass(theClassName, aFailIfAbsent);
    }

    case Type.ARRAY: {
        ITypeInfo theElementType = getType(aStructureDatabase, theType.getElementType().getDescriptor(),
                aCreateIfAbsent, aFailIfAbsent);

        int theDimensions = theType.getDimensions();

        return new ArrayTypeInfo(null, // That should be safe... if there is a problem we'll see what we do
                theElementType, theDimensions);
    }

    case Type.VOID:
        return PrimitiveTypeInfo.VOID;
    case Type.BOOLEAN:
        return PrimitiveTypeInfo.BOOLEAN;
    case Type.BYTE:
        return PrimitiveTypeInfo.BYTE;
    case Type.CHAR:
        return PrimitiveTypeInfo.CHAR;
    case Type.DOUBLE:
        return PrimitiveTypeInfo.DOUBLE;
    case Type.FLOAT:
        return PrimitiveTypeInfo.FLOAT;
    case Type.INT:
        return PrimitiveTypeInfo.INT;
    case Type.LONG:
        return PrimitiveTypeInfo.LONG;
    case Type.SHORT:
        return PrimitiveTypeInfo.SHORT;

    default:
        // This is not a "normal" failure, so always throw exception
        throw new RuntimeException("Not handled: " + theType);
    }
}

From source file:com.android.tools.layoutlib.create.AbstractClassAdapter.java

License:Apache License

/**
 * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an
 * object element, e.g. "[Lcom.package.MyClass;"
 * If the type doesn't need to be renamed, returns the internal name of the input type.
 *///  w w  w . ja v  a2  s  . c om
String renameType(Type type) {
    if (type == null) {
        return null;
    }

    if (type.getSort() == Type.OBJECT) {
        String in = type.getInternalName();
        return "L" + renameInternalType(in) + ";";
    } else if (type.getSort() == Type.ARRAY) {
        StringBuilder sb = new StringBuilder();
        for (int n = type.getDimensions(); n > 0; n--) {
            sb.append('[');
        }
        sb.append(renameType(type.getElementType()));
        return sb.toString();
    }
    return type.getDescriptor();
}

From source file:com.android.tools.layoutlib.create.AbstractClassAdapter.java

License:Apache License

/**
 * Renames an object type, e.g. "Lcom.package.MyClass;" or an array type that has an
 * object element, e.g. "[Lcom.package.MyClass;".
 * This is like renameType() except that it returns a Type object.
 * If the type doesn't need to be renamed, returns the input type object.
 *///from  w ww.  j  a v a2 s  . com
Type renameTypeAsType(Type type) {
    if (type == null) {
        return null;
    }

    if (type.getSort() == Type.OBJECT) {
        String in = type.getInternalName();
        String newIn = renameInternalType(in);
        if (newIn != in) {
            return Type.getType("L" + newIn + ";");
        }
    } else if (type.getSort() == Type.ARRAY) {
        StringBuilder sb = new StringBuilder();
        for (int n = type.getDimensions(); n > 0; n--) {
            sb.append('[');
        }
        sb.append(renameType(type.getElementType()));
        return Type.getType(sb.toString());
    }
    return type;
}

From source file:com.codename1.tools.translator.bytecodes.Ldc.java

License:Open Source License

@Override
public void addDependencies(List<String> dependencyList) {
    if (cst instanceof Type) {
        int sort = ((Type) cst).getSort();
        Type tp = (Type) cst;
        if (sort == Type.OBJECT) {
            String t = tp.getInternalName().replace('/', '_').replace('$', '_');
            if (!dependencyList.contains(t)) {
                dependencyList.add(t);//from   w w  w. j a v a2s .  c  om
            }
        } else if (sort == Type.ARRAY) {
            try {
                Type ttt = tp.getElementType();
                switch (ttt.getSort()) {
                case Type.BOOLEAN:
                case Type.BYTE:
                case Type.CHAR:
                case Type.DOUBLE:
                case Type.FLOAT:
                case Type.INT:
                case Type.LONG:
                case Type.SHORT:
                    return;
                }
                String t = ttt.getInternalName().replace('/', '_').replace('$', '_');
                ByteCodeClass.addArrayType(t, tp.getDimensions());
                if (!dependencyList.contains(t)) {
                    dependencyList.add(t);
                }
            } catch (Throwable t) {
                System.out.println("Non-fatal error when reading type: " + tp);
                t.printStackTrace();
            }
        }
    }
}

From source file:com.codename1.tools.translator.bytecodes.Ldc.java

License:Open Source License

public String getValueAsString() {
    StringBuilder b = new StringBuilder();
    if (cst instanceof Integer) {
        //b.append("PUSH_INT(");
        b.append(((Number) cst).intValue());
        //b.append("); /* LDC */\n");
    } else if (cst instanceof Float) {
        Float f = (Float) cst;
        //b.append("PUSH_FLOAT(");
        if (f.isInfinite()) {
            if (f.floatValue() > 0) {
                b.append("1.0f / 0.0f");
            } else {
                b.append("-1.0f / 0.0f");
            }/*w ww.j  a  v a2  s. c om*/
        } else {
            if (f.isNaN()) {
                b.append("0.0/0.0");
            } else {
                b.append(f.floatValue());
            }
        }
        //b.append("); /* LDC */\n");
    } else if (cst instanceof Long) {
        //b.append("PUSH_LONG(");
        if (((Number) cst).longValue() == Long.MIN_VALUE) {
            // min value in C is 1 less (more really)
            b.append("LLONG_MIN");
        } else {
            b.append(((Number) cst).longValue()).append("LL");
        }
        //b.append("LL); /* LDC */\n");
    } else if (cst instanceof Double) {
        Double d = (Double) cst;
        //b.append("PUSH_DOUBLE(");
        if (d.isInfinite()) {
            if (d.floatValue() > 0) {
                b.append("1.0 / 0.0");
            } else {
                b.append("-1.0 / 0.0");
            }
        } else {
            if (d.isNaN()) {
                b.append("0.0/0.0");
            } else {
                b.append(d.doubleValue());
            }
        }
        //b.append("); /* LDC */\n");
    } else if (cst instanceof String) {
        //b.append("/* LDC: '");
        //b.append(((String)cst).replace('\n', ' ').replace("*/", "*\\/"));
        //b.append("'*/\n    PUSH_POINTER(STRING_FROM_CONSTANT_POOL_OFFSET(");
        b.append("STRING_FROM_CONSTANT_POOL_OFFSET(");
        b.append(Parser.addToConstantPool((String) cst));
        b.append(")");
        //b.append("));\n");

    } else if (cst instanceof Type) {
        // TODO...
        int sort = ((Type) cst).getSort();
        Type tp = (Type) cst;
        if (sort == Type.OBJECT) {
            //b.append("/* LDC: '");
            //b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            //b.append("'*/\n    PUSH_POINTER((JAVA_OBJECT)&class__");
            //b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            //b.append(");\n");
            b.append("(JAVA_OBJECT)&class__");
            b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
        } else if (sort == Type.ARRAY) {
            //b.append("/* LDC Array: '");
            //b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            //b.append("'*/\n    PUSH_POINTER((JAVA_OBJECT)&class_array");
            b.append("(JAVA_OBJECT)&class_array");
            b.append(tp.getDimensions());
            b.append("__");
            Type ttt = tp.getElementType();
            switch (ttt.getSort()) {
            case Type.BOOLEAN:
                b.append("JAVA_BOOLEAN");
                break;
            case Type.BYTE:
                b.append("JAVA_BYTE");
                break;
            case Type.CHAR:
                b.append("JAVA_CHAR");
                break;
            case Type.DOUBLE:
                b.append("JAVA_DOUBLE");
                break;
            case Type.FLOAT:
                b.append("JAVA_FLOAT");
                break;
            case Type.INT:
                b.append("JAVA_INT");
                break;
            case Type.LONG:
                b.append("JAVA_LONG");
                break;
            case Type.SHORT:
                b.append("JAVA_SHORT");
                break;
            default:
                b.append(ttt.getInternalName().replace('/', '_').replace('$', '_'));
                break;
            }
            //b.append(");\n");
        } else if (sort == Type.METHOD) {
            b.append("/* UNKNOWN CST type internal: ");
            b.append(tp.getInternalName());
            b.append(" */");
        } else {
            b.append("/* UNKNOWN CST type internal: ");
            b.append(tp.getInternalName());
            b.append(" */");
        }
    } else if (cst instanceof Handle) {
        //((Handle)cst).
        b.append("/* UNKNOWN CST type: ");
        b.append(cst.getClass().getName());
        b.append(" */");
    }
    return b.toString();
}

From source file:com.codename1.tools.translator.bytecodes.Ldc.java

License:Open Source License

@Override
public void appendInstruction(StringBuilder b) {
    b.append("    ");
    if (cst instanceof Integer) {
        b.append("PUSH_INT(");
        b.append(((Number) cst).intValue());
        b.append("); /* LDC */\n");
    } else if (cst instanceof Float) {
        Float f = (Float) cst;
        b.append("PUSH_FLOAT(");
        if (f.isInfinite()) {
            if (f.floatValue() > 0) {
                b.append("1.0f / 0.0f");
            } else {
                b.append("-1.0f / 0.0f");
            }/*  w  w  w .  j  a  v  a  2  s  .  c o  m*/
        } else {
            if (f.isNaN()) {
                b.append("0.0/0.0");
            } else {
                b.append(f.floatValue());
            }
        }
        b.append("); /* LDC */\n");
    } else if (cst instanceof Long) {
        b.append("PUSH_LONG(");
        if (((Number) cst).longValue() == Long.MIN_VALUE) {
            // min value in C is 1 less (more really)
            b.append("LLONG_MIN");
        } else {
            b.append(((Number) cst).longValue()).append("LL");
        }
        b.append("); /* LDC */\n");
    } else if (cst instanceof Double) {
        Double d = (Double) cst;
        b.append("PUSH_DOUBLE(");
        if (d.isInfinite()) {
            if (d.floatValue() > 0) {
                b.append("1.0 / 0.0");
            } else {
                b.append("-1.0 / 0.0");
            }
        } else {
            if (d.isNaN()) {
                b.append("0.0/0.0");
            } else {
                b.append(d.doubleValue());
            }
        }
        b.append("); /* LDC */\n");
    } else if (cst instanceof String) {
        b.append("/* LDC: '");
        b.append(((String) cst).replace('\n', ' ').replace("*/", "*\\/"));
        b.append("'*/\n    PUSH_POINTER(STRING_FROM_CONSTANT_POOL_OFFSET(");
        b.append(Parser.addToConstantPool((String) cst));
        b.append("));\n");
    } else if (cst instanceof Type) {
        // TODO...
        int sort = ((Type) cst).getSort();
        Type tp = (Type) cst;
        if (sort == Type.OBJECT) {
            b.append("/* LDC: '");
            b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            b.append("'*/\n    PUSH_POINTER((JAVA_OBJECT)&class__");
            b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            b.append(");\n");
        } else if (sort == Type.ARRAY) {
            b.append("/* LDC Array: '");
            b.append(tp.getInternalName().replace('/', '_').replace('$', '_'));
            b.append("'*/\n    PUSH_POINTER((JAVA_OBJECT)&class_array");
            b.append(tp.getDimensions());
            b.append("__");
            Type ttt = tp.getElementType();
            switch (ttt.getSort()) {
            case Type.BOOLEAN:
                b.append("JAVA_BOOLEAN");
                break;
            case Type.BYTE:
                b.append("JAVA_BYTE");
                break;
            case Type.CHAR:
                b.append("JAVA_CHAR");
                break;
            case Type.DOUBLE:
                b.append("JAVA_DOUBLE");
                break;
            case Type.FLOAT:
                b.append("JAVA_FLOAT");
                break;
            case Type.INT:
                b.append("JAVA_INT");
                break;
            case Type.LONG:
                b.append("JAVA_LONG");
                break;
            case Type.SHORT:
                b.append("JAVA_SHORT");
                break;
            default:
                b.append(ttt.getInternalName().replace('/', '_').replace('$', '_'));
                break;
            }
            b.append(");\n");
        } else if (sort == Type.METHOD) {
            b.append("/* UNKNOWN CST type internal: ");
            b.append(tp.getInternalName());
            b.append(" */");
        } else {
            b.append("/* UNKNOWN CST type internal: ");
            b.append(tp.getInternalName());
            b.append(" */");
        }
    } else if (cst instanceof Handle) {
        //((Handle)cst).
        b.append("/* UNKNOWN CST type: ");
        b.append(cst.getClass().getName());
        b.append(" */");
    }

}