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
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, ASM7, 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, V9
Constructor and Description |
---|
MethodReference(boolean nullSafe,
java.lang.String methodName,
int startPos,
int endPos,
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 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()
Return the string form the this AST node.
|
private void |
updateExitTypeDescriptor() |
generateCodeForArgument, generateCodeForArguments, getChild, getChildCount, getEndPosition, getExitDescriptor, getObjectClass, getStartPosition, getTypedValue, getValue, getValue, isWritable, nextChildIs, setValue
private final java.lang.String name
private final boolean nullSafe
@Nullable private java.lang.String originalPrimitiveExitTypeDescriptor
@Nullable private volatile MethodReference.CachedMethodExecutor cachedExecutor
public MethodReference(boolean nullSafe, java.lang.String methodName, int startPos, int endPos, 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, @Nullable java.lang.Object value, @Nullable 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)
@Nullable private MethodExecutor getCachedExecutor(EvaluationContext evaluationContext, java.lang.Object value, @Nullable 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()
SpelNode
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 stack