source.println( "%s map = new %s%s(%s);", resultType, LinkedHashMap.class.getCanonicalName(), mapType, properties.size() );
source.println();
for ( Entry<PropertyInfo, JSerializerType> entry : properties.entrySet() ) {
PropertyInfo property = entry.getKey();
Accessor getterAccessor = property.getGetterAccessor().get().getAccessor( "bean" );
source.println( "map.put(\"%s\", new %s<%s, %s>() {", property
.getPropertyName(), BEAN_PROPERTY_SERIALIZER_CLASS, getParameterizedQualifiedClassName( beanInfo
.getType() ), getParameterizedQualifiedClassName( property.getType() ) );
source.indent();
source.println( "@Override" );
source.println( "protected %s<?> newSerializer() {", JSON_SERIALIZER_CLASS );
source.indent();
source.println( "return %s;", entry.getValue().getInstance() );
source.outdent();
source.println( "}" );
generatePropertySerializerParameters( source, property, entry.getValue() );
source.println();
source.println( "@Override" );
source.println( "public %s getValue(%s bean, %s ctx) {", getParameterizedQualifiedClassName( property
.getType() ), getParameterizedQualifiedClassName( beanInfo.getType() ), JSON_SERIALIZATION_CONTEXT_CLASS );
source.indent();
source.println( "return %s;", getterAccessor.getAccessor() );
source.outdent();
source.println( "}" );
if ( getterAccessor.getAdditionalMethod().isPresent() ) {
source.println();
getterAccessor.getAdditionalMethod().get().write( source );
}
source.outdent();
source.println( "});" );
source.println();