Move leaf-list statement implementations 12/97412/2
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 7 Sep 2021 09:40:27 +0000 (11:40 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 7 Sep 2021 10:56:24 +0000 (12:56 +0200)
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 <robert.varga@pantheon.tech>
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/EffectiveStatements.java
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractLeafListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListEffectiveStatement.java with 98% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/AbstractNonEmptyLeafListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractNonEmptyLeafListEffectiveStatement.java with 97% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyLeafListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListEffectiveStatement.java with 77% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularLeafListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListEffectiveStatement.java with 80% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/SlimLeafListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/SlimLeafListEffectiveStatement.java with 75% similarity]
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/LeafListStatementSupport.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java with 77% similarity]

index bf0497ee6fb26841c7b49b8d8ef7c5bdfd26658a..e477eac50a293d81118117e4f4c8d613b2e4f094 100644 (file)
@@ -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<? extends EffectiveStatement<?, ?>> substatements,
+            final ImmutableSet<String> 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<? extends EffectiveStatement<?, ?>> substatements) {
         return substatements.isEmpty() ? new EmptyLengthEffectiveStatement(declared)
@@ -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;
 
@@ -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;
@@ -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<? extends EffectiveStatement<?, ?>> 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);
     }
@@ -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<String> defaults;
 
-    RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
+    public RegularLeafListEffectiveStatement(final LeafListStatement declared, final QName argument, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements, final LeafListSchemaNode original,
             final ImmutableSet<String> 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;
@@ -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<? extends EffectiveStatement<?, ?>> 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);
     }
index 0822ec6978b9b305a7ac78359060a3bad3a0f053..60ddd022e793d75256b9c72aa8823718cfbec97e 100644 (file)
@@ -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;
@@ -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<QName, LeafListStatement> 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<String> 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> 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,