code: private TypeSpec buildClass( String simpleClassName ) throws UnableToCompleteException, UnsupportedTypeException {
  
          TypeSpec.Builder typeBuilder = TypeSpec.classBuilder( simpleClassName )
                  .addModifiers( Modifier.PUBLIC, Modifier.FINAL );
  
          // We add the superclass.
          if ( isSerializer() ) {
              Class clazz;
              if ( beanInfo.getValuePropertyInfo().isPresent() ) {
                  clazz = AbstractValueBeanJsonSerializer.class;
              } else {
                  clazz = AbstractBeanJsonSerializer.class;
              }
              typeBuilder.superclass( parameterizedName( clazz, beanInfo.getType() ) );
          } else {
              if ( isObject( beanInfo.getType() ) ) {
                  typeBuilder.superclass( ClassName.get( AbstractObjectBeanJsonDeserializer.class ) );
              } else if ( isSerializable( beanInfo.getType() ) ) {
                  typeBuilder.superclass( ClassName.get( AbstractSerializableBeanJsonDeserializer.class ) );
              } else if ( beanInfo.isCreatorDelegation() ) {
                  typeBuilder.superclass( parameterizedName( AbstractDelegationBeanJsonDeserializer.class, beanInfo.getType() ) );
              } else {
                  typeBuilder.superclass( parameterizedName( AbstractBeanJsonDeserializer.class, beanInfo.getType() ) );
              }
          }
  
          // If the type is generic, the mapper must have the same parameters.
          if ( null != beanInfo.getType().isGenericType() ) {
              for ( JTypeParameter typeParameter : beanInfo.getType().isGenericType().getTypeParameters() ) {
                  typeBuilder.addTypeVariable( typeVariableName( typeParameter ) );
              }
          }
  
          buildConstructor( typeBuilder );
          typeBuilder.addMethod( buildClassGetterMethod() );
  
          buildSpecific( typeBuilder );
  
          return typeBuilder.build();
      }
docs: Build the serializer/deserializer class.
  
  @param simpleClassName the name of the class
  
  @return the {@link TypeSpec}
  @throws UnableToCompleteException if an uncoverable exception occured
  @throws UnsupportedTypeException if the type is not supported