@@ -70,7 +70,6 @@ final class ClassReader implements BeanReader {
7070 subTypes .stream ().map (TypeSubTypeMeta ::type ).forEach (importTypes ::add );
7171
7272 final var userTypeField = allFields .stream ().filter (f -> f .propertyName ().equals (typePropertyKey ())).findAny ();
73-
7473 this .usesTypeProperty = userTypeField .isPresent ();
7574 this .useEnum =
7675 userTypeField
@@ -222,7 +221,6 @@ public void cascadeTypes(Set<String> types) {
222221 @ Override
223222 public void writeFields (Append writer ) {
224223 writer .append (" // naming convention %s" , namingConvention ).eol ();
225-
226224 for (final FieldReader allField : allFields ) {
227225 allField .writeDebug (writer );
228226 }
@@ -264,9 +262,9 @@ public void writeConstructor(Append writer) {
264262 if (allField .include () && !allField .isRaw () && uniqueTypes .add (allField .adapterShortType ())) {
265263 if (hasSubTypes ) {
266264 final var isCommonDiffType =
267- allFields .stream ()
268- .filter (s -> s .fieldName ().equals (allField .fieldName ()))
269- .anyMatch (f -> !allField .adapterShortType ().equals (f .adapterShortType ()));
265+ allFields .stream ()
266+ .filter (s -> s .fieldName ().equals (allField .fieldName ()))
267+ .anyMatch (f -> !allField .adapterShortType ().equals (f .adapterShortType ()));
270268 isCommonFieldMap .put (allField .fieldName (), isCommonDiffType );
271269 }
272270 allField .writeConstructor (writer );
@@ -472,23 +470,32 @@ private void writeFromJsonImplementation(Append writer, String varName) {
472470
473471 private void writeJsonBuildResult (Append writer , String varName ) {
474472 writer .append (" // build and return %s" , shortName ).eol ();
475- if (constructor == null ) {
476- writer .append (" %s _$%s = new %s(" , shortName , varName , shortName );
477- } else {
478- writer .append (" %s _$%s = " + constructor .creationString (), shortName , varName );
479- final List <MethodReader .MethodParam > params = constructor .getParams ();
480- for (int i = 0 , size = params .size (); i < size ; i ++) {
481- if (i > 0 ) {
482- writer .append (", " );
483- }
484- final var name = params .get (i ).name ();
485- // append increasing numbers to constructor params sharing names with other subtypes
486- final var frequency = frequencyMap .compute (name , (k , v ) -> v == null ? 0 : v + 1 );
487- // assuming name matches field here?
488- writer .append (constructorParamName (name + (frequency == 0 ? "" : frequency .toString ())));
473+ if (constructor == null ) {
474+ writer .append (" %s _$%s = new %s(" , shortName , varName , shortName );
475+ } else {
476+ writer .append (" %s _$%s = " + constructor .creationString (), shortName , varName );
477+ final List <MethodReader .MethodParam > params = constructor .getParams ();
478+ for (int i = 0 , size = params .size (); i < size ; i ++) {
479+ if (i > 0 ) {
480+ writer .append (", " );
489481 }
482+
483+ final var paramName = params .get (i ).name ();
484+ var name =
485+ allFields .stream ()
486+ .filter (FieldReader ::isConstructorParam )
487+ .filter (f -> f .propertyName ().equals (paramName ) || f .fieldName ().equals (paramName ))
488+ .map (FieldReader ::fieldName )
489+ .findFirst ()
490+ .orElse (paramName );
491+
492+ // append increasing numbers to constructor params sharing names with other subtypes
493+ final var frequency = frequencyMap .compute (name , (k , v ) -> v == null ? 0 : v + 1 );
494+ // assuming name matches field here?
495+ writer .append (constructorParamName (name + (frequency == 0 ? "" : frequency .toString ())));
490496 }
491- writer .append (");" ).eol ();
497+ }
498+ writer .append (");" ).eol ();
492499 for (final FieldReader allField : allFields ) {
493500 if (allField .includeFromJson ()) {
494501 frequencyMap .compute (allField .fieldName (), (k , v ) -> v == null ? 0 : v + 1 );
@@ -574,23 +581,23 @@ private void writeFromJsonSwitch(Append writer, boolean defaultConstructor, Stri
574581 final var isCommonFieldDiffType = isCommonFieldMap .get (name );
575582 if (isCommonFieldDiffType == null || !isCommonFieldDiffType ) {
576583 allField .writeFromJsonSwitch (
577- writer ,
578- defaultConstructor ,
579- varName ,
580- caseInsensitiveKeys ,
581- allFields .stream ()
582- .filter (x -> x .fieldName ().equals (name ))
583- .flatMap (f -> f .aliases ().stream ())
584- .collect (toList ()));
584+ writer ,
585+ defaultConstructor ,
586+ varName ,
587+ caseInsensitiveKeys ,
588+ allFields .stream ()
589+ .filter (x -> x .fieldName ().equals (name ))
590+ .flatMap (f -> f .aliases ().stream ())
591+ .collect (toList ()));
585592 } else {
586593 // if subclass shares a field name with another subclass
587594 // write a special case statement
588595 writeSubTypeCase (
589- name ,
590- writer ,
591- allFields .stream ().filter (x -> x .fieldName ().equals (name )).collect (toList ()),
592- defaultConstructor ,
593- varName );
596+ name ,
597+ writer ,
598+ allFields .stream ().filter (x -> x .fieldName ().equals (name )).collect (toList ()),
599+ defaultConstructor ,
600+ varName );
594601 }
595602
596603 } else
@@ -613,8 +620,7 @@ private void writeFromJsonSwitch(Append writer, boolean defaultConstructor, Stri
613620 private void writeSubTypeCase (String name , Append writer , List <FieldReader > commonFields , boolean defaultConstructor , String varName ) {
614621 writer .append (" case \" %s\" :" , name ).eol ();
615622 // get all possible aliases of this field from the subtypes
616- for (final String alias :
617- commonFields .stream ().map (FieldReader ::aliases ).findFirst ().orElseGet (List ::of )) {
623+ for (final String alias : commonFields .stream ().map (FieldReader ::aliases ).findFirst ().orElseGet (List ::of )) {
618624 final String propertyKey = caseInsensitiveKeys ? alias .toLowerCase () : alias ;
619625 writer .append (" case \" %s\" :" , propertyKey ).eol ();
620626 }
0 commit comments