public class MethodReference extends SpelNodeImpl
Modifier and Type | Class and Description |
---|---|
private static class |
MethodReference.CachedMethodExecutor |
private class |
MethodReference.MethodValueRef |
Modifier and Type | Field and Description |
---|---|
private MethodReference.CachedMethodExecutor |
cachedExecutor |
private java.lang.String |
name |
private boolean |
nullSafe |
private java.lang.String |
originalPrimitiveExitTypeDescriptor |
children, exitTypeDescriptor, pos
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_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, ASM4, ASM5, ASM6, 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, V1_8, V1_9
Constructor and Description |
---|
MethodReference(boolean nullSafe,
java.lang.String methodName,
int pos,
SpelNodeImpl... arguments) |
Modifier and Type | Method and Description |
---|---|
private MethodExecutor |
findAccessorForMethod(java.util.List<TypeDescriptor> argumentTypes,
java.lang.Object targetObject,
EvaluationContext evaluationContext) |
void |
generateCode(MethodVisitor mv,
CodeFlow cf)
Generate the bytecode for this node into the supplied visitor.
|
private java.lang.Object[] |
getArguments(ExpressionState state) |
private java.util.List<TypeDescriptor> |
getArgumentTypes(java.lang.Object... arguments) |
private MethodExecutor |
getCachedExecutor(EvaluationContext evaluationContext,
java.lang.Object value,
TypeDescriptor target,
java.util.List<TypeDescriptor> argumentTypes) |
java.lang.String |
getName() |
private TypedValue |
getValueInternal(EvaluationContext evaluationContext,
java.lang.Object value,
TypeDescriptor targetType,
java.lang.Object[] arguments) |
TypedValue |
getValueInternal(ExpressionState state) |
protected ValueRef |
getValueRef(ExpressionState state) |
boolean |
isCompilable()
A method reference is compilable if it has been resolved to a reflectively accessible method
and the child nodes (arguments to the method) are also compilable.
|
private static boolean |
isJava8DefaultMethod(java.lang.reflect.Method method) |
private void |
throwIfNotNullSafe(java.util.List<TypeDescriptor> argumentTypes) |
private void |
throwSimpleExceptionIfPossible(java.lang.Object value,
AccessException ex)
Decode the AccessException, throwing a lightweight evaluation exception or,
if the cause was a RuntimeException, throw the RuntimeException directly.
|
java.lang.String |
toStringAST() |
private void |
updateExitTypeDescriptor() |
generateCodeForArgument, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getPreviousChild, getStartPosition, getTypedValue, getValue, getValue, isWritable, nextChildIs, setValue
private final java.lang.String name
private final boolean nullSafe
private java.lang.String originalPrimitiveExitTypeDescriptor
private volatile MethodReference.CachedMethodExecutor cachedExecutor
public MethodReference(boolean nullSafe, java.lang.String methodName, int pos, SpelNodeImpl... arguments)
public final java.lang.String getName()
protected ValueRef getValueRef(ExpressionState state) throws EvaluationException
getValueRef
in class SpelNodeImpl
EvaluationException
public TypedValue getValueInternal(ExpressionState state) throws EvaluationException
getValueInternal
in class SpelNodeImpl
EvaluationException
private TypedValue getValueInternal(EvaluationContext evaluationContext, java.lang.Object value, TypeDescriptor targetType, java.lang.Object[] arguments)
private void throwIfNotNullSafe(java.util.List<TypeDescriptor> argumentTypes)
private java.lang.Object[] getArguments(ExpressionState state)
private java.util.List<TypeDescriptor> getArgumentTypes(java.lang.Object... arguments)
private MethodExecutor getCachedExecutor(EvaluationContext evaluationContext, java.lang.Object value, TypeDescriptor target, java.util.List<TypeDescriptor> argumentTypes)
private MethodExecutor findAccessorForMethod(java.util.List<TypeDescriptor> argumentTypes, java.lang.Object targetObject, EvaluationContext evaluationContext) throws SpelEvaluationException
SpelEvaluationException
private void throwSimpleExceptionIfPossible(java.lang.Object value, AccessException ex)
private void updateExitTypeDescriptor()
public java.lang.String toStringAST()
public boolean isCompilable()
isCompilable
in class SpelNodeImpl
true
if this node can be compiled to bytecodepublic void generateCode(MethodVisitor mv, CodeFlow cf)
SpelNodeImpl
generateCode
in class SpelNodeImpl
mv
- the ASM MethodVisitor into which code should be generatedcf
- a context object with info about what is on the stackprivate static boolean isJava8DefaultMethod(java.lang.reflect.Method method)