Example usage for org.objectweb.asm Type FLOAT_TYPE

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

Introduction

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

Prototype

Type FLOAT_TYPE

To view the source code for org.objectweb.asm Type FLOAT_TYPE.

Click Source Link

Document

The float type.

Usage

From source file:boilerplate.processor.adapters.ToStringMethodInsertion.java

License:Open Source License

private static List<BytecodeGenerator> createMethodList() {
    final Type objectType = Type.getType(Object.class);
    class ObjectMethodInsn extends ToStringMethodInsertion {
        ObjectMethodInsn() {//from  www.j  a va  2 s. c o m
            super(objectType, "appendObject",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/Object;)V");
        }

        @Override
        public boolean matches(Type type) {
            return true;
        }
    }

    BytecodeGenerator[] arr = {
            new ToStringMethodInsertion(Type.BOOLEAN_TYPE, "appendBoolean",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;Z)V"),
            new ToStringMethodInsertion(Type.BYTE_TYPE, "appendByte",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;B)V"),
            new ToStringMethodInsertion(Type.CHAR_TYPE, "appendChar",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;C)V"),
            new ToStringMethodInsertion(Type.DOUBLE_TYPE, "appendDouble",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;D)V"),
            new ToStringMethodInsertion(Type.FLOAT_TYPE, "appendFloat",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;F)V"),
            new ToStringMethodInsertion(Type.INT_TYPE, "appendInt",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;I)V"),
            new ToStringMethodInsertion(Type.LONG_TYPE, "appendLong",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;J)V"),
            new ToStringMethodInsertion(Type.SHORT_TYPE, "appendShort",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;S)V"),
            // default
            new ObjectMethodInsn(), };
    List<BytecodeGenerator> list = Arrays.asList(arr);
    return Collections.unmodifiableList(list);
}

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) {//  ww  w  .j  a v a2s .  com
    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);
        }//w  w  w . j  av  a  2s .  c  om
        mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName());
    }
}

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;
}

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);
        }//from w  w  w  .ja  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  ww .  ja  v  a  2 s.  c  om*/
    return type;
}

From source file:cl.inria.stiq.instrumenter.BCIUtils.java

License:Open Source License

public static Type getTypeForSig(char aSig) {
    switch (aSig) {
    case 'I':
        return Type.INT_TYPE;
    case 'J':
        return Type.LONG_TYPE;
    case 'F':
        return Type.FLOAT_TYPE;
    case 'D':
        return Type.DOUBLE_TYPE;
    case 'L':
        return TYPE_OBJECTID;
    default://from  w ww. ja  v a2s  . co  m
        throw new RuntimeException("Not handled: " + aSig);
    }
}

From source file:com.android.build.gradle.internal.incremental.ByteCodeUtils.java

License:Apache License

/**
 * Given a *STORE opcode, it returns the type associated to the variable, or null if
 * not a valid opcode./*from www. jav a2  s  . c  o m*/
 */
static Type getTypeForStoreOpcode(int opcode) {
    switch (opcode) {
    case Opcodes.ISTORE:
        return Type.INT_TYPE;
    case Opcodes.LSTORE:
        return Type.LONG_TYPE;
    case Opcodes.FSTORE:
        return Type.FLOAT_TYPE;
    case Opcodes.DSTORE:
        return Type.DOUBLE_TYPE;
    case Opcodes.ASTORE:
        return Type.getType(Object.class);
    }
    return null;
}

From source file:com.android.builder.testing.MockableJarGenerator.java

License:Apache License

/**
 * Rewrites the method bytecode to remove the "Stub!" exception.
 *//*from  w w w .j av a  2s  . com*/
private void fixMethodBody(MethodNode methodNode, ClassNode classNode) {
    if ((methodNode.access & Opcodes.ACC_NATIVE) != 0 || (methodNode.access & Opcodes.ACC_ABSTRACT) != 0) {
        // Abstract and native method don't have bodies to rewrite.
        return;
    }

    if ((classNode.access & Opcodes.ACC_ENUM) != 0 && ENUM_METHODS.contains(methodNode.name)) {
        // Don't break enum classes.
        return;
    }

    Type returnType = Type.getReturnType(methodNode.desc);
    InsnList instructions = methodNode.instructions;

    if (methodNode.name.equals(CONSTRUCTOR)) {
        // Keep the call to parent constructor, delete the exception after that.

        boolean deadCode = false;
        for (AbstractInsnNode instruction : instructions.toArray()) {
            if (!deadCode) {
                if (instruction.getOpcode() == Opcodes.INVOKESPECIAL) {
                    instructions.insert(instruction, new InsnNode(Opcodes.RETURN));
                    // Start removing all following instructions.
                    deadCode = true;
                }
            } else {
                instructions.remove(instruction);
            }
        }
    } else {
        instructions.clear();

        if (returnDefaultValues || methodNode.name.equals(CLASS_CONSTRUCTOR)) {
            if (INTEGER_LIKE_TYPES.contains(returnType)) {
                instructions.add(new InsnNode(Opcodes.ICONST_0));
            } else if (returnType.equals(Type.LONG_TYPE)) {
                instructions.add(new InsnNode(Opcodes.LCONST_0));
            } else if (returnType.equals(Type.FLOAT_TYPE)) {
                instructions.add(new InsnNode(Opcodes.FCONST_0));
            } else if (returnType.equals(Type.DOUBLE_TYPE)) {
                instructions.add(new InsnNode(Opcodes.DCONST_0));
            } else {
                instructions.add(new InsnNode(Opcodes.ACONST_NULL));
            }

            instructions.add(new InsnNode(returnType.getOpcode(Opcodes.IRETURN)));
        } else {
            instructions.insert(throwExceptionsList(methodNode, classNode));
        }
    }
}

From source file:com.asakusafw.dag.compiler.codegen.AsmUtil.java

License:Apache License

/**
 * Returns the ASM {@link Type} object./*ww  w.  j  a v  a  2  s .c o m*/
 * @param type the target type description
 * @return the corresponded {@link Type} object
 */
public static Type typeOf(TypeDescription type) {
    Arguments.requireNonNull(type);
    TypeDescription e = type.getErasure();
    switch (e.getTypeKind()) {
    case BASIC:
        switch (((BasicTypeDescription) e).getBasicTypeKind()) {
        case BOOLEAN:
            return Type.BOOLEAN_TYPE;
        case BYTE:
            return Type.BYTE_TYPE;
        case CHAR:
            return Type.CHAR_TYPE;
        case DOUBLE:
            return Type.DOUBLE_TYPE;
        case FLOAT:
            return Type.FLOAT_TYPE;
        case INT:
            return Type.INT_TYPE;
        case LONG:
            return Type.LONG_TYPE;
        case SHORT:
            return Type.SHORT_TYPE;
        case VOID:
            return Type.VOID_TYPE;
        default:
            throw new AssertionError(type);
        }
    case ARRAY:
        return Type.getType('[' + typeOf(((ArrayTypeDescription) e).getComponentType()).getDescriptor());
    case CLASS:
        return Type.getObjectType(((ClassDescription) e).getInternalName());
    default:
        throw new AssertionError(type);
    }
}