@@ -47,6 +47,8 @@ public static <T extends Entity<T>> EntitySchema<T> of(SchemaRegistry registry,
4747
4848 private EntitySchema (SchemaKey <T > key , Reflector reflector , SchemaRegistry registry ) {
4949 super (checkEntityType (key ), reflector );
50+ checkIdField ();
51+
5052 this .registry = registry ;
5153 }
5254
@@ -55,38 +57,40 @@ private static <T extends Entity<T>> SchemaKey<T> checkEntityType(SchemaKey<T> k
5557
5658 if (!Entity .class .isAssignableFrom (entityType )) {
5759 throw new IllegalArgumentException (format (
58- "Entity type [%s] must implement [%s]" , entityType .getName (), Entity .class ));
60+ "Entity type [%s] must implement [%s]" , entityType .getName (), Entity .class .getName ()
61+ ));
5962 }
6063
6164 Class <?> entityTypeFromEntityIface = resolveEntityTypeFromEntityIface (entityType );
6265 if (!entityTypeFromEntityIface .equals (entityType )) {
6366 throw new IllegalArgumentException (format (
6467 "Entity type [%s] must implement [%s] specified by the same type, but it is specified by [%s]" ,
65- entityType .getName (), Entity .class , entityTypeFromEntityIface .getName ()));
68+ entityType .getName (), Entity .class .getName (), entityTypeFromEntityIface .getName ()
69+ ));
6670 }
6771
68- Class <?> idFieldType ;
69- try {
70- idFieldType = entityType .getDeclaredField (EntityIdSchema .ID_FIELD_NAME ).getType ();
71- } catch (NoSuchFieldException e ) {
72- throw new IllegalArgumentException (format (
73- "Entity type [%s] does not contain a mandatory \" %s\" field" ,
74- entityType .getName (), EntityIdSchema .ID_FIELD_NAME ));
75- }
72+ return key ;
73+ }
74+
75+ private void checkIdField () {
76+ JavaField idField = findField (EntityIdSchema .ID_FIELD_NAME )
77+ .orElseThrow (() -> new IllegalArgumentException (format (
78+ "Entity type [%s] does not contain a mandatory \" %s\" field" ,
79+ getType ().getName (), EntityIdSchema .ID_FIELD_NAME
80+ )));
7681
77- if (!Entity .Id .class .isAssignableFrom (idFieldType )) {
82+ if (!Entity .Id .class .isAssignableFrom (idField . getRawType () )) {
7883 throw new IllegalArgumentException (format (
79- "Entity ID type [%s] must implement [%s]" , idFieldType .getName (), Entity .Id .class ));
84+ "Entity ID type [%s] must implement %s" , idField .getType ().getTypeName (), Entity .Id .class .getName ()
85+ ));
8086 }
8187
82- Class <?> entityTypeFromIdType = EntityIdSchema .resolveEntityType (idFieldType );
83- if (!entityTypeFromIdType .equals (entityType )) {
88+ Class <?> entityTypeFromIdType = EntityIdSchema .resolveEntityType (idField . getType () );
89+ if (!entityTypeFromIdType .equals (getType () )) {
8490 throw new IllegalArgumentException (format (
8591 "An identifier field \" %s\" has a type [%s] that is not an identifier type for an entity of type [%s]" ,
86- EntityIdSchema .ID_FIELD_NAME , idFieldType . getName (), entityType . getName ()));
92+ EntityIdSchema .ID_FIELD_NAME , idField . getType (). getTypeName (), getType (). getTypeName ()));
8793 }
88-
89- return key ;
9094 }
9195
9296 static Class <?> resolveEntityTypeFromEntityIface (Class <?> entityType ) {
0 commit comments