X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FAugmentableCodecDataObject.java;fp=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Fimpl%2FAugmentableCodecDataObject.java;h=25eadbf195c7a55ffff3bf277ede79c697dab7ef;hb=5901ab384ee5e8c77c19a0e6fde35b7804973dbd;hp=dcee340dd53edb6616e9ac8cecf0af01d73b7a2b;hpb=4888a8c6b5870decedb0bf7b80622553abf09d11;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentableCodecDataObject.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentableCodecDataObject.java index dcee340dd5..25eadbf195 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentableCodecDataObject.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/AugmentableCodecDataObject.java @@ -12,13 +12,13 @@ import static java.util.Objects.requireNonNull; import com.google.common.collect.ImmutableMap; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; -import java.util.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.binding.Augmentable; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.data.api.schema.DataContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.DistinctNodeContainer; -import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; /** * A base class for {@link DataObject}s which are also {@link Augmentable}, backed by {@link DataObjectCodecContext}. @@ -44,7 +44,7 @@ public abstract class AugmentableCodecDataObject>, Augmentation> cachedAugmentations; - protected AugmentableCodecDataObject(final DataObjectCodecContext context, + protected AugmentableCodecDataObject(final AbstractDataObjectCodecContext context, final DistinctNodeContainer data) { super(context, data); } @@ -54,25 +54,24 @@ public abstract class AugmentableCodecDataObject> @Nullable A augmentation(final Class augmentationType) { requireNonNull(augmentationType, "Supplied augmentation must not be null."); - final ImmutableMap>, Augmentation> aug = acquireAugmentations(); + final var aug = acquireAugmentations(); if (aug != null) { return (A) aug.get(augmentationType); } @SuppressWarnings("rawtypes") - final Optional> optAugCtx = codecContext().possibleStreamChild( - (Class) augmentationType); + final var optAugCtx = codecContext().possibleStreamChild((Class) augmentationType); if (optAugCtx.isPresent()) { - final DataContainerCodecContext augCtx = optAugCtx.orElseThrow(); + final var augCtx = (AugmentationNodeContext) optAugCtx.orElseThrow(); // Due to binding specification not representing grouping instantiations we can end up having the same // augmentation applied to a grouping multiple times. While these augmentations have the same shape, they // are still represented by distinct binding classes and therefore we need to make sure the result matches // the augmentation the user is requesting -- otherwise a strict receiver would end up with a cryptic // ClassCastException. if (augmentationType.isAssignableFrom(augCtx.getBindingClass())) { - final NormalizedNode augData = codecData().childByArg(augCtx.getDomPathArgument()); - if (augData != null) { - return (A) augCtx.deserialize(augData); + final var augObj = augCtx.filterFrom((DataContainerNode) codecData()); + if (augObj != null) { + return augObj; } } } @@ -90,9 +89,8 @@ public abstract class AugmentableCodecDataObject>, Augmentation> loadAugmentations() { - final ImmutableMap>, Augmentation> ret = ImmutableMap.copyOf( - codecContext().getAllAugmentationsFrom(codecData())); + private @NonNull ImmutableMap>, Augmentation> loadAugmentations() { + final var ret = ImmutableMap.copyOf(codecContext().getAllAugmentationsFrom(codecData())); final Object witness = CACHED_AUGMENTATIONS.compareAndExchangeRelease(this, null, ret); return witness == null ? ret : (ImmutableMap>, Augmentation>) witness; }