From: Robert Varga Date: Fri, 26 May 2023 21:45:56 +0000 (+0200) Subject: Improve BindingCodecContext.getCodecContextNode() X-Git-Tag: v12.0.0~115 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=28c3c15c18c9dd627e7815d1b9cbec4c284d255d;p=mdsal.git Improve BindingCodecContext.getCodecContextNode() This method always returns @NonNull, document that. Also improve the IAE thrown on mismatched input and eliminate SchemaRootCodecContext.create(). Change-Id: Icbd36df64fb5027698a80bd0ba0984b9f55777d4 Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index 57492a4bf3..4989f809a2 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -149,7 +149,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri private final @NonNull InstanceIdentifierCodec instanceIdentifierCodec; private final @NonNull IdentityCodec identityCodec; private final @NonNull BindingRuntimeContext context; - private final SchemaRootCodecContext root; + private final @NonNull SchemaRootCodecContext root; public BindingCodecContext() { this(ServiceLoader.load(BindingRuntimeContext.class).findFirst() @@ -158,7 +158,7 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri public BindingCodecContext(final BindingRuntimeContext context) { this.context = requireNonNull(context, "Binding Runtime Context is required."); - root = SchemaRootCodecContext.create(this); + root = new SchemaRootCodecContext<>(this); identityCodec = new IdentityCodec(context); instanceIdentifierCodec = new InstanceIdentifierCodec(this); } @@ -237,14 +237,18 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri return new BindingToNormalizedStreamWriter(getActionCodec(action).output(), domWriter); } - DataContainerCodecContext getCodecContextNode(final InstanceIdentifier binding, + @NonNull DataContainerCodecContext getCodecContextNode(final InstanceIdentifier binding, final List builder) { - DataContainerCodecContext currentNode = root; - for (final InstanceIdentifier.PathArgument bindingArg : binding.getPathArguments()) { - currentNode = currentNode.bindingPathArgumentChild(bindingArg, builder); - checkArgument(currentNode != null, "Supplied Instance Identifier %s is not valid.", binding); + DataContainerCodecContext current = root; + for (var bindingArg : binding.getPathArguments()) { + final var next = current.bindingPathArgumentChild(bindingArg, builder); + if (next == null) { + throw new IllegalArgumentException("%s is not valid: parent %s does not have a child %s".formatted( + binding, current.bindingArg(), bindingArg)); + } + current = next; } - return currentNode; + return current; } /** diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java index 52c3efdfc9..b93ec3f2ad 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SchemaRootCodecContext.java @@ -198,19 +198,8 @@ final class SchemaRootCodecContext extends DataContainerCo } }); - private SchemaRootCodecContext(final DataContainerCodecPrototype dataPrototype) { - super(dataPrototype); - } - - /** - * Creates RootNode from supplied CodecContextFactory. - * - * @param factory - * CodecContextFactory - * @return A new root node - */ - static SchemaRootCodecContext create(final CodecContextFactory factory) { - return new SchemaRootCodecContext<>(DataContainerCodecPrototype.rootPrototype(factory)); + SchemaRootCodecContext(final CodecContextFactory factory) { + super(DataContainerCodecPrototype.rootPrototype(factory)); } @Override