From 7d32c9ce7b13ef79e23f7c35614788c6456131c0 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 7 Sep 2021 11:40:27 +0200 Subject: [PATCH] Move leaf-list statement implementations leaf-list was left out from the previous round of migrations, make sure we catch up. JIRA: YANGTOOLS-1152 Change-Id: I437c0d24fc9c81c3b8861cc7cd16bcde9f562a9c Signed-off-by: Robert Varga --- .../model/ri/stmt/EffectiveStatements.java | 39 ++++++++++++++++++ .../AbstractLeafListEffectiveStatement.java | 2 +- ...actNonEmptyLeafListEffectiveStatement.java | 2 +- .../eff}/EmptyLeafListEffectiveStatement.java | 8 ++-- .../RegularLeafListEffectiveStatement.java | 8 ++-- .../eff}/SlimLeafListEffectiveStatement.java | 10 ++--- .../rfc7950/reactor/RFC7950Reactors.java | 2 +- .../LeafListStatementSupport.java | 41 ++++--------------- 8 files changed, 63 insertions(+), 49 deletions(-) rename {parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list => model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/AbstractLeafListEffectiveStatement.java (98%) rename {parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list => model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/AbstractNonEmptyLeafListEffectiveStatement.java (97%) rename {parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list => model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/EmptyLeafListEffectiveStatement.java (77%) rename {parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list => model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/RegularLeafListEffectiveStatement.java (80%) rename {parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list => model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff}/SlimLeafListEffectiveStatement.java (75%) rename parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/{leaf_list => meta}/LeafListStatementSupport.java (77%) diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java index bf0497ee6f..e477eac50a 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java @@ -25,6 +25,7 @@ import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; +import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @@ -89,6 +90,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.InputStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LengthStatement; @@ -187,6 +190,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIdentityEffec import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIncludeEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyListEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement; @@ -239,6 +243,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIdentityEff import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIncludeEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafEffectiveStatement; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLengthEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularListEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement; @@ -268,6 +273,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularWhenEffecti import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYangVersionEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularYinElementEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RpcEffectiveStatementImpl; +import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.SlimLeafListEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.TypedefEffectiveStatementImpl; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredCaseEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.UndeclaredInputEffectiveStatement; @@ -582,6 +588,39 @@ public final class EffectiveStatements { : new RegularLeafEffectiveStatement(declared, argument, flags, substatements, original); } + public static LeafListEffectiveStatement copyLeafList(final LeafListEffectiveStatement original, + final QName argument, final int flags, final @Nullable LeafListSchemaNode newOriginal) { + if (original instanceof RegularLeafListEffectiveStatement) { + return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original, newOriginal, + argument, flags); + } else if (original instanceof SlimLeafListEffectiveStatement) { + return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original, newOriginal, argument, + flags); + } else if (original instanceof EmptyLeafListEffectiveStatement) { + // Promote to slim + return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original, newOriginal, argument, + flags); + } else { + throw new IllegalArgumentException("Unsupported original " + original); + } + } + + public static LeafListEffectiveStatement createLeafList(final LeafListStatement declared, final QName argument, + final int flags, final ImmutableList> substatements, + final ImmutableSet defaultValues, final @Nullable ElementCountConstraint elementCountConstraint, + final @Nullable LeafListSchemaNode original) + throws SubstatementIndexingException { + if (defaultValues.isEmpty()) { + return original == null && elementCountConstraint == null + ? new EmptyLeafListEffectiveStatement(declared, argument, flags, substatements) + : new SlimLeafListEffectiveStatement(declared, argument, flags, substatements, original, + elementCountConstraint); + } + + return new RegularLeafListEffectiveStatement(declared, argument, flags, substatements, original, defaultValues, + elementCountConstraint); + } + public static LengthEffectiveStatement createLength(final LengthStatement declared, final ImmutableList> substatements) { return substatements.isEmpty() ? new EmptyLengthEffectiveStatement(declared) diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractLeafListEffectiveStatement.java similarity index 98% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java rename to model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractLeafListEffectiveStatement.java index 56b06f1703..8b98e64062 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractLeafListEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractNonEmptyLeafListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractNonEmptyLeafListEffectiveStatement.java similarity index 97% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractNonEmptyLeafListEffectiveStatement.java rename to model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractNonEmptyLeafListEffectiveStatement.java index b36b4433d1..45f69a7037 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractNonEmptyLeafListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractNonEmptyLeafListEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import java.util.Optional; diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyLeafListEffectiveStatement.java similarity index 77% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListEffectiveStatement.java rename to model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyLeafListEffectiveStatement.java index 167b2e890f..8a984311f2 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyLeafListEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -17,13 +17,13 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; -final class EmptyLeafListEffectiveStatement extends AbstractLeafListEffectiveStatement { - EmptyLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, +public final class EmptyLeafListEffectiveStatement extends AbstractLeafListEffectiveStatement { + public EmptyLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, final ImmutableList> substatements) { super(declared, argument, flags, substatements); } - EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final QName argument, + public EmptyLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement original, final QName argument, final int flags) { super(original, argument, flags); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularLeafListEffectiveStatement.java similarity index 80% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListEffectiveStatement.java rename to model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularLeafListEffectiveStatement.java index d63857ac76..71f367b8a8 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularLeafListEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import static java.util.Objects.requireNonNull; @@ -18,17 +18,17 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; -final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement { +public final class RegularLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement { private final @NonNull ImmutableSet defaults; - RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, + public RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, final ImmutableList> substatements, final LeafListSchemaNode original, final ImmutableSet defaults, final ElementCountConstraint elementCountConstraint) { super(declared, argument, flags, substatements, original, elementCountConstraint); this.defaults = requireNonNull(defaults); } - RegularLeafListEffectiveStatement(final RegularLeafListEffectiveStatement originalEffective, + public RegularLeafListEffectiveStatement(final RegularLeafListEffectiveStatement originalEffective, final LeafListSchemaNode original, final QName argument, final int flags) { super(originalEffective, original, argument, flags); this.defaults = originalEffective.defaults; diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/SlimLeafListEffectiveStatement.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/SlimLeafListEffectiveStatement.java similarity index 75% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/SlimLeafListEffectiveStatement.java rename to model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/SlimLeafListEffectiveStatement.java index ee13e4638e..2cd749c39a 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/SlimLeafListEffectiveStatement.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/SlimLeafListEffectiveStatement.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -15,19 +15,19 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement; -final class SlimLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement { - SlimLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, +public final class SlimLeafListEffectiveStatement extends AbstractNonEmptyLeafListEffectiveStatement { + public SlimLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags, final ImmutableList> substatements, final LeafListSchemaNode original, final ElementCountConstraint elementCountConstraint) { super(declared, argument, flags, substatements, original, elementCountConstraint); } - SlimLeafListEffectiveStatement(final SlimLeafListEffectiveStatement originalEffective, + public SlimLeafListEffectiveStatement(final SlimLeafListEffectiveStatement originalEffective, final LeafListSchemaNode original, final QName argument, final int flags) { super(originalEffective, original, argument, flags); } - SlimLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective, + public SlimLeafListEffectiveStatement(final EmptyLeafListEffectiveStatement originalEffective, final LeafListSchemaNode original, final QName argument, final int flags) { super(originalEffective, original, argument, flags); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java index 0822ec6978..60ddd022e7 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java @@ -29,7 +29,6 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureS import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementRFC7950Support; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.import_.ImportedVersionNamespace; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ConfigListWarningNamespace; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.ActionStatementSupport; @@ -57,6 +56,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.IdentityStatemen import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.IncludeStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.InputStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.KeyStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafListStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LeafStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.LengthStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta.MandatoryStatementSupport; diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafListStatementSupport.java similarity index 77% rename from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java rename to parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafListStatementSupport.java index 1399110aaf..edbb24c061 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafListStatementSupport.java @@ -5,17 +5,15 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta; import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import java.util.Collection; -import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Ordering; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint; import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; @@ -30,6 +28,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.TypeEffectiveStatement; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators; import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements; +import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements; import org.opendaylight.yangtools.yang.model.spi.meta.EffectiveStatementMixins.EffectiveStatementWithFlags.FlagsBuilder; import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; @@ -101,21 +100,8 @@ public final class LeafListStatementSupport @Override public LeafListEffectiveStatement copyEffective(final Current stmt, final LeafListEffectiveStatement original) { - final int flags = computeFlags(stmt, original.effectiveSubstatements()); - if (original instanceof RegularLeafListEffectiveStatement) { - return new RegularLeafListEffectiveStatement((RegularLeafListEffectiveStatement) original, - stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags); - } else if (original instanceof SlimLeafListEffectiveStatement) { - return new SlimLeafListEffectiveStatement((SlimLeafListEffectiveStatement) original, - stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags); - } else if (original instanceof EmptyLeafListEffectiveStatement) { - // Promote to slim - return new SlimLeafListEffectiveStatement((EmptyLeafListEffectiveStatement) original, - stmt.original(LeafListSchemaNode.class), stmt.getArgument(), flags); - } else { - // Safe fallback - return super.copyEffective(stmt, original); - } + return EffectiveStatements.copyLeafList(original, stmt.getArgument(), + computeFlags(stmt, original.effectiveSubstatements()), stmt.original(LeafListSchemaNode.class)); } @Override @@ -125,7 +111,6 @@ public final class LeafListStatementSupport findFirstStatement(substatements, TypeEffectiveStatement.class), stmt, "Leaf-list is missing a 'type' statement"); - final int flags = computeFlags(stmt, substatements); final ImmutableSet defaultValues = substatements.stream() .filter(DefaultEffectiveStatement.class::isInstance) .map(DefaultEffectiveStatement.class::cast) @@ -140,20 +125,10 @@ public final class LeafListStatementSupport // FIXME: RFC7950 section 7.7.4: we need to check for min-elements and defaultValues conflict - final Optional elementCountConstraint = - EffectiveStmtUtils.createElementCountConstraint(substatements); - - final LeafListSchemaNode original = stmt.original(LeafListSchemaNode.class); - final LeafListStatement declared = stmt.declared(); - if (defaultValues.isEmpty()) { - return original == null && !elementCountConstraint.isPresent() - ? new EmptyLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements) - : new SlimLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements, original, - elementCountConstraint.orElse(null)); - } - - return new RegularLeafListEffectiveStatement(declared, stmt.getArgument(), flags, substatements, original, - defaultValues, elementCountConstraint.orElse(null)); + return EffectiveStatements.createLeafList(stmt.declared(), stmt.getArgument(), + computeFlags(stmt, substatements), substatements, defaultValues, + EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null), + stmt.original(LeafListSchemaNode.class)); } private static int computeFlags(final Current stmt, -- 2.36.6