Class InvokeDynamicMethodFactory
java.lang.Object
org.jruby.runtime.MethodFactory
org.jruby.internal.runtime.methods.InvocationMethodFactory
org.jruby.internal.runtime.methods.InvokeDynamicMethodFactory
- All Implemented Interfaces:
org.objectweb.asm.Opcodes
This invoker uses MethodHandle for all bindings to Java code, rather than generating
stubs or using reflection.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final com.headius.invokebinder.Signature[]
static final com.headius.invokebinder.Signature
Fields inherited from class org.jruby.internal.runtime.methods.InvocationMethodFactory
ARGS_INDEX, BLOCK_INDEX, CLASS_INDEX, classLoader, NAME_INDEX, RECEIVER_INDEX, syncObject, THIS_INDEX, THREADCONTEXT_INDEX
Fields inherited from interface org.objectweb.asm.Opcodes
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, 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, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V23, V24, V9
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic Supplier
<MethodHandle> adaptHandle
(MethodHandle method, Ruby runtime, int actualRequired, int required, int optional, boolean rest, String rubyName, Class declaringClass, boolean isStatic, boolean hasContext, boolean hasBlock, boolean frame, RubyModule implementationClass) static MethodHandle
finishAdapting
(com.headius.invokebinder.SmartBinder binder, RubyModule implementationClass, String rubyName, MethodHandle method, Class declaringClass, Ruby runtime, boolean isStatic, boolean frame) getAnnotatedMethod
(RubyModule implementationClass, List<JavaMethodDescriptor> descs, String name) Use code generation to provide a method handle based on an annotated Java method.getAnnotatedMethod
(RubyModule implementationClass, JavaMethodDescriptor desc, String name) Use code generation to provide a method handle based on an annotated Java method.static com.headius.invokebinder.SmartBinder
getBinder
(int specific, boolean b1, boolean b2, boolean b3) static com.headius.invokebinder.SmartBinder
preAdaptHandle
(int specificArity, boolean isStatic, boolean hasContext, boolean hasBlock) Methods inherited from class org.jruby.internal.runtime.methods.InvocationMethodFactory
constructJavaMethod, endClass, getAnnotatedMethodClass, getPostMethod
Methods inherited from class org.jruby.runtime.MethodFactory
createFactory
-
Field Details
-
VARIABLE_ARITY_SIGNATURE
public static final com.headius.invokebinder.Signature VARIABLE_ARITY_SIGNATURE -
SPECIFIC_ARITY_SIGNATURES
public static final com.headius.invokebinder.Signature[] SPECIFIC_ARITY_SIGNATURES
-
-
Constructor Details
-
InvokeDynamicMethodFactory
-
-
Method Details
-
getAnnotatedMethod
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, List<JavaMethodDescriptor> descs, String name) Description copied from class:InvocationMethodFactory
Use code generation to provide a method handle based on an annotated Java method.- Overrides:
getAnnotatedMethod
in classInvocationMethodFactory
- Parameters:
implementationClass
- The target class or module on which the method will be bound.- Returns:
- A method handle for the target object.
- See Also:
-
preAdaptHandle
public static com.headius.invokebinder.SmartBinder preAdaptHandle(int specificArity, boolean isStatic, boolean hasContext, boolean hasBlock) -
finishAdapting
public static MethodHandle finishAdapting(com.headius.invokebinder.SmartBinder binder, RubyModule implementationClass, String rubyName, MethodHandle method, Class declaringClass, Ruby runtime, boolean isStatic, boolean frame) -
adaptHandle
public static Supplier<MethodHandle> adaptHandle(MethodHandle method, Ruby runtime, int actualRequired, int required, int optional, boolean rest, String rubyName, Class declaringClass, boolean isStatic, boolean hasContext, boolean hasBlock, boolean frame, RubyModule implementationClass) -
getAnnotatedMethod
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, JavaMethodDescriptor desc, String name) Use code generation to provide a method handle based on an annotated Java method.- Overrides:
getAnnotatedMethod
in classInvocationMethodFactory
- Parameters:
implementationClass
- The target class or module on which the method will be bound.desc
- A JavaMethodDescriptor describing the target method- Returns:
- A method handle for the target object.
- See Also:
-
getBinder
public static com.headius.invokebinder.SmartBinder getBinder(int specific, boolean b1, boolean b2, boolean b3)
-