From 1b0fb1adb817fbc774db2223f05ab816cd59c576 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 22 May 2017 00:25:07 +0200 Subject: [PATCH] Cleanup JsonParserStream We can speed up namesakes manipulation by checking the return value of Set.add(). Also use Preconditions.checkState(). Change-Id: I5759c426654914616925ed9144cbd909ec52245f Signed-off-by: Robert Varga --- .../data/codec/gson/JsonParserStream.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java index a05fb34c19..bc29d28a65 100644 --- a/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java +++ b/yang/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JsonParserStream.java @@ -67,15 +67,20 @@ public final class JsonParserStream implements Closeable, Flushable { private final DataSchemaNode parentNode; private JsonParserStream(final NormalizedNodeStreamWriter writer, final SchemaContext schemaContext, - final DataSchemaNode parentNode) { + final JSONCodecFactory codecs, final DataSchemaNode parentNode) { this.schema = Preconditions.checkNotNull(schemaContext); this.writer = Preconditions.checkNotNull(writer); - this.codecs = JSONCodecFactory.create(schemaContext); + this.codecs = Preconditions.checkNotNull(codecs); this.parentNode = parentNode; } + private JsonParserStream(final NormalizedNodeStreamWriter writer, final SchemaContext schemaContext, + final DataSchemaNode parentNode) { + this(writer, schemaContext, JSONCodecFactory.getShared(schemaContext), parentNode); + } + public static JsonParserStream create(final NormalizedNodeStreamWriter writer, final SchemaContext schemaContext, - final SchemaNode parentNode ) { + final SchemaNode parentNode) { if (parentNode instanceof RpcDefinition) { return new JsonParserStream(writer, schemaContext, new RpcAsContainer((RpcDefinition) parentNode)); } @@ -219,19 +224,17 @@ public final class JsonParserStream implements Closeable, Flushable { final NamespaceAndName namespaceAndName = resolveNamespace(jsonElementName, parentSchema); final String localName = namespaceAndName.getName(); addNamespace(namespaceAndName.getUri()); - if (namesakes.contains(jsonElementName)) { + if (!namesakes.add(jsonElementName)) { throw new JsonSyntaxException("Duplicate name " + jsonElementName + " in JSON input."); } - namesakes.add(jsonElementName); - final Deque childDataSchemaNodes = - ParserStreamUtils.findSchemaNodeByNameAndNamespace(parentSchema, localName, getCurrentNamespace()); - if (childDataSchemaNodes.isEmpty()) { - throw new IllegalStateException("Schema for node with name " + localName + " and namespace " - + getCurrentNamespace() + " doesn't exist."); - } + final Deque childDataSchemaNodes = ParserStreamUtils.findSchemaNodeByNameAndNamespace( + parentSchema, localName, getCurrentNamespace()); + Preconditions.checkState(!childDataSchemaNodes.isEmpty(), + "Schema for node with name %s and namespace %s does not exist.", localName, getCurrentNamespace()); - final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent).addChild(childDataSchemaNodes); + final AbstractNodeDataWithSchema newChild = ((CompositeNodeDataWithSchema) parent) + .addChild(childDataSchemaNodes); if (newChild instanceof AnyXmlNodeDataWithSchema) { readAnyXmlValue(in, (AnyXmlNodeDataWithSchema) newChild, jsonElementName); } else { @@ -357,8 +360,6 @@ public final class JsonParserStream implements Closeable, Flushable { return namespaces.peek(); } - - private static class NamespaceAndName { private final URI uri; private final String name; -- 2.36.6