public class InvocationMethodFactory extends MethodFactory implements org.objectweb.asm.Opcodes
MethodFactory
MethodFactory.MethodDefiningCallback
Modifier and Type | Field and Description |
---|---|
static int |
ARGS_INDEX
The lvar index of the method args on the call
|
static int |
BLOCK_INDEX
The lvar index of the passed-in Block on the call
|
static int |
CLASS_INDEX
The lvar index of the RubyClass being invoked against
|
protected JRubyClassLoader |
classLoader
The classloader to use for code loading
|
static int |
NAME_INDEX
The lvar index method name being invoked
|
static int |
RECEIVER_INDEX
The lvar index of the method-receiving object
|
protected Object |
syncObject
An object to sync against when loading classes, to avoid dups
|
static int |
THIS_INDEX
The lvar index of "this"
|
static int |
THREADCONTEXT_INDEX
The lvar index of the passed-in ThreadContext
|
CAN_LOAD_BYTECODE, COMPILED_METHOD_PARAMS
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM4, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
Constructor and Description |
---|
InvocationMethodFactory(ClassLoader classLoader)
Construct a new InvocationMethodFactory using the specified classloader
to load code.
|
Modifier and Type | Method and Description |
---|---|
protected Class |
endCall(org.objectweb.asm.ClassWriter cw,
String name) |
protected byte[] |
endCallOffline(org.objectweb.asm.ClassWriter cw) |
protected Class |
endCallWithBytes(byte[] classBytes,
String name) |
protected Class |
endClass(org.objectweb.asm.ClassWriter cw,
String name) |
protected byte[] |
endClassOffline(org.objectweb.asm.ClassWriter cw) |
protected Class |
endClassWithBytes(byte[] code,
String name) |
DynamicMethod |
getAnnotatedMethod(RubyModule implementationClass,
JavaMethodDescriptor desc)
Use code generation to provide a method handle based on an annotated Java
method.
|
DynamicMethod |
getAnnotatedMethod(RubyModule implementationClass,
List<JavaMethodDescriptor> descs)
Use code generation to provide a method handle based on an annotated Java
method.
|
Class |
getAnnotatedMethodClass(List<JavaMethodDescriptor> descs)
Use code generation to provide a method handle based on an annotated Java
method.
|
CompiledBlockCallback |
getBlockCallback(String method,
String file,
int line,
Object scriptObject)
Get a CompiledBlockCallback for the specified block
|
CompiledBlockCallback19 |
getBlockCallback19(String method,
String file,
int line,
Object scriptObject)
Get a CompiledBlockCallback for the specified block
|
byte[] |
getBlockCallback19Offline(String method,
String file,
int line,
String classname)
Get a CompiledBlockCallback for the specified block, returning the bytes
but not loading the class.
|
static String |
getBlockCallbackName(String typePathString,
String method) |
byte[] |
getBlockCallbackOffline(String method,
String file,
int line,
String classname)
Get a CompiledBlockCallback for the specified block, returning the bytes
but not loading the class.
|
static String |
getCompiledCallbackName(String typePath,
String method) |
DynamicMethod |
getCompiledMethod(RubyModule implementationClass,
String rubyName,
String javaName,
Arity arity,
Visibility visibility,
StaticScope scope,
Object scriptObject,
CallConfiguration callConfig,
ISourcePosition position,
String parameterDesc)
Use code generation to provide a method handle for a compiled Ruby method.
|
DynamicMethod |
getCompiledMethodLazily(RubyModule implementationClass,
String rubyName,
String javaName,
Arity arity,
Visibility visibility,
StaticScope scope,
Object scriptObject,
CallConfiguration callConfig,
ISourcePosition position,
String parameterDesc)
Use code generation to provide a method handle for a compiled Ruby method.
|
byte[] |
getCompiledMethodOffline(String RubyName,
String method,
String className,
String invokerPath,
Arity arity,
StaticScope scope,
CallConfiguration callConfig,
String filename,
int line)
Use code generation to provide a method handle for a compiled Ruby method.
|
static String |
getPostMethod(CallConfiguration callConfig) |
void |
prepareAnnotatedMethod(RubyModule implementationClass,
JavaMethod javaMethod,
JavaMethodDescriptor desc)
Use code generation to provide a method handle based on an annotated Java
method.
|
createFactory
public static final int THIS_INDEX
public static final int THREADCONTEXT_INDEX
public static final int RECEIVER_INDEX
public static final int CLASS_INDEX
public static final int NAME_INDEX
public static final int ARGS_INDEX
public static final int BLOCK_INDEX
protected final JRubyClassLoader classLoader
protected final Object syncObject
public InvocationMethodFactory(ClassLoader classLoader)
classLoader
- The classloader to use, or to wrap if it is not a
JRubyClassLoader instance.public DynamicMethod getCompiledMethodLazily(RubyModule implementationClass, String rubyName, String javaName, Arity arity, Visibility visibility, StaticScope scope, Object scriptObject, CallConfiguration callConfig, ISourcePosition position, String parameterDesc)
getCompiledMethodLazily
in class MethodFactory
implementationClass
- The class to which the method will be bound.rubyName
- The Ruby method name to which the method will bindjavaName
- The name of the methodarity
- The Arity of the methodvisibility
- The method's visibility on the target type.scope
- The methods static scoping information.scriptObject
- An instace of the target compiled method class.callConfig
- The call configuration to use for this method.MethodFactory.getCompiledMethod(org.jruby.RubyModule, java.lang.String, java.lang.String, org.jruby.runtime.Arity, org.jruby.runtime.Visibility, org.jruby.parser.StaticScope, java.lang.Object, org.jruby.internal.runtime.methods.CallConfiguration, org.jruby.lexer.yacc.ISourcePosition, java.lang.String)
public static String getCompiledCallbackName(String typePath, String method)
public DynamicMethod getCompiledMethod(RubyModule implementationClass, String rubyName, String javaName, Arity arity, Visibility visibility, StaticScope scope, Object scriptObject, CallConfiguration callConfig, ISourcePosition position, String parameterDesc)
getCompiledMethod
in class MethodFactory
implementationClass
- The class to which the method will be bound.rubyName
- The Ruby method name to which the method will bindjavaName
- The name of the methodarity
- The Arity of the methodvisibility
- The method's visibility on the target type.scope
- The methods static scoping information.scriptObject
- An instace of the target compiled method class.callConfig
- The call configuration to use for this method.position
- The position to use when generating traceable handles.MethodFactory.getCompiledMethod(org.jruby.RubyModule, java.lang.String, java.lang.String, org.jruby.runtime.Arity, org.jruby.runtime.Visibility, org.jruby.parser.StaticScope, java.lang.Object, org.jruby.internal.runtime.methods.CallConfiguration, org.jruby.lexer.yacc.ISourcePosition, java.lang.String)
public byte[] getCompiledMethodOffline(String RubyName, String method, String className, String invokerPath, Arity arity, StaticScope scope, CallConfiguration callConfig, String filename, int line)
getCompiledMethodOffline
in class MethodFactory
RubyName
- The Ruby method name to which the method will bindmethod
- The name of the methodclassName
- The path-like (with / instead of .) name of the classinvokerPath
- The path-line name of the invoker to generatearity
- The Arity of the methodscope
- The methods static scoping information.callConfig
- The call configuration to use for this method.MethodFactory.getCompiledMethod(org.jruby.RubyModule, java.lang.String, java.lang.String, org.jruby.runtime.Arity, org.jruby.runtime.Visibility, org.jruby.parser.StaticScope, java.lang.Object, org.jruby.internal.runtime.methods.CallConfiguration, org.jruby.lexer.yacc.ISourcePosition, java.lang.String)
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, List<JavaMethodDescriptor> descs)
getAnnotatedMethod
in class MethodFactory
implementationClass
- The target class or module on which the method
will be bound.MethodFactory.getAnnotatedMethod(org.jruby.RubyModule, java.util.List<org.jruby.anno.JavaMethodDescriptor>)
public Class getAnnotatedMethodClass(List<JavaMethodDescriptor> descs) throws Exception
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, JavaMethodDescriptor desc)
getAnnotatedMethod
in class MethodFactory
implementationClass
- The target class or module on which the method
will be bound.desc
- A JavaMethodDescriptor describing the target methodMethodFactory.getAnnotatedMethod(org.jruby.RubyModule, java.util.List<org.jruby.anno.JavaMethodDescriptor>)
public static String getBlockCallbackName(String typePathString, String method)
public CompiledBlockCallback getBlockCallback(String method, String file, int line, Object scriptObject)
MethodFactory
getBlockCallback
in class MethodFactory
method
- The name of the methodscriptObject
- The object in which the method can be foundpublic byte[] getBlockCallbackOffline(String method, String file, int line, String classname)
MethodFactory
getBlockCallbackOffline
in class MethodFactory
method
- The name of the methodclassname
- The /-based name of the class containing the methodpublic CompiledBlockCallback19 getBlockCallback19(String method, String file, int line, Object scriptObject)
MethodFactory
getBlockCallback19
in class MethodFactory
method
- The name of the methodscriptObject
- The object in which the method can be foundpublic byte[] getBlockCallback19Offline(String method, String file, int line, String classname)
MethodFactory
getBlockCallback19Offline
in class MethodFactory
method
- The name of the methodclassname
- The /-based name of the class containing the methodpublic void prepareAnnotatedMethod(RubyModule implementationClass, JavaMethod javaMethod, JavaMethodDescriptor desc)
public static String getPostMethod(CallConfiguration callConfig)
protected byte[] endCallOffline(org.objectweb.asm.ClassWriter cw)
protected byte[] endClassOffline(org.objectweb.asm.ClassWriter cw)
Copyright © 2001-2013 JRuby. All Rights Reserved.