From: Robert Varga Date: Tue, 1 Mar 2022 22:44:24 +0000 (+0100) Subject: Fix {Data,Schema}TreeAwareEffectiveStatement.Namespace X-Git-Tag: v8.0.0~17 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=yangtools.git;a=commitdiff_plain;h=faccecb6c67451bdf8ea1f2eb19afc4d51f3ae83 Fix {Data,Schema}TreeAwareEffectiveStatement.Namespace These two namespaces should not be generic, but rather specialized to the corresponding wildcard statement. This fixes a number of usability issues where type inference would not work correctly. Change-Id: I0b4a2461df58265ae2db795c0c81e2b4e5972e41 Signed-off-by: Robert Varga --- diff --git a/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactorySupplier.java b/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactorySupplier.java index 2c3dacd2fe..8744651ab9 100644 --- a/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactorySupplier.java +++ b/codec/yang-data-codec-gson/src/main/java/org/opendaylight/yangtools/yang/data/codec/gson/JSONCodecFactorySupplier.java @@ -15,11 +15,9 @@ import com.google.common.base.Stopwatch; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import java.util.Map; import java.util.Optional; import java.util.function.BiFunction; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.util.codec.CodecCache; import org.opendaylight.yangtools.yang.data.util.codec.LazyCodecCache; import org.opendaylight.yangtools.yang.data.util.codec.NoopCodecCache; @@ -28,7 +26,7 @@ import org.opendaylight.yangtools.yang.data.util.codec.SharedCodecCache; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode; import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.DataTreeAwareEffectiveStatement.Namespace; import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement; import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack; import org.slf4j.Logger; @@ -93,11 +91,10 @@ public enum JSONCodecFactorySupplier { private static int codecsForChildren(final JSONCodecFactory lazy, final SchemaInferenceStack stack, final DataTreeAwareEffectiveStatement parent) { int ret = 0; - final Map> dataTree = - parent.getAll(DataTreeAwareEffectiveStatement.Namespace.class); - for (DataTreeEffectiveStatement child : dataTree.values()) { + for (var entry : parent.getAll(Namespace.class).entrySet()) { + final var child = entry.getValue(); if (child instanceof DataTreeAwareEffectiveStatement) { - stack.enterDataTree(child.argument()); + stack.enterDataTree(entry.getKey()); ret += codecsForChildren(lazy, stack, (DataTreeAwareEffectiveStatement) child); stack.exit(); } else if (child instanceof TypedDataSchemaNode) { diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DataTreeAwareEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DataTreeAwareEffectiveStatement.java index 7e2a54feb5..897dabb20e 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DataTreeAwareEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/DataTreeAwareEffectiveStatement.java @@ -35,11 +35,9 @@ public interface DataTreeAwareEffectiveStatement * This corresponds to the {@code data tree} view of a YANG-defined data. - * - * @param Child statement type */ @NonNullByDefault - abstract class Namespace> extends EffectiveStatementNamespace { + abstract class Namespace extends EffectiveStatementNamespace> { private Namespace() { // Should never be instantiated } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SchemaTreeAwareEffectiveStatement.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SchemaTreeAwareEffectiveStatement.java index 144473a690..f110b808bb 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SchemaTreeAwareEffectiveStatement.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/SchemaTreeAwareEffectiveStatement.java @@ -30,18 +30,14 @@ import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Desce * * @param Argument type * @param Class representing declared version of this statement. - * @author Robert Varga */ @Beta public interface SchemaTreeAwareEffectiveStatement> extends EffectiveStatement { /** * Namespace of {@code schema node}s defined within this node. - * - * @param Child statement type - * @author Robert Varga */ @NonNullByDefault - abstract class Namespace> extends EffectiveStatementNamespace { + abstract class Namespace extends EffectiveStatementNamespace> { private Namespace() { // Should never be instantiated } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java index f2f4f4d01e..4626c389e4 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/ActionNodeContainerCompat.java @@ -29,6 +29,7 @@ public interface ActionNodeContainerCompat, // 'action' identifier must never collide with another element, hence if we look it up and it ends up being // an ActionDefinition, we have found a match. return get(Namespace.class, qname) - .flatMap(child -> child instanceof ActionDefinition ? Optional.of(child) : Optional.empty()); + .flatMap(child -> child instanceof ActionDefinition ? Optional.of((ActionDefinition) child) + : Optional.empty()); } } diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java index 16e9dc38ab..7d98318cfe 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/compat/NotificationNodeContainerCompat.java @@ -29,6 +29,7 @@ public interface NotificationNodeContainerCompat child instanceof NotificationDefinition ? Optional.of(child) : Optional.empty()); + .flatMap(child -> child instanceof NotificationDefinition ? Optional.of((NotificationDefinition) child) + : Optional.empty()); } }