This is an automated email from the ASF dual-hosted git repository.

rmannibucau pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new e30dc44  more reference passing in MappingGenerator to ensure we can 
override the generator as for object writers
e30dc44 is described below

commit e30dc44e96e367ac76fd5116b7e8f9f38fcd26e2
Author: Romain Manni-Bucau <[email protected]>
AuthorDate: Tue Apr 2 15:28:46 2019 +0200

    more reference passing in MappingGenerator to ensure we can override the 
generator as for object writers
---
 .../johnzon/mapper/MappingGeneratorImpl.java       | 35 ++++++++++++----------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
index 5c17a4f..1f5a0a3 100644
--- 
a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
+++ 
b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MappingGeneratorImpl.java
@@ -119,7 +119,7 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
                 if (writeBody) {
                     generator.writeStartObject();
                 }
-                doWriteObjectBody(object, ignoredProperties, jsonPointer);
+                doWriteObjectBody(object, ignoredProperties, jsonPointer, 
generator);
                 if (writeBody) {
                     generator.writeEnd();
                 }
@@ -148,7 +148,8 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
             final Class<?> valueClass = value.getClass();
             writeValue(valueClass, true,
                     false, false, false, false, itemConverter,
-                    key == null ? "null" : key.toString(), value, null, null, 
null);
+                    key == null ? "null" : key.toString(), value, null, null, 
null,
+                    generator);
         }
         return generator;
     }
@@ -194,7 +195,8 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
         return handled;
     }
 
-    private boolean writePrimitives(final String key, final Class<?> type, 
final Object value) {
+    private boolean writePrimitives(final String key, final Class<?> type, 
final Object value,
+                                    final JsonGenerator generator) {
         boolean handled = false;
         if (type == String.class) {
             generator.write(key, value.toString());
@@ -240,7 +242,8 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
     }
 
 
-    private void doWriteObjectBody(final Object object, final 
Collection<String> ignored, JsonPointerTracker jsonPointer)
+    private void doWriteObjectBody(final Object object, final 
Collection<String> ignored,
+                                   final JsonPointerTracker jsonPointer,final 
JsonGenerator generator)
             throws IllegalAccessException, InvocationTargetException {
 
         if (jsonPointer != null) {
@@ -258,7 +261,7 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
             return;
         }
         if (classMapping.adapter != null) {
-            doWriteObjectBody(classMapping.adapter.to(object), ignored, 
jsonPointer);
+            doWriteObjectBody(classMapping.adapter.to(object), ignored, 
jsonPointer, generator);
             return;
         }
 
@@ -304,7 +307,8 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
                         val,
                         getter.objectConverter,
                         getter.ignoreNested,
-                        isDeduplicateObjects ? new 
JsonPointerTracker(jsonPointer, getterEntry.getKey()) : null);
+                        isDeduplicateObjects ? new 
JsonPointerTracker(jsonPointer, getterEntry.getKey()) : null,
+                        generator);
             }
         }
 
@@ -326,7 +330,8 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
                             final String key, final Object value,
                             final ObjectConverter.Writer objectConverter,
                             final Collection<String> ignoredProperties,
-                            final JsonPointerTracker jsonPointer)
+                            final JsonPointerTracker jsonPointer,
+                            final JsonGenerator generator)
             throws InvocationTargetException, IllegalAccessException {
         //CHECKSTYLE:ON
         if (config.getSerializeValueFilter().shouldIgnore(key, value)) {
@@ -366,15 +371,15 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
             writeMapBody((Map<?, ?>) value, itemConverter);
             generator.writeEnd();
         } else if (primitive || (dynamic && Mappings.isPrimitive(type))) {
-            writePrimitives(key, type, value);
+            writePrimitives(key, type, value, generator);
         } else {
             final Adapter converter = config.findAdapter(type);
             if (converter != null) {
                 final Object adapted = doConvertFrom(value, converter);
-                if (writePrimitives(key, adapted.getClass(), adapted)) {
+                if (writePrimitives(key, adapted.getClass(), adapted, 
generator)) {
                     return;
                 }
-                writeValue(String.class, true, true, false, false, false, 
null, key, adapted, null, ignoredProperties, jsonPointer);
+                writeValue(String.class, true, true, false, false, false, 
null, key, adapted, null, ignoredProperties, jsonPointer, generator);
                 return;
             } else {
                 ObjectConverter.Writer objectConverterToUse = objectConverter;
@@ -383,18 +388,18 @@ public class MappingGeneratorImpl implements 
MappingGenerator {
                 }
 
                 if (objectConverterToUse != null) {
-                    final DynamicMappingGenerator generator = new 
DynamicMappingGenerator(this,
+                    final DynamicMappingGenerator dynamicMappingGenerator = 
new DynamicMappingGenerator(this,
                             () -> this.generator.writeStartObject(key), 
this.generator::writeEnd, key);
-                    objectConverterToUse.writeJson(value, generator);
-                    generator.flushIfNeeded();
+                    objectConverterToUse.writeJson(value, 
dynamicMappingGenerator);
+                    dynamicMappingGenerator.flushIfNeeded();
                     return;
                 }
             }
-            if (writePrimitives(key, type, value)) {
+            if (writePrimitives(key, type, value, generator)) {
                 return;
             }
             generator.writeStartObject(key);
-            doWriteObjectBody(value, ignoredProperties, jsonPointer);
+            doWriteObjectBody(value, ignoredProperties, jsonPointer, 
generator);
             generator.writeEnd();
         }
     }

Reply via email to