public class org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor implements org.springframework.expression.spel.CompilablePropertyAccessor
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor
super_class: java.lang.Object
{
public final java.lang.reflect.Member member;
descriptor: Ljava/lang/reflect/Member;
flags: (0x0011) ACC_PUBLIC, ACC_FINAL
private final org.springframework.core.convert.TypeDescriptor typeDescriptor;
descriptor: Lorg/springframework/core/convert/TypeDescriptor;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
void <init>(org.springframework.expression.spel.support.ReflectivePropertyAccessor$InvokerPair);
descriptor: (Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$InvokerPair;)V
flags: (0x0000)
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
aload 1
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$InvokerPair.member:Ljava/lang/reflect/Member;
putfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
2: aload 0
aload 1
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$InvokerPair.typeDescriptor:Lorg/springframework/core/convert/TypeDescriptor;
putfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.typeDescriptor:Lorg/springframework/core/convert/TypeDescriptor;
3: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 4 1 target Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$InvokerPair;
MethodParameters:
Name Flags
target
public java.lang.Class<?>[] getSpecificTargetClasses();
descriptor: ()[Ljava/lang/Class;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: new java.lang.UnsupportedOperationException
dup
ldc "Should not be called on an OptimalPropertyAccessor"
invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
athrow
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
Signature: ()[Ljava/lang/Class<*>;
RuntimeVisibleAnnotations:
org.springframework.lang.Nullable()
public boolean canRead(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String);
descriptor: (Lorg/springframework/expression/EvaluationContext;Ljava/lang/Object;Ljava/lang/String;)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=7, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 2
ifnonnull 2
1: iconst_0
ireturn
2: StackMap locals:
StackMap stack:
aload 2
instanceof java.lang.Class
ifeq 3
aload 2
checkcast java.lang.Class
goto 4
StackMap locals:
StackMap stack:
3: aload 2
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
StackMap locals:
StackMap stack: java.lang.Class
4: astore 4
start local 4 5: aload 4
invokevirtual java.lang.Class.isArray:()Z
ifeq 7
6: iconst_0
ireturn
7: StackMap locals: java.lang.Class
StackMap stack:
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
instanceof java.lang.reflect.Method
ifeq 15
8: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Method
astore 5
start local 5 9: new java.lang.StringBuilder
dup
ldc "get"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokestatic org.springframework.util.StringUtils.capitalize:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
astore 6
start local 6 10: aload 6
aload 5
invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 12
11: iconst_1
ireturn
12: StackMap locals: java.lang.reflect.Method java.lang.String
StackMap stack:
new java.lang.StringBuilder
dup
ldc "is"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokestatic org.springframework.util.StringUtils.capitalize:(Ljava/lang/String;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
astore 6
13: aload 6
aload 5
invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 15
14: iconst_1
ireturn
end local 6 end local 5 15: StackMap locals:
StackMap stack:
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getName:()Ljava/lang/String;
aload 3
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ireturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 16 1 context Lorg/springframework/expression/EvaluationContext;
0 16 2 target Ljava/lang/Object;
0 16 3 name Ljava/lang/String;
5 16 4 type Ljava/lang/Class<*>;
9 15 5 method Ljava/lang/reflect/Method;
10 15 6 getterName Ljava/lang/String;
Exceptions:
throws org.springframework.expression.AccessException
RuntimeVisibleParameterAnnotations:
0:
1:
org.springframework.lang.Nullable()
2:
MethodParameters:
Name Flags
context
target
name
public org.springframework.expression.TypedValue read(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String);
descriptor: (Lorg/springframework/expression/EvaluationContext;Ljava/lang/Object;Ljava/lang/String;)Lorg/springframework/expression/TypedValue;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
instanceof java.lang.reflect.Method
ifeq 8
1: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Method
astore 4
start local 4 2: aload 4
invokestatic org.springframework.util.ReflectionUtils.makeAccessible:(Ljava/lang/reflect/Method;)V
3: aload 4
aload 2
iconst_0
anewarray java.lang.Object
invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
astore 5
start local 5 4: new org.springframework.expression.TypedValue
dup
aload 5
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.typeDescriptor:Lorg/springframework/core/convert/TypeDescriptor;
aload 5
invokevirtual org.springframework.core.convert.TypeDescriptor.narrow:(Ljava/lang/Object;)Lorg/springframework/core/convert/TypeDescriptor;
invokespecial org.springframework.expression.TypedValue.<init>:(Ljava/lang/Object;Lorg/springframework/core/convert/TypeDescriptor;)V
5: areturn
end local 5 6: StackMap locals: org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor org.springframework.expression.EvaluationContext java.lang.Object java.lang.String java.lang.reflect.Method
StackMap stack: java.lang.Exception
astore 5
start local 5 7: new org.springframework.expression.AccessException
dup
new java.lang.StringBuilder
dup
ldc "Unable to access property '"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc "' through getter method"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
aload 5
invokespecial org.springframework.expression.AccessException.<init>:(Ljava/lang/String;Ljava/lang/Exception;)V
athrow
end local 5 end local 4 8: StackMap locals:
StackMap stack:
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Field
astore 4
start local 4 9: aload 4
invokestatic org.springframework.util.ReflectionUtils.makeAccessible:(Ljava/lang/reflect/Field;)V
10: aload 4
aload 2
invokevirtual java.lang.reflect.Field.get:(Ljava/lang/Object;)Ljava/lang/Object;
astore 5
start local 5 11: new org.springframework.expression.TypedValue
dup
aload 5
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.typeDescriptor:Lorg/springframework/core/convert/TypeDescriptor;
aload 5
invokevirtual org.springframework.core.convert.TypeDescriptor.narrow:(Ljava/lang/Object;)Lorg/springframework/core/convert/TypeDescriptor;
invokespecial org.springframework.expression.TypedValue.<init>:(Ljava/lang/Object;Lorg/springframework/core/convert/TypeDescriptor;)V
12: areturn
end local 5 13: StackMap locals: org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor org.springframework.expression.EvaluationContext java.lang.Object java.lang.String java.lang.reflect.Field
StackMap stack: java.lang.Exception
astore 5
start local 5 14: new org.springframework.expression.AccessException
dup
new java.lang.StringBuilder
dup
ldc "Unable to access field '"
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 3
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc "'"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
aload 5
invokespecial org.springframework.expression.AccessException.<init>:(Ljava/lang/String;Ljava/lang/Exception;)V
athrow
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 15 1 context Lorg/springframework/expression/EvaluationContext;
0 15 2 target Ljava/lang/Object;
0 15 3 name Ljava/lang/String;
2 8 4 method Ljava/lang/reflect/Method;
4 6 5 value Ljava/lang/Object;
7 8 5 ex Ljava/lang/Exception;
9 15 4 field Ljava/lang/reflect/Field;
11 13 5 value Ljava/lang/Object;
14 15 5 ex Ljava/lang/Exception;
Exception table:
from to target type
2 5 6 Class java.lang.Exception
9 12 13 Class java.lang.Exception
Exceptions:
throws org.springframework.expression.AccessException
RuntimeVisibleParameterAnnotations:
0:
1:
org.springframework.lang.Nullable()
2:
MethodParameters:
Name Flags
context
target
name
public boolean canWrite(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String);
descriptor: (Lorg/springframework/expression/EvaluationContext;Ljava/lang/Object;Ljava/lang/String;)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: new java.lang.UnsupportedOperationException
dup
ldc "Should not be called on an OptimalPropertyAccessor"
invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 1 1 context Lorg/springframework/expression/EvaluationContext;
0 1 2 target Ljava/lang/Object;
0 1 3 name Ljava/lang/String;
RuntimeVisibleParameterAnnotations:
0:
1:
org.springframework.lang.Nullable()
2:
MethodParameters:
Name Flags
context
target
name
public void write(org.springframework.expression.EvaluationContext, java.lang.Object, java.lang.String, java.lang.Object);
descriptor: (Lorg/springframework/expression/EvaluationContext;Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=5, args_size=5
start local 0 start local 1 start local 2 start local 3 start local 4 0: new java.lang.UnsupportedOperationException
dup
ldc "Should not be called on an OptimalPropertyAccessor"
invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
athrow
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 1 1 context Lorg/springframework/expression/EvaluationContext;
0 1 2 target Ljava/lang/Object;
0 1 3 name Ljava/lang/String;
0 1 4 newValue Ljava/lang/Object;
RuntimeVisibleParameterAnnotations:
0:
1:
org.springframework.lang.Nullable()
2:
3:
org.springframework.lang.Nullable()
MethodParameters:
Name Flags
context
target
name
newValue
public boolean isCompilable();
descriptor: ()Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getModifiers:()I
invokestatic java.lang.reflect.Modifier.isPublic:(I)Z
ifeq 3
1: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getDeclaringClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getModifiers:()I
invokestatic java.lang.reflect.Modifier.isPublic:(I)Z
ifeq 3
2: iconst_1
ireturn
StackMap locals:
StackMap stack:
3: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
public java.lang.Class<?> getPropertyType();
descriptor: ()Ljava/lang/Class;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
instanceof java.lang.reflect.Method
ifeq 2
1: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Method
invokevirtual java.lang.reflect.Method.getReturnType:()Ljava/lang/Class;
areturn
2: StackMap locals:
StackMap stack:
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Field
invokevirtual java.lang.reflect.Field.getType:()Ljava/lang/Class;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
Signature: ()Ljava/lang/Class<*>;
public void generateCode(java.lang.String, org.springframework.asm.MethodVisitor, org.springframework.expression.spel.CodeFlow);
descriptor: (Ljava/lang/String;Lorg/springframework/asm/MethodVisitor;Lorg/springframework/expression/spel/CodeFlow;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=10, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getModifiers:()I
invokestatic java.lang.reflect.Modifier.isStatic:(I)Z
istore 4
start local 4 1: aload 3
invokevirtual org.springframework.expression.spel.CodeFlow.lastDescriptor:()Ljava/lang/String;
astore 5
start local 5 2: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getDeclaringClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getName:()Ljava/lang/String;
bipush 46
bipush 47
invokevirtual java.lang.String.replace:(CC)Ljava/lang/String;
astore 6
start local 6 3: iload 4
ifne 9
4: aload 5
ifnonnull 6
5: aload 3
aload 2
invokevirtual org.springframework.expression.spel.CodeFlow.loadTarget:(Lorg/springframework/asm/MethodVisitor;)V
6: StackMap locals: int java.lang.String java.lang.String
StackMap stack:
aload 5
ifnull 7
aload 6
aload 5
iconst_1
invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifne 11
7: StackMap locals:
StackMap stack:
aload 2
sipush 192
aload 6
invokevirtual org.springframework.asm.MethodVisitor.visitTypeInsn:(ILjava/lang/String;)V
8: goto 11
9: StackMap locals:
StackMap stack:
aload 5
ifnull 11
10: aload 2
bipush 87
invokevirtual org.springframework.asm.MethodVisitor.visitInsn:(I)V
11: StackMap locals:
StackMap stack:
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
instanceof java.lang.reflect.Method
ifeq 22
12: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Method
astore 7
start local 7 13: aload 7
invokevirtual java.lang.reflect.Method.getDeclaringClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.isInterface:()Z
istore 8
start local 8 14: iload 4
ifeq 15
sipush 184
goto 17
StackMap locals: java.lang.reflect.Method int
StackMap stack:
15: iload 8
ifeq 16
sipush 185
goto 17
StackMap locals:
StackMap stack:
16: sipush 182
StackMap locals:
StackMap stack: int
17: istore 9
start local 9 18: aload 2
iload 9
aload 6
aload 7
invokevirtual java.lang.reflect.Method.getName:()Ljava/lang/String;
19: aload 7
invokestatic org.springframework.expression.spel.CodeFlow.createSignatureDescriptor:(Ljava/lang/reflect/Method;)Ljava/lang/String;
iload 8
20: invokevirtual org.springframework.asm.MethodVisitor.visitMethodInsn:(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V
end local 9 end local 8 end local 7 21: goto 27
22: StackMap locals:
StackMap stack:
aload 2
iload 4
ifeq 23
sipush 178
goto 24
StackMap locals:
StackMap stack: org.springframework.asm.MethodVisitor
23: sipush 180
StackMap locals: org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor java.lang.String org.springframework.asm.MethodVisitor org.springframework.expression.spel.CodeFlow int java.lang.String java.lang.String
StackMap stack: org.springframework.asm.MethodVisitor int
24: aload 6
aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
invokeinterface java.lang.reflect.Member.getName:()Ljava/lang/String;
25: aload 0
getfield org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor.member:Ljava/lang/reflect/Member;
checkcast java.lang.reflect.Field
invokevirtual java.lang.reflect.Field.getType:()Ljava/lang/Class;
invokestatic org.springframework.expression.spel.CodeFlow.toJvmDescriptor:(Ljava/lang/Class;)Ljava/lang/String;
26: invokevirtual org.springframework.asm.MethodVisitor.visitFieldInsn:(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
27: StackMap locals:
StackMap stack:
return
end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 28 0 this Lorg/springframework/expression/spel/support/ReflectivePropertyAccessor$OptimalPropertyAccessor;
0 28 1 propertyName Ljava/lang/String;
0 28 2 mv Lorg/springframework/asm/MethodVisitor;
0 28 3 cf Lorg/springframework/expression/spel/CodeFlow;
1 28 4 isStatic Z
2 28 5 descriptor Ljava/lang/String;
3 28 6 classDesc Ljava/lang/String;
13 21 7 method Ljava/lang/reflect/Method;
14 21 8 isInterface Z
18 21 9 opcode I
MethodParameters:
Name Flags
propertyName
mv
cf
}
SourceFile: "ReflectivePropertyAccessor.java"
NestHost: org.springframework.expression.spel.support.ReflectivePropertyAccessor
InnerClasses:
private InvokerPair = org.springframework.expression.spel.support.ReflectivePropertyAccessor$InvokerPair of org.springframework.expression.spel.support.ReflectivePropertyAccessor
public OptimalPropertyAccessor = org.springframework.expression.spel.support.ReflectivePropertyAccessor$OptimalPropertyAccessor of org.springframework.expression.spel.support.ReflectivePropertyAccessor