Search in sources :

Example 36 with Type

use of org.objectweb.asm.Type in project spring-loaded by spring-projects.

the class MethodProvider method create.

public static MethodProvider create(TypeRegistry registry, TypeDescriptor typeDescriptor) {
    if (typeDescriptor.isReloadable()) {
        ReloadableType rtype = registry.getReloadableType(typeDescriptor.getName(), false);
        if (rtype == null) {
            TypeRegistry tr = registry;
            while (rtype == null) {
                ClassLoader pcl = tr.getClassLoader().getParent();
                if (pcl == null) {
                    break;
                } else {
                    tr = TypeRegistry.getTypeRegistryFor(pcl);
                    if (tr == null) {
                        break;
                    }
                    rtype = tr.getReloadableType(typeDescriptor.getName(), false);
                }
            }
        }
        if (rtype != null) {
            return new ReloadableTypeMethodProvider(rtype);
        }
    //			ReloadableType rtype = registry.getReloadableType(typeDescriptor.getName(), true);
    //			// TODO rtype can be null if this type hasn't been loaded yet for the first time, is that true?
    //			// e.g. CGLIB generated proxy for a service type in grails
    //			if (rtype != null) {
    //				return new ReloadableTypeMethodProvider(rtype);
    //			}
    }
    try {
        try {
            Type objectType = Type.getObjectType(typeDescriptor.getName());
            // TODO doing things this way would mean we aren't 'guessing' the delegation strategy, we
            // are instead allowing it to do its thing then looking for the right registry.
            // Above we are guessing regular parent delegation.
            Class<?> class1 = Utils.toClass(objectType, registry.getClassLoader());
            if (typeDescriptor.isReloadable()) {
                ClassLoader cl = class1.getClassLoader();
                TypeRegistry tr = TypeRegistry.getTypeRegistryFor(cl);
                ReloadableType rtype = tr.getReloadableType(typeDescriptor.getName(), true);
                if (rtype != null) {
                    return new ReloadableTypeMethodProvider(rtype);
                }
            }
            return create(class1);
        } catch (ClassNotFoundException e) {
            throw new IllegalStateException("We have a type descriptor for '" + typeDescriptor.getName() + " but no corresponding Java class", e);
        }
    } catch (RuntimeException re) {
        re.printStackTrace();
        throw re;
    }
}
Also used : ReloadableType(org.springsource.loaded.ReloadableType) Type(org.objectweb.asm.Type) ReloadableType(org.springsource.loaded.ReloadableType) TypeRegistry(org.springsource.loaded.TypeRegistry)

Example 37 with Type

use of org.objectweb.asm.Type in project platform_frameworks_base by android.

the class AbstractClassAdapter method renameMethodDesc.

/**
     * Renames a method descriptor, i.e. applies renameType to all arguments and to the
     * return value.
     */
String renameMethodDesc(String desc) {
    if (desc == null) {
        return null;
    }
    Type[] args = Type.getArgumentTypes(desc);
    StringBuilder sb = new StringBuilder("(");
    for (Type arg : args) {
        String name = renameType(arg);
        sb.append(name);
    }
    sb.append(')');
    Type ret = Type.getReturnType(desc);
    String name = renameType(ret);
    sb.append(name);
    return sb.toString();
}
Also used : Type(org.objectweb.asm.Type)

Example 38 with Type

use of org.objectweb.asm.Type in project es6draft by anba.

the class SimpleTypeTextifier method visitInvokeDynamicInsn.

