From: Tony Tkacik Date: Fri, 12 Jun 2015 10:28:04 +0000 (+0200) Subject: Bug 3687 - StreamWriterGenerator emits UNKNOWN_SIZE X-Git-Tag: release/lithium~19 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=b6fdf49d349662ffa82ae6477f99bac405799a3f Bug 3687 - StreamWriterGenerator emits UNKNOWN_SIZE 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 Signed-off-by: Robert Varga --- diff --git a/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/StreamWriterGenerator.java b/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/StreamWriterGenerator.java index a6073c667e..46c6ab2580 100644 --- a/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/StreamWriterGenerator.java +++ b/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/gen/impl/StreamWriterGenerator.java @@ -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); } }; }