Example usage for org.objectweb.asm.signature SignatureWriter visitParameterType

List of usage examples for org.objectweb.asm.signature SignatureWriter visitParameterType

Introduction

In this page you can find the example usage for org.objectweb.asm.signature SignatureWriter visitParameterType.

Prototype

@Override
    public SignatureVisitor visitParameterType() 

Source Link

Usage

From source file:co.cask.cdap.internal.asm.Signatures.java

License:Apache License

/**
 * Generates signature for the given method.
 *
 * @param method Method that needs signature to be generated
 * @param types List of {@link TypeToken} that matches with the number of arguments in the given method.
 *              For a given method argument, if the coresponding {@link TypeToken} is non-null, it will be
 *              used to generate the type parameter in the signature, otherwise, the one in the method will be used.
 *              It's useful if the method is parameterized so that parameterize type information can be passed
 *              through the type tokens.
 * @return A method signature string/*from   w  ww. j a  va2  s .  co  m*/
 */
public static String getMethodSignature(Method method, TypeToken<?>... types) {
    SignatureWriter signWriter = new SignatureWriter();

    Type[] argumentTypes = method.getArgumentTypes();

    for (int i = 0; i < argumentTypes.length; i++) {
        SignatureVisitor sv = signWriter.visitParameterType();
        if (types[i] != null) {
            visitTypeSignature(types[i], sv);
        } else {
            sv.visitClassType(argumentTypes[i].getInternalName());
            sv.visitEnd();
        }
    }

    signWriter.visitReturnType().visitBaseType('V');

    return signWriter.toString();
}

From source file:co.cask.cdap.internal.io.FieldAccessorGenerator.java

License:Apache License

/**
 * @return the getter signature {@code <T> T get(Object object)}
 *///  w  w  w . j a  va 2s . c o m
private String getterSignature() {
    SignatureWriter writer = new SignatureWriter();
    writer.visitFormalTypeParameter("T");
    SignatureVisitor sv = writer.visitClassBound();
    sv.visitClassType(Type.getInternalName(Object.class));
    sv.visitEnd();

    sv = writer.visitParameterType();
    sv.visitClassType(Type.getInternalName(Object.class));
    sv.visitEnd();

    sv = sv.visitReturnType();
    sv.visitTypeVariable("T");

    return writer.toString();
}

From source file:co.cask.cdap.internal.io.FieldAccessorGenerator.java

License:Apache License

/**
 * @return the setter signature {@code <T> void set(Object object, T value)}
 *///w w  w.ja  v a  2 s .co m
private String setterSignature() {
    SignatureWriter writer = new SignatureWriter();
    writer.visitFormalTypeParameter("T");
    SignatureVisitor sv = writer.visitClassBound();
    sv.visitClassType(Type.getInternalName(Object.class));
    sv.visitEnd();

    sv = writer.visitParameterType();
    sv.visitClassType(Type.getInternalName(Object.class));
    sv.visitEnd();

    sv = writer.visitParameterType();
    sv.visitTypeVariable("T");

    sv.visitReturnType().visitBaseType('V');

    return writer.toString();
}

From source file:co.cask.tigon.internal.asm.Signatures.java

License:Apache License

public static String getMethodSignature(Method method, TypeToken<?>[] types) {
    SignatureWriter signWriter = new SignatureWriter();

    Type[] argumentTypes = method.getArgumentTypes();

    for (int i = 0; i < argumentTypes.length; i++) {
        SignatureVisitor sv = signWriter.visitParameterType();
        if (types[i] != null) {
            visitTypeSignature(types[i], sv);
        } else {/*from www .  j  a v  a2  s  .co  m*/
            sv.visitClassType(argumentTypes[i].getInternalName());
            sv.visitEnd();
        }
    }

    signWriter.visitReturnType().visitBaseType('V');

    return signWriter.toString();
}

From source file:com.google.code.jconts.instrument.gen.ComputationClassGenerator.java

License:Apache License

private String executeSignature() {
    SignatureWriter sw = new SignatureWriter();
    contSignature(sw.visitParameterType());
    sw.visitReturnType().visitBaseType('V');
    return sw.toString();
}

From source file:com.google.code.jconts.instrument.gen.ContinuationClassGenerator.java

License:Apache License

private void generateExecute(ClassVisitor cv, boolean execute) {
    final String name = info.continuationClassName;
    final Type outerType = Type.getObjectType(info.owner);

    // Generate invoke(T result);
    String signature = null;/*from   w  w w  .j a va 2s  . c  o m*/
    if (execute) {
        SignatureWriter sign = new SignatureWriter();
        sign.visitParameterType().visitTypeVariable("T");
        sign.visitReturnType().visitBaseType('V'); // void
        signature = sign.toString();
    }
    MethodVisitor mv = cv.visitMethod(Opcodes.ACC_FINAL | Opcodes.ACC_PUBLIC,
            execute ? CONTINUATION_INVOKE_NAME : CONTINUATION_SET_EXCEPTION_NAME,
            execute ? CONTINUATION_INVOKE_DESC : CONTINUATION_SET_EXCEPTION_DESC, signature, null);
    mv.visitCode();
    Label start = new Label();
    Label end = new Label();
    mv.visitLabel(start);

    // Load outer this
    if (!info.isStatic()) {
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        mv.visitFieldInsn(Opcodes.GETFIELD, name, "this$0", outerType.getDescriptor());
    }

    // state.result = result or state.exception = throwable
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, name, "state", stateDesc);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitFieldInsn(Opcodes.PUTFIELD, info.stateClassName, execute ? "result" : "exception",
            execute ? OBJECT_DESC : THROWABLE_DESC);

    // Load state field
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, name, "state", stateDesc);

    // Continue from this index or index+1 (for exception)
    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitFieldInsn(Opcodes.GETFIELD, name, "index", "I");
    if (!execute) {
        mv.visitInsn(Opcodes.ICONST_1);
        mv.visitInsn(Opcodes.IADD);
    }

    mv.visitMethodInsn(info.isStatic() ? Opcodes.INVOKESTATIC : Opcodes.INVOKEVIRTUAL, info.owner,
            info.name + "$async",
            Type.getMethodDescriptor(Type.VOID_TYPE, new Type[] { info.stateType, Type.INT_TYPE }));

    mv.visitInsn(Opcodes.RETURN);
    mv.visitLabel(end);

    mv.visitLocalVariable("this", 'L' + name + ';', signature, start, end, 0);
    if (!info.isStatic()) {
        mv.visitLocalVariable("this$0", outerType.getDescriptor(), null, start, end, 1);
    }
    mv.visitLocalVariable("result", OBJECT_DESC, "TT;", start, end, 1 + info.thisOffset);

    mv.visitMaxs(3 + info.thisOffset + (execute ? 0 : 1), 2 + info.thisOffset);
    mv.visitEnd();
}