code: private void buildConstructor( TypeSpec.Builder typeBuilder ) {
          MethodSpec.Builder constructorBuilder = MethodSpec.constructorBuilder().addModifiers( Modifier.PUBLIC );
  
          if ( !beanInfo.getParameterizedTypes().isEmpty() ) {
              Class mapperClass;
              String mapperNameFormat;
              if ( isSerializer() ) {
                  mapperClass = Serializer.class;
                  mapperNameFormat = TYPE_PARAMETER_SERIALIZER_FIELD_NAME;
              } else {
                  mapperClass = Deserializer.class;
                  mapperNameFormat = TYPE_PARAMETER_DESERIALIZER_FIELD_NAME;
              }
  
              for ( int i = 0; i < beanInfo.getParameterizedTypes().size(); i++ ) {
                  JClassType argType = beanInfo.getParameterizedTypes().get( i );
                  String mapperName = String.format( mapperNameFormat, i );
                  TypeName mapperType = parameterizedName( mapperClass, argType );
  
                  FieldSpec field = FieldSpec.builder( mapperType, mapperName, Modifier.PRIVATE, Modifier.FINAL ).build();
                  typeBuilder.addField( field );
  
                  ParameterSpec parameter = ParameterSpec.builder( mapperType, mapperName ).build();
                  constructorBuilder.addParameter( parameter );
                  constructorBuilder.addStatement( "this.$N = $N", field, parameter );
              }
          }
  
          typeBuilder.addMethod( constructorBuilder.build() );
      }
docs: Build the constructor and the final fields.
  
  @param typeBuilder the type builder