@@ -74,7 +74,7 @@ public class MetamodelProperty {
74
74
*/
75
75
private CtTypeReference <?> itemValueType ;
76
76
77
- private final RoleHandler roleHandler ;
77
+ private RoleHandler roleHandler ;
78
78
79
79
private Boolean derived ;
80
80
private Boolean unsettable ;
@@ -104,7 +104,6 @@ public class MetamodelProperty {
104
104
this .name = name ;
105
105
this .role = role ;
106
106
this .ownerConcept = ownerConcept ;
107
- roleHandler = RoleHandlerHelper .getRoleHandler ((Class ) ownerConcept .getMetamodelInterface ().getActualClass (), role );
108
107
}
109
108
110
109
void addMethod (CtMethod <?> method ) {
@@ -580,22 +579,27 @@ private static ContainerKind containerKindOf(Class<?> valueClass) {
580
579
* @return {@link RoleHandler} which can access runtime data of this Property
581
580
*/
582
581
public RoleHandler getRoleHandler () {
583
- return this .roleHandler ;
582
+ if (roleHandler == null ) {
583
+ //initialize it lazily, because CtGenerationTest#testGenerateRoleHandler needs metamodel to generate rolehandlers
584
+ //and here it may happen that rolehandler doesn't exist yet
585
+ roleHandler = RoleHandlerHelper .getRoleHandler ((Class ) ownerConcept .getMetamodelInterface ().getActualClass (), role );
586
+ }
587
+ return roleHandler ;
584
588
}
585
589
586
590
/**
587
591
* @param element an instance whose attribute value is read
588
592
* @return a value of attribute defined by this {@link MetamodelProperty} from the provided `element`
589
593
*/
590
594
public <T , U > U getValue (T element ) {
591
- return roleHandler .getValue (element );
595
+ return getRoleHandler () .getValue (element );
592
596
}
593
597
594
598
/**
595
599
* @param element an instance whose attribute value is set
596
600
* @param value to be set value of attribute defined by this {@link MetamodelProperty} on the provided `element`
597
601
*/
598
602
public <T , U > void setValue (T element , U value ) {
599
- roleHandler .setValue (element , value );
603
+ getRoleHandler () .setValue (element , value );
600
604
}
601
605
}
0 commit comments