@Override
public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) {
    buf.setLength(0);
    buf.append(tab2).append("INVOKEDYNAMIC").append(' ').append(name);
    appendDescriptor(METHOD_DESCRIPTOR, desc);
    if (bsmArgs.length != 0) {
        buf.append(" [");
        for (int i = 0; i < bsmArgs.length; ++i) {
            Object arg = bsmArgs[i];
            if (arg instanceof String) {
                appendString(buf, (String) arg);
            } else if (arg instanceof Type) {
                Type type = (Type) arg;
                if (type.getSort() == Type.METHOD) {
                    appendDescriptor(METHOD_DESCRIPTOR, type.getDescriptor());
                } else {
                    appendDescriptor(INTERNAL_NAME, type.getDescriptor());
                }
            } else if (arg instanceof Handle) {
                Handle handle = (Handle) arg;
                appendDescriptor(HANDLE_DESCRIPTOR, getMethodDescriptor(handle.getDesc()));
            } else {
                buf.append(arg);
            }
            if (i + 1 < bsmArgs.length) {
                buf.append(", ");
            }
        }
        buf.append("]");
    }
    buf.append("\n");
    text.add(buf.toString());
}
Also used : Type(org.objectweb.asm.Type) Handle(org.objectweb.asm.Handle)

Example 39 with Type

use of org.objectweb.asm.Type in project blade by biezhi.

the class ParallelSorterEmitter method generateConstructor.

private void generateConstructor(Object[] arrays) {
    CodeEmitter e = begin_method(Constants.ACC_PUBLIC, CSTRUCT_OBJECT_ARRAY, null);
    e.load_this();
    e.super_invoke_constructor();
    e.load_this();
    e.load_arg(0);
    e.super_putfield("a", Constants.TYPE_OBJECT_ARRAY);
    for (int i = 0; i < arrays.length; i++) {
        Type type = Type.getType(arrays[i].getClass());
        declare_field(Constants.ACC_PRIVATE, getFieldName(i), type, null);
        e.load_this();
        e.load_arg(0);
        e.push(i);
        e.aaload();
        e.checkcast(type);
        e.putfield(getFieldName(i));
    }
    e.return_value();
    e.end_method();
}
Also used : Type(org.objectweb.asm.Type)

Example 40 with Type

use of org.objectweb.asm.Type in project blade by biezhi.

the class ParallelSorterEmitter method generateSwap.

private void generateSwap(final Object[] arrays) {
    CodeEmitter e = begin_method(Constants.ACC_PUBLIC, SWAP, null);
    for (int i = 0; i < arrays.length; i++) {
        Type type = Type.getType(arrays[i].getClass());
        Type component = TypeUtils.getComponentType(type);
        Local T = e.make_local(type);
        e.load_this();
        e.getfield(getFieldName(i));
        e.store_local(T);
        e.load_local(T);
        e.load_arg(0);
        e.load_local(T);
        e.load_arg(1);
        e.array_load(component);
        e.load_local(T);
        e.load_arg(1);
        e.load_local(T);
        e.load_arg(0);
        e.array_load(component);
        e.array_store(component);
        e.array_store(component);
    }
    e.return_value();
    e.end_method();
}
Also used : Type(org.objectweb.asm.Type)

Aggregations

Type (org.objectweb.asm.Type)151 MethodVisitor (org.objectweb.asm.MethodVisitor)33 Label (org.objectweb.asm.Label)21 Method (org.objectweb.asm.commons.Method)16 GeneratorAdapter (org.objectweb.asm.commons.GeneratorAdapter)14 ClassWriter (org.objectweb.asm.ClassWriter)13 ArrayList (java.util.ArrayList)11 ClassReader (org.objectweb.asm.ClassReader)10 Method (java.lang.reflect.Method)9 AnnotationVisitor (org.objectweb.asm.AnnotationVisitor)9 ClassVisitor (org.objectweb.asm.ClassVisitor)9 PropertyAccessorType (org.gradle.internal.reflect.PropertyAccessorType)7 ModelType (org.gradle.model.internal.type.ModelType)7 LayoutlibDelegate (com.android.tools.layoutlib.annotations.LayoutlibDelegate)6 MethodType (java.lang.invoke.MethodType)6 List (java.util.List)6 VarInsnNode (org.objectweb.asm.tree.VarInsnNode)5 InterceptorType (com.navercorp.pinpoint.profiler.instrument.interceptor.InterceptorType)4 IOException (java.io.IOException)4 InputStream (java.io.InputStream)4