Move ListEffectiveStatement implementations 04/97404/1
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Sep 2021 15:20:25 +0000 (17:20 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 6 Sep 2021 15:21:02 +0000 (17:21 +0200)
We have missed this statement during YANGTOOLS-1241 implementation,
move it now.

JIRA: YANGTOOLS-1152
Change-Id: I029bedbf40a0885163d888cfe92f179e762cde8d
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/AbstractListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListEffectiveStatement.java with 98% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/EmptyListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListEffectiveStatement.java with 75% similarity]
model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/stmt/impl/eff/RegularListEffectiveStatement.java [moved from parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListEffectiveStatement.java with 74% similarity]
parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java

index 2911fd35036d4903b1a5448a508bf34d3bc20e38..bf0497ee6fb26841c7b49b8d8ef7c5bdfd26658a 100644 (file)
@@ -23,8 +23,10 @@ import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
 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.LeafSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ActionStatement;
@@ -90,6 +92,8 @@ import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
 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;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MandatoryStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MaxElementsEffectiveStatement;
@@ -184,6 +188,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyIfFeatureEffe
 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.EmptyLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyListEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyLocalKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.EmptyMaxElementsEffectiveStatement;
@@ -235,6 +240,7 @@ import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularIfFeatureEf
 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.RegularLengthEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularListEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularLocalKeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMandatoryEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.RegularMaxElementsEffectiveStatement;
@@ -582,6 +588,29 @@ public final class EffectiveStatements {
             : new RegularLengthEffectiveStatement(declared, substatements);
     }
 
+    public static ListEffectiveStatement copyList(final ListEffectiveStatement original, final QName argument,
+            final int flags, final @Nullable ListSchemaNode newOriginal) {
+        if (original instanceof RegularListEffectiveStatement) {
+            return new RegularListEffectiveStatement((RegularListEffectiveStatement) original, argument, flags,
+                newOriginal);
+        } else if (original instanceof EmptyListEffectiveStatement) {
+            return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original, argument, flags,
+                newOriginal);
+        } else {
+            throw new IllegalArgumentException("Unsupported original " + original);
+        }
+    }
+
+    public static ListEffectiveStatement createList(final ListStatement declared, final QName argument,
+            final int flags, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
+            final ImmutableList<QName> keyDefinition, final @Nullable ElementCountConstraint elementCountConstraint,
+            final @Nullable ListSchemaNode original) {
+        return original == null && elementCountConstraint == null
+            ? new EmptyListEffectiveStatement(declared, argument, flags, substatements, keyDefinition)
+                : new RegularListEffectiveStatement(declared, argument, flags, substatements, keyDefinition,
+                    elementCountConstraint, original);
+    }
+
     public static MandatoryEffectiveStatement createMandatory(final MandatoryStatement declared) {
         return new EmptyMandatoryEffectiveStatement(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.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.list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
@@ -15,14 +15,15 @@ import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
-final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
-    EmptyListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+public final class EmptyListEffectiveStatement extends AbstractListEffectiveStatement {
+    public EmptyListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition) {
         super(declared, argument, flags, substatements, keyDefinition);
     }
 
-    EmptyListEffectiveStatement(final EmptyListEffectiveStatement original, final QName argument, final int flags) {
+    public EmptyListEffectiveStatement(final EmptyListEffectiveStatement 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.list;
+package org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff;
 
 import com.google.common.collect.ImmutableList;
 import java.util.Optional;
@@ -15,11 +15,11 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
 
-final class RegularListEffectiveStatement extends AbstractListEffectiveStatement {
+public final class RegularListEffectiveStatement extends AbstractListEffectiveStatement {
     private final ElementCountConstraint elementCountConstraint;
     private final ListSchemaNode original;
 
-    RegularListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
+    public RegularListEffectiveStatement(final ListStatement declared, final QName argument, final int flags,
             final ImmutableList<? extends EffectiveStatement<?, ?>> substatements,
             final ImmutableList<QName> keyDefinition, final ElementCountConstraint elementCountConstraint,
             final ListSchemaNode original) {
@@ -28,15 +28,15 @@ final class RegularListEffectiveStatement extends AbstractListEffectiveStatement
         this.original = original;
     }
 
-    RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final ListSchemaNode original,
-            final QName argument, final int flags) {
+    public RegularListEffectiveStatement(final RegularListEffectiveStatement originalEffective, final QName argument,
+            final int flags, final ListSchemaNode original) {
         super(originalEffective, argument, flags);
         this.elementCountConstraint = originalEffective.elementCountConstraint;
         this.original = original;
     }
 
-    RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective, final ListSchemaNode original,
-            final QName argument, final int flags) {
+    public RegularListEffectiveStatement(final EmptyListEffectiveStatement originalEffective,
+            final QName argument, final int flags, final ListSchemaNode original) {
         super(originalEffective, argument, flags);
         this.elementCountConstraint = null;
         this.original = original;
index 6aab0cebd47c0ace79f9fb41c3d1d9ea167bec7b..e46523f910dd549788bf9361145f5f2a88d996c2 100644 (file)
@@ -16,12 +16,10 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Optional;
 import java.util.Set;
 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.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Status;
@@ -37,6 +35,7 @@ import org.opendaylight.yangtools.yang.model.api.stmt.OrderedByEffectiveStatemen
 import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement;
 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.model.spi.meta.SubstatementIndexingException;
 import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
@@ -138,17 +137,8 @@ public final class ListStatementSupport
     @Override
     public ListEffectiveStatement copyEffective(final Current<QName, ListStatement> stmt,
             final ListEffectiveStatement original) {
-        final int flags = computeFlags(stmt, original.effectiveSubstatements());
-        if (original instanceof RegularListEffectiveStatement) {
-            return new RegularListEffectiveStatement((RegularListEffectiveStatement) original,
-                stmt.original(ListSchemaNode.class), stmt.getArgument(), flags);
-        } else if (original instanceof EmptyListEffectiveStatement) {
-            return new RegularListEffectiveStatement((EmptyListEffectiveStatement) original,
-                stmt.original(ListSchemaNode.class), stmt.getArgument(), flags);
-        } else {
-            // Safe fallback
-            return super.copyEffective(stmt, original);
-        }
+        return EffectiveStatements.copyList(original, stmt.getArgument(),
+            computeFlags(stmt, original.effectiveSubstatements()), stmt.original(ListSchemaNode.class));
     }
 
     @Override
@@ -186,15 +176,10 @@ public final class ListStatementSupport
         EffectiveStmtUtils.checkUniqueTypedefs(stmt, substatements);
         EffectiveStmtUtils.checkUniqueUses(stmt, substatements);
 
-        final Optional<ElementCountConstraint> elementCountConstraint =
-            EffectiveStmtUtils.createElementCountConstraint(substatements);
-        final QName qname = stmt.getArgument();
-        final ListSchemaNode original = stmt.original(ListSchemaNode.class);
         try {
-            return original == null && !elementCountConstraint.isPresent()
-                ? new EmptyListEffectiveStatement(stmt.declared(), qname, flags, substatements, keyDefinition)
-                    : new RegularListEffectiveStatement(stmt.declared(), qname, flags, substatements, keyDefinition,
-                        elementCountConstraint.orElse(null), original);
+            return EffectiveStatements.createList(stmt.declared(), stmt.getArgument(), flags, substatements,
+                keyDefinition, EffectiveStmtUtils.createElementCountConstraint(substatements).orElse(null),
+                stmt.original(ListSchemaNode.class));
         } catch (SubstatementIndexingException e) {
             throw new SourceException(e.getMessage(), stmt, e);
         }