@@ -222,7 +222,7 @@ final class BeanIntrospectionWriter implements OriginatingElements, ClassOutputW
222
222
this .beanType = ClassTypeDef .of (beanClassElement );
223
223
this .introspectionName = computeShortIntrospectionName (targetPackage , name );
224
224
this .introspectionTypeDef = ClassTypeDef .of (introspectionName );
225
- this .dispatchWriter = new DispatchWriter ();
225
+ this .dispatchWriter = new DispatchWriter (introspectionName );
226
226
this .annotationMetadata = annotationMetadata .getTargetAnnotationMetadata ();
227
227
this .originatingElements = OriginatingElements .of (beanClassElement );
228
228
evaluatedExpressionProcessor = new EvaluatedExpressionProcessor (visitorContext , beanClassElement );
@@ -253,7 +253,7 @@ final class BeanIntrospectionWriter implements OriginatingElements, ClassOutputW
253
253
this .beanType = ClassTypeDef .of (beanClassElement );
254
254
this .introspectionName = computeIntrospectionName (targetPackage , className );
255
255
this .introspectionTypeDef = ClassTypeDef .of (introspectionName );
256
- this .dispatchWriter = new DispatchWriter ();
256
+ this .dispatchWriter = new DispatchWriter (introspectionName );
257
257
this .annotationMetadata = annotationMetadata .getTargetAnnotationMetadata ();
258
258
this .originatingElements = OriginatingElements .of (originatingElement );
259
259
evaluatedExpressionProcessor = new EvaluatedExpressionProcessor (visitorContext , beanClassElement );
@@ -936,12 +936,12 @@ private MethodDef getInstantiateMethod(MethodElement constructor, Method method)
936
936
return MethodDef .override (method )
937
937
.build ((aThis , methodParameters ) -> {
938
938
if (method .getParameters ().length == 0 ) {
939
- return MethodGenUtils .invokeBeanConstructor (constructor , true , null ).returning ();
939
+ return MethodGenUtils .invokeBeanConstructor (ClassElement . of ( introspectionName ), constructor , true , null ).returning ();
940
940
} else {
941
941
List <ExpressionDef > values = IntStream .range (0 , constructor .getSuspendParameters ().length )
942
942
.<ExpressionDef >mapToObj (index -> methodParameters .get (0 ).arrayElement (index ))
943
943
.toList ();
944
- return MethodGenUtils .invokeBeanConstructor (constructor , true , values ).returning ();
944
+ return MethodGenUtils .invokeBeanConstructor (ClassElement . of ( introspectionName ), constructor , true , values ).returning ();
945
945
}
946
946
});
947
947
}
@@ -1052,7 +1052,7 @@ public TypedElement getDeclaringType() {
1052
1052
/**
1053
1053
* Copy constructor "with" method writer.
1054
1054
*/
1055
- private static final class CopyConstructorDispatchTarget implements DispatchWriter .DispatchTarget {
1055
+ private final class CopyConstructorDispatchTarget implements DispatchWriter .DispatchTarget {
1056
1056
1057
1057
private final ClassTypeDef beanType ;
1058
1058
private final List <BeanPropertyData > beanProperties ;
@@ -1120,6 +1120,10 @@ private StatementDef createStatement(ExpressionDef caseExpression, ExpressionDef
1120
1120
FieldElement field = fieldGetDispatchTarget .getField ();
1121
1121
propertyType = field .getGenericType ();
1122
1122
member = field ;
1123
+ } else if (dispatchTarget instanceof DispatchWriter .FieldGetReflectionDispatchTarget fieldGetDispatchTarget ) {
1124
+ FieldElement field = fieldGetDispatchTarget .getField ();
1125
+ propertyType = field .getGenericType ();
1126
+ member = field ;
1123
1127
} else {
1124
1128
throw new IllegalStateException ();
1125
1129
}
@@ -1170,7 +1174,7 @@ private StatementDef createStatement(ExpressionDef caseExpression, ExpressionDef
1170
1174
}
1171
1175
1172
1176
// NOTE: It doesn't make sense to check defaults for the copy constructor
1173
- ExpressionDef newInstance = MethodGenUtils .invokeBeanConstructor (constructor , false , values );
1177
+ ExpressionDef newInstance = MethodGenUtils .invokeBeanConstructor (ClassElement . of ( introspectionName ), constructor , false , values );
1174
1178
return withSetSettersAndFields (newInstance , prevBeanVar , constructorProps );
1175
1179
});
1176
1180
} else {
@@ -1205,6 +1209,9 @@ private StatementDef withSetSettersAndFields(ExpressionDef newInstance,
1205
1209
} else if (readDispatch instanceof DispatchWriter .FieldGetDispatchTarget fieldGetDispatchTarget ) {
1206
1210
FieldElement fieldElement = fieldGetDispatchTarget .getField ();
1207
1211
oldValueExp = prevBeanVar .field (fieldElement );
1212
+ } else if (readDispatch instanceof DispatchWriter .FieldGetReflectionDispatchTarget fieldGetDispatchTarget ) {
1213
+ FieldElement fieldElement = fieldGetDispatchTarget .getField ();
1214
+ oldValueExp = prevBeanVar .field (fieldElement );
1208
1215
} else {
1209
1216
throw new IllegalStateException ();
1210
1217
}
@@ -1223,6 +1230,11 @@ private StatementDef withSetSettersAndFields(ExpressionDef newInstance,
1223
1230
statements .add (
1224
1231
newBeanVar .field (fieldElement ).assign (oldValueExp )
1225
1232
);
1233
+ } else if (writeDispatch instanceof DispatchWriter .FieldSetReflectionDispatchTarget fieldSetDispatchTarget ) {
1234
+ FieldElement fieldElement = fieldSetDispatchTarget .getField ();
1235
+ statements .add (
1236
+ newBeanVar .field (fieldElement ).assign (oldValueExp )
1237
+ );
1226
1238
} else {
1227
1239
throw new IllegalStateException ();
1228
1240
}
0 commit comments