Package | Description |
---|---|
org.springframework.asm |
Spring's repackaging of
ASM
(for internal use only).
|
org.springframework.context.expression |
Expression parsing support within a Spring application context.
|
org.springframework.core.type.classreading |
Support classes for reading annotation and class-level metadata.
|
org.springframework.expression.spel |
SpEL's central implementation package.
|
org.springframework.expression.spel.ast |
SpEL's abstract syntax tree.
|
org.springframework.expression.spel.support |
SpEL's default implementations for various core abstractions.
|
Modifier and Type | Field and Description |
---|---|
protected MethodVisitor |
MethodVisitor.mv
The method visitor to which this visitor must delegate method calls.
|
Modifier and Type | Method and Description |
---|---|
MethodVisitor |
ClassVisitor.visitMethod(int access,
java.lang.String name,
java.lang.String descriptor,
java.lang.String signature,
java.lang.String[] exceptions)
Visits a method of the class.
|
MethodVisitor |
ClassWriter.visitMethod(int access,
java.lang.String name,
java.lang.String descriptor,
java.lang.String signature,
java.lang.String[] exceptions) |
Constructor and Description |
---|
MethodVisitor(int api,
MethodVisitor methodVisitor)
Constructs a new
MethodVisitor . |
Modifier and Type | Method and Description |
---|---|
void |
MapAccessor.generateCode(java.lang.String propertyName,
MethodVisitor mv,
CodeFlow cf) |
Modifier and Type | Class and Description |
---|---|
class |
MethodMetadataReadingVisitor
ASM method visitor which looks for the annotations defined on a method,
exposing them through the
MethodMetadata
interface. |
Modifier and Type | Method and Description |
---|---|
MethodVisitor |
AnnotationMetadataReadingVisitor.visitMethod(int access,
java.lang.String name,
java.lang.String desc,
java.lang.String signature,
java.lang.String[] exceptions) |
Modifier and Type | Method and Description |
---|---|
void |
CodeFlow.ClinitAdder.generateCode(MethodVisitor mv,
CodeFlow codeflow) |
void |
CompilablePropertyAccessor.generateCode(java.lang.String propertyName,
MethodVisitor mv,
CodeFlow cf)
Generate the bytecode the performs the access operation into the specified MethodVisitor
using context information from the codeflow where necessary.
|
static void |
CodeFlow.insertAnyNecessaryTypeConversionBytecodes(MethodVisitor mv,
char targetDescriptor,
java.lang.String stackDescriptor)
Insert any necessary numeric conversion bytecodes based upon what is on the stack and the desired target type.
|
static void |
CodeFlow.insertArrayStore(MethodVisitor mv,
java.lang.String arrayElementType)
Produce appropriate bytecode to store a stack item in an array.
|
static void |
CodeFlow.insertBoxIfNecessary(MethodVisitor mv,
char ch)
Determine the appropriate boxing instruction for a specific type (if it needs
boxing) and insert the instruction into the supplied visitor.
|
static void |
CodeFlow.insertBoxIfNecessary(MethodVisitor mv,
java.lang.String descriptor)
Determine the appropriate boxing instruction for a specific type (if it needs
boxing) and insert the instruction into the supplied visitor.
|
static void |
CodeFlow.insertCheckCast(MethodVisitor mv,
java.lang.String descriptor)
Insert the appropriate CHECKCAST instruction for the supplied descriptor.
|
static void |
CodeFlow.insertNewArrayCode(MethodVisitor mv,
int size,
java.lang.String arraytype)
Produce the correct bytecode to build an array.
|
static void |
CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(MethodVisitor mv,
java.lang.String stackDescriptor,
char targetDescriptor)
For use in mathematical operators, handles converting from a (possibly boxed)
number on the stack to a primitive numeric type.
|
static void |
CodeFlow.insertOptimalLoad(MethodVisitor mv,
int value)
Create the optimal instruction for loading a number on the stack.
|
static void |
CodeFlow.insertUnboxInsns(MethodVisitor mv,
char ch,
java.lang.String stackDescriptor)
Insert any necessary cast and value call to convert from a boxed type to a
primitive value.
|
static void |
CodeFlow.insertUnboxNumberInsns(MethodVisitor mv,
char targetDescriptor,
java.lang.String stackDescriptor)
For numbers, use the appropriate method on the number to convert it to the primitive type requested.
|
void |
CodeFlow.loadEvaluationContext(MethodVisitor mv)
Push the bytecode to load the EvaluationContext (the second parameter passed to
the compiled expression method).
|
void |
CodeFlow.loadTarget(MethodVisitor mv)
Push the byte code to load the target (i.e.
|
void |
CodeFlow.unboxBooleanIfNecessary(MethodVisitor mv)
If the codeflow shows the last expression evaluated to java.lang.Boolean then
insert the necessary instructions to unbox that to a boolean primitive.
|
Modifier and Type | Method and Description |
---|---|
void |
OpAnd.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpGE.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
VariableReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
NullLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpMultiply.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
Elvis.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
RealLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpPlus.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
FloatLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpDivide.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
TypeReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
InlineList.generateCode(MethodVisitor mv,
CodeFlow codeflow) |
void |
SpelNodeImpl.generateCode(MethodVisitor mv,
CodeFlow cf)
Generate the bytecode for this node into the supplied visitor.
|
void |
OpEQ.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
StringLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
CompoundExpression.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
IntLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OperatorNot.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
BooleanLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpOr.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
Indexer.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpModulus.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
Ternary.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpMinus.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
ConstructorReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OperatorInstanceof.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpGT.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpNE.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
PropertyOrFieldReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpLE.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
MethodReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
LongLiteral.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
OpLT.generateCode(MethodVisitor mv,
CodeFlow cf) |
void |
FunctionReference.generateCode(MethodVisitor mv,
CodeFlow cf) |
protected static void |
SpelNodeImpl.generateCodeForArgument(MethodVisitor mv,
CodeFlow cf,
SpelNodeImpl argument,
java.lang.String paramDesc)
Ask an argument to generate its bytecode and then follow it up
with any boxing/unboxing/checkcasting to ensure it matches the expected parameter descriptor.
|
protected static void |
SpelNodeImpl.generateCodeForArguments(MethodVisitor mv,
CodeFlow cf,
java.lang.reflect.Member member,
SpelNodeImpl[] arguments)
Generate code that handles building the argument values for the specified method.
|
protected void |
Operator.generateComparisonCode(MethodVisitor mv,
CodeFlow cf,
int compInstruction1,
int compInstruction2)
Numeric comparison operators share very similar generated code, only differing in
two comparison instructions.
|
Modifier and Type | Method and Description |
---|---|
void |
ReflectivePropertyAccessor.OptimalPropertyAccessor.generateCode(java.lang.String propertyName,
MethodVisitor mv,
CodeFlow cf) |