11package io .avaje .jsonb .generator ;
22
3- import javax .lang .model .element .Element ;
4- import javax .lang .model .element .Modifier ;
53import java .util .LinkedHashMap ;
64import java .util .Map ;
75import java .util .Set ;
86
7+ import javax .lang .model .element .Element ;
8+ import javax .lang .model .element .Modifier ;
9+
910class FieldReader {
1011
1112 private final Map <String , TypeSubTypeMeta > subTypes = new LinkedHashMap <>();
12- private final Element element ;
1313 private final boolean publicField ;
1414 private final String rawType ;
1515 private final GenericType genericType ;
@@ -30,14 +30,22 @@ class FieldReader {
3030 private boolean constructorParam ;
3131
3232 FieldReader (Element element , NamingConvention namingConvention , TypeSubTypeMeta subType ) {
33- this .element = element ;
3433 addSubType (subType );
3534 this .fieldName = element .getSimpleName ().toString ();
3635 this .propertyName = PropertyReader .name (namingConvention , fieldName , element );
37- this . rawType = element . asType (). toString ();
36+
3837 this .publicField = element .getModifiers ().contains (Modifier .PUBLIC );
3938
40- PropertyIgnoreReader ignoreReader = new PropertyIgnoreReader (element );
39+ final String type = element .asType ().toString ();
40+ if (type .contains ("@" )) {
41+ final String [] split = type .split (" " );
42+
43+ this .rawType = type .substring (0 , type .indexOf ("@" )) + split [split .length - 1 ];
44+ } else {
45+ this .rawType = type ;
46+ }
47+
48+ final PropertyIgnoreReader ignoreReader = new PropertyIgnoreReader (element );
4149 this .unmapped = ignoreReader .unmapped ();
4250 this .raw = ignoreReader .raw ();
4351 this .serialize = ignoreReader .serialize ();
@@ -56,10 +64,10 @@ class FieldReader {
5664 primitive = false ;
5765 } else {
5866 genericType = GenericType .parse (rawType );
59- String shortType = genericType .shortType ();
67+ final String shortType = genericType .shortType ();
6068 primitive = PrimitiveUtil .isPrimitive (shortType );
6169 defaultValue = !primitive ? "null" : PrimitiveUtil .defaultValue (shortType );
62- String typeWrapped = PrimitiveUtil .wrap (shortType );
70+ final String typeWrapped = PrimitiveUtil .wrap (shortType );
6371 adapterShortType = "JsonAdapter<" + typeWrapped + ">" ;
6472 adapterFieldName = (primitive ? "p" : "" ) + Util .initLower (genericType .shortName ()) + "JsonAdapter" ;
6573 }
@@ -118,10 +126,10 @@ void addImports(Set<String> importTypes) {
118126
119127 void cascadeTypes (Set <String > types ) {
120128 if (!raw && !unmapped ) {
121- String topType = genericType .topType ();
122- if (topType . equals ( "java.util.List" ) || topType . equals ( "java.util.Set" )) {
129+ final String topType = genericType .topType ();
130+ if ("java.util.List" . equals ( topType ) || "java.util.Set" . equals ( topType )) {
123131 types .add (genericType .firstParamType ());
124- } else if (topType . equals ( "java.util.Map" )) {
132+ } else if ("java.util.Map" . equals ( topType )) {
125133 types .add (genericType .secondParamType ());
126134 } else {
127135 types .add (topType );
@@ -152,16 +160,14 @@ void writeDebug(Append writer) {
152160 }
153161 if (!deserialize ) {
154162 writer .append (" ignoreDeserialize" );
163+ }else if (constructorParam ) {
164+ writer .append (" constructor" );
165+ } else if (setter != null ) {
166+ writer .append (" setter:%s " , setter );
167+ } else if (publicField ) {
168+ writer .append (" publicField" );
155169 } else {
156- if (constructorParam ) {
157- writer .append (" constructor" );
158- } else if (setter != null ) {
159- writer .append (" setter:%s " , setter );
160- } else if (publicField ) {
161- writer .append (" publicField" );
162- } else {
163- writer .append (" ERROR?? no constructor, setter and not a public field?" );
164- }
170+ writer .append (" ERROR?? no constructor, setter and not a public field?" );
165171 }
166172 if (!subTypes .isEmpty ()) {
167173 writer .append (" subTypes %s" , subTypes .keySet ());
@@ -181,7 +187,7 @@ void writeConstructor(Append writer) {
181187 if (raw ) {
182188 writer .append (" this.%s = jsonb.rawAdapter();" , adapterFieldName ).eol ();
183189 } else {
184- String asType = genericType .asTypeDeclaration ();
190+ final String asType = genericType .asTypeDeclaration ();
185191 writer .append (" this.%s = jsonb.adapter(%s);" , adapterFieldName , asType ).eol ();
186192 }
187193 }
@@ -227,11 +233,11 @@ void writeFromJsonVariables(Append writer) {
227233 }
228234
229235 private String pad (String value ) {
230- int pad = 10 - value .length ();
236+ final int pad = 10 - value .length ();
231237 if (pad < 1 ) {
232238 return value ;
233239 }
234- StringBuilder sb = new StringBuilder (10 ).append (value );
240+ final StringBuilder sb = new StringBuilder (10 ).append (value );
235241 for (int i = 0 ; i < pad ; i ++) {
236242 sb .append (" " );
237243 }
@@ -285,7 +291,7 @@ void writeViewBuilder(Append writer, String shortName) {
285291 if (getter == null ) {
286292 writer .append (" builder.add(\" %s\" , %s, builder.field(%s.class, \" %s\" ));" , fieldName , adapterFieldName , shortName , fieldName ).eol ();
287293 } else {
288- String topType = genericType .topType ();
294+ final String topType = genericType .topType ();
289295 writer .append (" builder.add(\" %s\" , %s, builder.method(%s.class, \" %s\" , %s.class));" , fieldName , adapterFieldName , shortName , getter .getName (), topType ).eol ();
290296 }
291297 }
0 commit comments