From 984dfcd854a006724cbf0b20efc8bac6094bad48 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 11 Apr 2022 13:57:24 +0200 Subject: [PATCH] Disconnect IdentifiableItemCodec from IllegalArgumentCodec IdentifiableItemCodec is only used by KeyedListNodeCodecContext and it is used directly. Detach it from IllegalArgumentCodec, making peeling off one possibility from the class tree. JIRA: MDSAL-704 Change-Id: I25a818eabe80d5bb3f6b4ff2d152e7ca002a93a1 Signed-off-by: Robert Varga --- .../dom/codec/impl/IdentifiableItemCodec.java | 16 +++++--------- .../codec/impl/KeyedListNodeCodecContext.java | 22 +++++++------------ 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentifiableItemCodec.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentifiableItemCodec.java index f7ef432da8..0b89bff24f 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentifiableItemCodec.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/IdentifiableItemCodec.java @@ -23,7 +23,6 @@ import java.util.Map.Entry; import java.util.Set; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; -import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec; import org.opendaylight.yangtools.util.ImmutableOffsetMap; import org.opendaylight.yangtools.util.ImmutableOffsetMapTemplate; import org.opendaylight.yangtools.yang.binding.Identifiable; @@ -39,8 +38,8 @@ import org.slf4j.LoggerFactory; /** * Codec support for extracting the {@link Identifiable#key()} method return from a MapEntryNode. */ -abstract class IdentifiableItemCodec - extends AbstractIllegalArgumentCodec> { +// FIXME: sealed class when we have JDK17+ +abstract class IdentifiableItemCodec { private static final class SingleKey extends IdentifiableItemCodec { private static final MethodType CTOR_TYPE = MethodType.methodType(Identifier.class, Object.class); @@ -150,20 +149,17 @@ abstract class IdentifiableItemCodec } } - @Override @SuppressWarnings({ "rawtypes", "unchecked" }) - protected final IdentifiableItem deserializeImpl(final NodeIdentifierWithPredicates input) { - final Identifier identifier = deserializeIdentifier(input); - return IdentifiableItem.of((Class) identifiable, (Identifier) identifier); + final @NonNull IdentifiableItem domToBinding(final NodeIdentifierWithPredicates input) { + return IdentifiableItem.of((Class) identifiable, (Identifier) deserializeIdentifier(requireNonNull(input))); } - @Override - protected final NodeIdentifierWithPredicates serializeImpl(final IdentifiableItem input) { + final @NonNull NodeIdentifierWithPredicates bindingToDom(final IdentifiableItem input) { return serializeIdentifier(qname, input.getKey()); } @SuppressWarnings("checkstyle:illegalCatch") - final @NonNull Identifier deserializeIdentifier(final NodeIdentifierWithPredicates input) { + final @NonNull Identifier deserializeIdentifier(final @NonNull NodeIdentifierWithPredicates input) { try { return deserializeIdentifierImpl(input); } catch (Throwable e) { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java index aa6dd00d8f..5367d6d673 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/KeyedListNodeCodecContext.java @@ -86,7 +86,7 @@ abstract class KeyedListNodeCodecContext, D extends Data super.addYangPathArgument(arg, builder); if (arg instanceof IdentifiableItem) { - builder.add(codec.serialize((IdentifiableItem) arg)); + builder.add(codec.bindingToDom((IdentifiableItem) arg)); } else { // Adding wildcarded super.addYangPathArgument(arg, builder); @@ -95,15 +95,13 @@ abstract class KeyedListNodeCodecContext, D extends Data @Override protected InstanceIdentifier.PathArgument getBindingPathArgument(final YangInstanceIdentifier.PathArgument domArg) { - if (domArg instanceof NodeIdentifierWithPredicates) { - return codec.deserialize((NodeIdentifierWithPredicates) domArg); - } - return super.getBindingPathArgument(domArg); + return domArg instanceof NodeIdentifierWithPredicates + ? codec.domToBinding((NodeIdentifierWithPredicates) domArg) : super.getBindingPathArgument(domArg); } @SuppressWarnings({ "rawtypes", "unchecked" }) NodeIdentifierWithPredicates serialize(final Identifier key) { - return codec.serialize(IdentifiableItem.of((Class)getBindingClass(), (Identifier)key)); + return codec.bindingToDom(IdentifiableItem.of((Class)getBindingClass(), (Identifier)key)); } @NonNull Identifier deserialize(final NodeIdentifierWithPredicates arg) { @@ -112,17 +110,13 @@ abstract class KeyedListNodeCodecContext, D extends Data @Override public YangInstanceIdentifier.PathArgument serializePathArgument(final InstanceIdentifier.PathArgument arg) { - if (arg instanceof IdentifiableItem) { - return codec.serialize((IdentifiableItem) arg); - } - return super.serializePathArgument(arg); + return arg instanceof IdentifiableItem + ? codec.bindingToDom((IdentifiableItem) arg) : super.serializePathArgument(arg); } @Override public InstanceIdentifier.PathArgument deserializePathArgument(final YangInstanceIdentifier.PathArgument arg) { - if (arg instanceof NodeIdentifierWithPredicates) { - return codec.deserialize((NodeIdentifierWithPredicates) arg); - } - return super.deserializePathArgument(arg); + return arg instanceof NodeIdentifierWithPredicates + ? codec.domToBinding((NodeIdentifierWithPredicates) arg) : super.deserializePathArgument(arg); } } -- 2.36.6