33import java .io .Serializable ;
44import java .lang .annotation .Annotation ;
55import java .lang .reflect .Field ;
6+ import java .lang .reflect .Modifier ;
67import java .util .ArrayList ;
78import java .util .Arrays ;
89import java .util .Comparator ;
1213import java .util .Map ;
1314import java .util .Map .Entry ;
1415import java .util .Optional ;
16+ import java .util .Set ;
1517import java .util .function .Predicate ;
1618import java .util .stream .Collectors ;
1719
20+ import org .reflections .ReflectionUtils ;
21+
1822import com .fasterxml .jackson .databind .JsonMappingException ;
1923import com .fasterxml .jackson .databind .JsonNode ;
2024import com .fasterxml .jackson .databind .ObjectMapper ;
@@ -43,7 +47,8 @@ public final class UiFormSchemaGenerator {
4347 private static UiFormSchemaGenerator instance ;
4448
4549 public UiForm generate (Class <? extends Serializable > formDto ) throws JsonMappingException {
46- Field [] declaredFields = formDto .getDeclaredFields ();
50+ Set <Field > declaredFields = ReflectionUtils .getAllFields (formDto ,
51+ field -> !Modifier .isStatic (field .getModifiers ()));
4752 ObjectMapper mapper = new ObjectMapper ();
4853
4954 JsonSchemaGenerator schemaGen = initSchemaGen (mapper );
@@ -105,13 +110,13 @@ private ObjectNode buildActionNode(ObjectMapper mapper, Action action) {
105110 return node ;
106111 }
107112
108- private ObjectNode handlerGroupedFields (ObjectMapper mapper , Field [] declaredFields ,
113+ private ObjectNode handlerGroupedFields (ObjectMapper mapper , Set < Field > declaredFields ,
109114 Map <Field , JsonNode > sortedNodes ) {
110115 Predicate <? super Field > checkFieldSetAnnotation = field -> field .isAnnotationPresent (FieldSet .class );
111116
112117 Map <String , List <JsonNode >> groupedFields = new LinkedHashMap <>();
113118
114- Arrays .stream (declaredFields ).filter (checkFieldSetAnnotation )
119+ declaredFields .stream ().filter (checkFieldSetAnnotation )
115120 .forEach (field -> groupFieldsByTab (sortedNodes , field , groupedFields ));
116121
117122 ArrayNode groups = mapper .createArrayNode ();
@@ -123,7 +128,7 @@ private ObjectNode handlerGroupedFields(ObjectMapper mapper, Field[] declaredFie
123128
124129 }
125130
126- private ObjectNode handleTabbedFields (ObjectMapper mapper , Field [] declaredFields , Map <Field , JsonNode > nodes ) {
131+ private ObjectNode handleTabbedFields (ObjectMapper mapper , Set < Field > declaredFields , Map <Field , JsonNode > nodes ) {
127132 Predicate <? super Field > checkTabAnnotation = field -> field .isAnnotationPresent (Tab .class );
128133
129134 Comparator <? super Field > tabIndexComparator = (field1 , field2 ) -> Integer
@@ -138,7 +143,7 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField
138143
139144 Map <String , List <JsonNode >> groupedFieldsByTab = new LinkedHashMap <>();
140145
141- Arrays .stream (declaredFields ).filter (checkTabAnnotation ).sorted (fieldIndexComparator ).sorted (tabIndexComparator )
146+ declaredFields .stream ().filter (checkTabAnnotation ).sorted (fieldIndexComparator ).sorted (tabIndexComparator )
142147 .forEach (field -> groupFieldsByTab (nodes , field , groupedFieldsByTab ));
143148
144149 ArrayNode tabs = mapper .createArrayNode ();
@@ -161,10 +166,10 @@ private ObjectNode handleTabbedFields(ObjectMapper mapper, Field[] declaredField
161166
162167 }
163168
164- private Map <Field , JsonNode > initFieldsFormDefinition (ObjectMapper mapper , Field [] declaredFields ) {
169+ private Map <Field , JsonNode > initFieldsFormDefinition (ObjectMapper mapper , Set < Field > declaredFields ) {
165170 Map <Field , JsonNode > nodes = new HashMap <>();
166171
167- Arrays . stream ( declaredFields ) .forEach (field -> buildFormDefinition (nodes , mapper , field ));
172+ declaredFields .forEach (field -> buildFormDefinition (nodes , mapper , field ));
168173
169174 return nodes ;
170175 }
0 commit comments