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;
}
}
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();
}
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());
}
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();
}
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();
}
Aggregations