Bug 3687 - StreamWriterGenerator emits UNKNOWN_SIZE 52/22452/4
authorTony Tkacik <ttkacik@cisco.com>
Fri, 12 Jun 2015 10:28:04 +0000 (12:28 +0200)
committerRobert Varga <rovarga@cisco.com>
Fri, 12 Jun 2015 12:13:57 +0000 (14:13 +0200)
StreamWriterGenerator always emitted sizing hint
for fully-completed data and sometimes even
counting all availble augmentations, which actually
lead-up to larger sizes of collections then needed.

Fix changes the SIZE HINT for "constant" max-sized
types (containers, augmentations, list entries)
to -1 so underlaying implementation could size
them based on actual data.

Change-Id: Ibd446f71c4b066f4dab4a7d73b1bc851d9e62c99
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/StreamWriterGenerator.java

index a6073c667e452418d65db565f640bec9aaabb06c..46c6ab2580f41b19cdd1eef113a4190d81061235 100644 (file)
@@ -11,6 +11,7 @@ import org.opendaylight.yangtools.binding.data.codec.util.AugmentableDispatchSer
 import org.opendaylight.yangtools.binding.data.codec.util.ChoiceDispatchSerializer;
 import org.opendaylight.yangtools.sal.binding.generator.util.JavassistUtils;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;
+import org.opendaylight.yangtools.yang.binding.BindingStreamEventWriter;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.DataObjectSerializerImplementation;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
@@ -34,6 +35,9 @@ import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
  */
 public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
 
+
+    private static final String UNKNOWN_SIZE = BindingStreamEventWriter.class.getName() + ".UNKNOWN_SIZE";
+
     private StreamWriterGenerator(final JavassistUtils utils, final Void ignore) {
         super(utils);
     }
@@ -61,13 +65,14 @@ public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
         return Integer.toString(node.getChildNodes().size());
     }
 
+
     @Override
     protected DataObjectSerializerSource generateContainerSerializer(final GeneratedType type, final ContainerSchemaNode node) {
 
         return new AugmentableDataNodeContainerEmitterSource(this, type, node) {
             @Override
             public CharSequence emitStartEvent() {
-                return startContainerNode(classReference(type), getChildSizeFromSchema(node));
+                return startContainerNode(classReference(type), UNKNOWN_SIZE);
             }
         };
     }
@@ -78,7 +83,7 @@ public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
         return new AugmentableDataNodeContainerEmitterSource(this, type, node) {
             @Override
             public CharSequence emitStartEvent() {
-                return startContainerNode(classReference(type), getChildSizeFromSchema(node));
+                return startContainerNode(classReference(type), UNKNOWN_SIZE);
             }
         };
     }
@@ -88,7 +93,7 @@ public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
         return new AugmentableDataNodeContainerEmitterSource(this, type, node) {
             @Override
             public CharSequence emitStartEvent() {
-                return startCaseNode(classReference(type),getChildSizeFromSchema(node));
+                return startCaseNode(classReference(type),UNKNOWN_SIZE);
             }
         };
     }
@@ -99,7 +104,7 @@ public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
 
             @Override
             public CharSequence emitStartEvent() {
-                return startUnkeyedListItem(getChildSizeFromSchema(schemaNode));
+                return startUnkeyedListItem(UNKNOWN_SIZE);
             }
         };
     }
@@ -120,7 +125,7 @@ public class StreamWriterGenerator extends AbstractStreamWriterGenerator {
         return new AugmentableDataNodeContainerEmitterSource(this, type, node) {
             @Override
             public CharSequence emitStartEvent() {
-                return startMapEntryNode(invoke(INPUT, "getKey"), getChildSizeFromSchema(node));
+                return startMapEntryNode(invoke(INPUT, "getKey"), UNKNOWN_SIZE);
             }
         };
     }