Example usage for org.objectweb.asm Type getMethodType

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

Introduction

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

Prototype

public static Type getMethodType(final Type returnType, final Type... argumentTypes) 

Source Link

Document

Returns the method Type corresponding to the given argument and return types.

Usage

From source file:com.facebook.buck.jvm.java.abi.DescriptorFactory.java

License:Apache License

private Type getType(Element element) {
    return Preconditions.checkNotNull(element.accept(new SimpleElementVisitor8<Type, Void>() {
        @Override/*from w  w  w  .  j  a  va 2 s . c o  m*/
        protected Type defaultAction(Element e, Void aVoid) {
            throw new IllegalArgumentException(String.format("Unexpected element kind: %s", element.getKind()));
        }

        @Override
        public Type visitExecutable(ExecutableElement e, Void aVoid) {
            Stream<TypeMirror> parameterTypeStream = e.getParameters().stream().map(Element::asType);

            if (MoreElements.isInnerClassConstructor(e)) {
                parameterTypeStream = Stream.concat(Stream.of(MoreElements.getOuterClass(e).asType()),
                        parameterTypeStream);
            }

            return Type.getMethodType(getType(e.getReturnType()),
                    parameterTypeStream.map(DescriptorFactory.this::getType).toArray(size -> new Type[size]));
        }

        @Override
        public Type visitVariable(VariableElement e, Void aVoid) {
            return getType(e.asType());
        }
    }, null));
}

From source file:com.github.jasmo.obfuscate.InlineAccessors.java

License:Open Source License

private boolean isSetterFor(ClassNode owner, FieldNode field, MethodNode method) {
    if (local(method.access) == local(field.access) && isTopLevel(owner, method)) {
        Type type = Type.getType(field.desc);
        Type setType = Type.getMethodType(Type.VOID_TYPE, type);
        Type methodType = Type.getMethodType(method.desc);
        if (methodType.equals(setType)) {
            List<AbstractInsnNode> instructions = getRealInstructions(method);
            Query[] queries = getPattern(false, owner, field);
            return matches(instructions, queries);
        }/*from   w w  w.j a v  a2 s.c  om*/
    }
    return false;
}

From source file:edu.ubc.mirrors.holograms.HologramClassGenerator.java

License:Open Source License

public static Type getOriginalType(Type type) {
    if (type.getSort() == Type.METHOD) {
        Type[] argumentTypes = type.getArgumentTypes();
        Type[] originalArgTypes = new Type[argumentTypes.length];
        for (int i = 0; i < argumentTypes.length; i++) {
            originalArgTypes[i] = getOriginalType(argumentTypes[i]);
        }//from www .  j  a  v a 2 s.com
        return Type.getMethodType(getOriginalType(type.getReturnType()), originalArgTypes);
    } else if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
        return Type.getObjectType(getOriginalInternalClassName(type.getInternalName()));
    } else {
        return type;
    }

}

From source file:edu.ubc.mirrors.holograms.HologramMethodGenerator.java

License:Open Source License

private void boxIfNeeded(Type type) {
    Class<?> boxingType = Reflection.getBoxingType(type);
    if (boxingType != null) {
        invokestatic(Type.getInternalName(boxingType), "valueOf",
                Type.getMethodType(Type.getType(boxingType), type).getDescriptor());
    }/*  w  w w .  j  a  v a  2s . c o  m*/
}

From source file:edu.ubc.mirrors.Reflection.java

License:Open Source License

public static Type getMethodType(MethodMirror method) {
    List<String> parameterTypeNames = method.getParameterTypeNames();
    Type[] argTypes = new Type[parameterTypeNames.size()];
    int i = 0;//  w  w w .  j a  va2s . c  o m
    for (String paramTypeName : parameterTypeNames) {
        argTypes[i++] = typeForClassName(paramTypeName);
    }
    return Type.getMethodType(typeForClassName(method.getReturnTypeName()), argTypes);
}

From source file:edu.ubc.mirrors.Reflection.java

License:Open Source License

public static Type getMethodType(ConstructorMirror constructor) {
    List<String> parameterTypeNames = constructor.getParameterTypeNames();
    Type[] argTypes = new Type[parameterTypeNames.size()];
    int i = 0;/*from   ww  w .  j  av a2s.c  om*/
    for (String paramTypeName : parameterTypeNames) {
        argTypes[i++] = typeForClassName(paramTypeName);
    }
    return Type.getMethodType(Type.VOID_TYPE, argTypes);
}

From source file:net.sandius.rembulan.compiler.gen.asm.ConstructorMethod.java

License:Apache License

public Type methodType() {
    Type[] args = new Type[context.fn.upvals().size()];
    Arrays.fill(args, Type.getType(Variable.class));
    return Type.getMethodType(Type.VOID_TYPE, args);
}

From source file:net.sandius.rembulan.compiler.gen.asm.helpers.ReturnBufferMethods.java

License:Apache License

public static AbstractInsnNode get() {
    return new MethodInsnNode(INVOKEINTERFACE, selfTpe().getInternalName(), "get",
            Type.getMethodType(Type.getType(Object.class), Type.INT_TYPE).getDescriptor(), true);
}

From source file:net.sandius.rembulan.compiler.gen.asm.RunMethod.java

License:Apache License

private Type snapshotMethodType() {
    ArrayList<Type> args = new ArrayList<>();

    args.add(Type.INT_TYPE);/*  www . ja v a  2 s.  c o m*/
    if (context.isVararg()) {
        args.add(ASMUtils.arrayTypeFor(Object.class));
    }
    for (int i = 0; i < numOfRegisters(); i++) {
        args.add(Type.getType(Object.class));
    }
    return Type.getMethodType(context.savedStateClassType(), args.toArray(new Type[0]));
}

From source file:net.sandius.rembulan.compiler.gen.asm.RunMethod.java

License:Apache License

private Type methodType(Type returnType) {
    ArrayList<Type> args = new ArrayList<>();

    args.add(Type.getType(ExecutionContext.class));
    args.add(Type.INT_TYPE);//from   w  w w .j  a v a2s .c  o  m
    if (context.isVararg()) {
        args.add(ASMUtils.arrayTypeFor(Object.class));
    }
    for (int i = 0; i < numOfRegisters(); i++) {
        args.add(Type.getType(Object.class));
    }
    return Type.getMethodType(returnType, args.toArray(new Type[0]));
}