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,13 @@ 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 ();
3836 this .publicField = element .getModifiers ().contains (Modifier .PUBLIC );
37+ this .rawType = trimAnnotations (element .asType ().toString ());
3938
40- PropertyIgnoreReader ignoreReader = new PropertyIgnoreReader (element );
39+ final PropertyIgnoreReader ignoreReader = new PropertyIgnoreReader (element );
4140 this .unmapped = ignoreReader .unmapped ();
4241 this .raw = ignoreReader .raw ();
4342 this .serialize = ignoreReader .serialize ();
@@ -56,15 +55,23 @@ class FieldReader {
5655 primitive = false ;
5756 } else {
5857 genericType = GenericType .parse (rawType );
59- String shortType = genericType .shortType ();
58+ final String shortType = genericType .shortType ();
6059 primitive = PrimitiveUtil .isPrimitive (shortType );
6160 defaultValue = !primitive ? "null" : PrimitiveUtil .defaultValue (shortType );
62- String typeWrapped = PrimitiveUtil .wrap (shortType );
61+ final String typeWrapped = PrimitiveUtil .wrap (shortType );
6362 adapterShortType = "JsonAdapter<" + typeWrapped + ">" ;
6463 adapterFieldName = (primitive ? "p" : "" ) + Util .initLower (genericType .shortName ()) + "JsonAdapter" ;
6564 }
6665 }
6766
67+ static String trimAnnotations (String type ) {
68+ int pos = type .indexOf ("@" );
69+ if (pos == -1 ) {
70+ return type ;
71+ }
72+ return type .substring (0 , pos ) + type .substring (type .lastIndexOf (' ' ) + 1 );
73+ }
74+
6875 void position (int pos ) {
6976 position = pos ;
7077 }
@@ -118,10 +125,10 @@ void addImports(Set<String> importTypes) {
118125
119126 void cascadeTypes (Set <String > types ) {
120127 if (!raw && !unmapped ) {
121- String topType = genericType .topType ();
122- if (topType . equals ( "java.util.List" ) || topType . equals ( "java.util.Set" )) {
128+ final String topType = genericType .topType ();
129+ if ("java.util.List" . equals ( topType ) || "java.util.Set" . equals ( topType )) {
123130 types .add (genericType .firstParamType ());
124- } else if (topType . equals ( "java.util.Map" )) {
131+ } else if ("java.util.Map" . equals ( topType )) {
125132 types .add (genericType .secondParamType ());
126133 } else {
127134 types .add (topType );
@@ -152,16 +159,14 @@ void writeDebug(Append writer) {
152159 }
153160 if (!deserialize ) {
154161 writer .append (" ignoreDeserialize" );
162+ } else if (constructorParam ) {
163+ writer .append (" constructor" );
164+ } else if (setter != null ) {
165+ writer .append (" setter:%s " , setter );
166+ } else if (publicField ) {
167+ writer .append (" publicField" );
155168 } 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- }
169+ writer .append (" ERROR?? no constructor, setter and not a public field?" );
165170 }
166171 if (!subTypes .isEmpty ()) {
167172 writer .append (" subTypes %s" , subTypes .keySet ());
@@ -181,7 +186,7 @@ void writeConstructor(Append writer) {
181186 if (raw ) {
182187 writer .append (" this.%s = jsonb.rawAdapter();" , adapterFieldName ).eol ();
183188 } else {
184- String asType = genericType .asTypeDeclaration ();
189+ final String asType = genericType .asTypeDeclaration ();
185190 writer .append (" this.%s = jsonb.adapter(%s);" , adapterFieldName , asType ).eol ();
186191 }
187192 }
@@ -227,11 +232,11 @@ void writeFromJsonVariables(Append writer) {
227232 }
228233
229234 private String pad (String value ) {
230- int pad = 10 - value .length ();
235+ final int pad = 10 - value .length ();
231236 if (pad < 1 ) {
232237 return value ;
233238 }
234- StringBuilder sb = new StringBuilder (10 ).append (value );
239+ final StringBuilder sb = new StringBuilder (10 ).append (value );
235240 for (int i = 0 ; i < pad ; i ++) {
236241 sb .append (" " );
237242 }
@@ -285,7 +290,7 @@ void writeViewBuilder(Append writer, String shortName) {
285290 if (getter == null ) {
286291 writer .append (" builder.add(\" %s\" , %s, builder.field(%s.class, \" %s\" ));" , fieldName , adapterFieldName , shortName , fieldName ).eol ();
287292 } else {
288- String topType = genericType .topType ();
293+ final String topType = genericType .topType ();
289294 writer .append (" builder.add(\" %s\" , %s, builder.method(%s.class, \" %s\" , %s.class));" , fieldName , adapterFieldName , shortName , getter .getName (), topType ).eol ();
290295 }
291296 }
0 commit comments