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%2FDataObjectCodecContext.java;h=b63befcbe96f7ef77125fe1664cbf69ff309e555;hb=9f23891d96e635e1cd30c699f9b72b9336fc9d06;hp=cbc3c15eb9b2bd759b42473798bd992ac596992b;hpb=6dabf86d9ac01729eebcc7c6ee914e31ace5e3b0;p=mdsal.git diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java index cbc3c15eb9..b63befcbe9 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectCodecContext.java @@ -13,6 +13,7 @@ import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.lang.reflect.Method; @@ -27,7 +28,6 @@ import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.runtime.api.AugmentRuntimeType; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.binding.runtime.api.CompositeRuntimeType; -import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections; import org.opendaylight.yangtools.yang.binding.Augmentation; import org.opendaylight.yangtools.yang.binding.BindingObject; import org.opendaylight.yangtools.yang.binding.DataObject; @@ -47,8 +47,9 @@ import org.slf4j.LoggerFactory; * This class is an implementation detail. It is public only due to technical reasons and may change at any time. */ @Beta -public abstract class DataObjectCodecContext - extends AbstractDataObjectCodecContext implements BindingDataObjectCodecTreeNode { +public abstract sealed class DataObjectCodecContext + extends AbstractDataObjectCodecContext implements BindingDataObjectCodecTreeNode + permits CaseCodecContext, ContainerLikeCodecContext, ListCodecContext, NotificationCodecContext { private static final Logger LOG = LoggerFactory.getLogger(DataObjectCodecContext.class); private static final VarHandle MISMATCHED_AUGMENTED; @@ -69,21 +70,22 @@ public abstract class DataObjectCodecContext, DataContainerCodecPrototype> mismatchedAugmented = ImmutableMap.of(); + @SuppressFBWarnings(value = "URF_UNREAD_FIELD", justification = "https://github.com/spotbugs/spotbugs/issues/2749") + private volatile ImmutableMap, CommonDataObjectCodecPrototype> mismatchedAugmented = ImmutableMap.of(); - DataObjectCodecContext(final DataContainerCodecPrototype prototype) { + DataObjectCodecContext(final CommonDataObjectCodecPrototype prototype) { this(prototype, CodecItemFactory.of()); } - DataObjectCodecContext(final DataContainerCodecPrototype prototype, final CodecItemFactory itemFactory) { + DataObjectCodecContext(final CommonDataObjectCodecPrototype prototype, final CodecItemFactory itemFactory) { this(prototype, new CodecDataObjectAnalysis<>(prototype, itemFactory, null)); } - DataObjectCodecContext(final DataContainerCodecPrototype prototype, final Method keyMethod) { + DataObjectCodecContext(final CommonDataObjectCodecPrototype prototype, final Method keyMethod) { this(prototype, new CodecDataObjectAnalysis<>(prototype, CodecItemFactory.of(), keyMethod)); } - private DataObjectCodecContext(final DataContainerCodecPrototype prototype, + private DataObjectCodecContext(final CommonDataObjectCodecPrototype prototype, final CodecDataObjectAnalysis analysis) { super(prototype, analysis); @@ -108,13 +110,13 @@ public abstract class DataObjectCodecContext pathChildPrototype(final Class argType) { + final CommonDataObjectCodecPrototype pathChildPrototype(final Class argType) { final var child = super.pathChildPrototype(argType); return child != null ? child : augmentToPrototype.get(argType); } @Override - final DataContainerCodecPrototype streamChildPrototype(final Class childClass) { + final CommonDataObjectCodecPrototype streamChildPrototype(final Class childClass) { final var child = super.streamChildPrototype(childClass); if (child == null && Augmentation.class.isAssignableFrom(childClass)) { return getAugmentationProtoByClass(childClass); @@ -123,7 +125,7 @@ public abstract class DataObjectCodecContext, AugmentationCodecPrototype> oldMismatched, final @NonNull Class childClass) { @SuppressWarnings("rawtypes") - final Class augTarget = BindingReflections.findAugmentationTarget((Class) childClass); + final Class augTarget = findAugmentationTarget((Class) childClass); // Do not bother with proposals which are not augmentations of our class, or do not match what the runtime // context would load. if (getBindingClass().equals(augTarget) && belongsToRuntimeContext(childClass)) { @@ -175,7 +177,7 @@ public abstract class DataObjectCodecContext, DataContainerCodecPrototype>builderWithExpectedSize(expected.size() + 1) + ImmutableMap., CommonDataObjectCodecPrototype>builderWithExpectedSize(expected.size() + 1) .putAll(expected) .put(childClass, prototype) .build(); @@ -216,11 +218,9 @@ public abstract class DataObjectCodecContext new NodeIdentifier((QName) stmt.argument())) .collect(ImmutableSet.toImmutableSet()); - final var it = childPaths.iterator(); - if (!it.hasNext()) { + if (childPaths.isEmpty()) { return null; } - final var namespace = it.next().getNodeType().getModule(); final var factory = factory(); final GeneratedType javaType = augment.javaType(); @@ -231,7 +231,7 @@ public abstract class DataObjectCodecContext