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 |
children, exitTypeDescriptor, pos
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, 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, ASM5, 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
Constructor and Description |
---|
MethodReference(boolean nullSafe,
java.lang.String methodName,
int pos,
SpelNodeImpl... arguments) |
Modifier and Type | Method and Description |
---|---|
private MethodExecutor |
findAccessorForMethod(java.lang.String name,
java.util.List<TypeDescriptor> argumentTypes,
java.lang.Object targetObject,
EvaluationContext evaluationContext) |
void |
generateCode(MethodVisitor mv,
CodeFlow codeflow)
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 |
getExitDescriptor() |
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 ae)
Decode the AccessException, throwing a lightweight evaluation exception or, if the
cause was a RuntimeException, throw the RuntimeException directly.
|
java.lang.String |
toStringAST() |
getChild, getChildCount, getEndPosition, getObjectClass, getPreviousChild, getStartPosition, getTypedValue, getValue, getValue, isWritable, nextChildIs, setValue
private final java.lang.String name
private final boolean nullSafe
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
public java.lang.String getExitDescriptor()
getExitDescriptor
in class SpelNodeImpl
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.lang.String name, java.util.List<TypeDescriptor> argumentTypes, java.lang.Object targetObject, EvaluationContext evaluationContext) throws SpelEvaluationException
SpelEvaluationException
private void throwSimpleExceptionIfPossible(java.lang.Object value, AccessException ae)
public java.lang.String toStringAST()
public boolean isCompilable()
isCompilable
in class SpelNodeImpl
public void generateCode(MethodVisitor mv, CodeFlow codeflow)
SpelNodeImpl
generateCode
in class SpelNodeImpl
mv
- the ASM MethodVisitor into which code should be generatedcodeflow
- a context object with info about what is on the stack