Migrate QName-based declared statements 65/87265/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 29 Jan 2020 12:24:58 +0000 (13:24 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 30 Jan 2020 12:07:22 +0000 (13:07 +0100)
container/leaf-list/list/leaf statements have had their effective
statements migrated, now extend that refactor to cover their
declared statements, too.

This has a side-effect of making substatement order accurately
reflect original declaration order -- thus requiring a mild update
to yang-model-export test expectations.

JIRA: YANGTOOLS-1065
Change-Id: I10d0f7254dcf9af3412cc4abeeba9dfb758b44ab
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
21 files changed:
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ContainerStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LeafListStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/LeafStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/ListStatement.java
yang/yang-model-export/src/test/resources/schema-context-emitter-test/foo@2016-08-05.yin
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractDeclaredStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/BaseQNameStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/EmptyContainerStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/RegularContainerStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/EmptyLeafStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementImpl.java with 50% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/LeafStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/RegularLeafStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/EmptyListStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementImpl.java with 50% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListStatement.java [new file with mode: 0644]

index 45ab6ac149596d679942e3e799db2d3442f81ceb..9c43fbfd9980a0f1fd9b768ea1da5ebb65b84ccb 100644 (file)
@@ -10,11 +10,18 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface ContainerStatement extends DataDefinitionStatement,
         DataDefinitionAwareDeclaredStatement.WithReusableDefinitions<QName>,
         ActionStatementAwareDeclaredStatement<QName>, ConfigStatementAwareDeclaredStatement<QName>,
         NotificationStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.CONTAINER;
+    }
+
     default @Nullable PresenceStatement getPresence() {
         final Optional<PresenceStatement> opt = findFirstDeclaredSubstatement(PresenceStatement.class);
         return opt.isPresent() ? opt.get() : null;
index dabe9aeeb8a18b5a0606f0ee586cca932b8c52e3..a7d9c25958cf94a2740678e1a3a0a2b27593d44c 100644 (file)
@@ -10,9 +10,16 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 import java.util.Collection;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface LeafListStatement extends MultipleElementsDeclaredStatement, TypeAwareDeclaredStatement,
         ConfigStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.LEAF_LIST;
+    }
+
     /**
      * Return default statements defined in this leaf-list. For RFC6020 semantics, this method returns an empty
      * collection.
index ee20d074a97cdacbc1ac3f4501342d90614a6992..a84fdb8382e608eeced397baf5f8aa057ffd6ce4 100644 (file)
@@ -8,9 +8,14 @@
 package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface LeafStatement extends DataDefinitionStatement, TypeAwareDeclaredStatement,
         ConfigStatementAwareDeclaredStatement<QName>, DefaultStatementAwareDeclaredStatement,
         MandatoryStatementAwareDeclaredStatement<QName>, MustStatementAwareDeclaredStatement<QName> {
-
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.LEAF;
+    }
 }
index dfbe8dcb49d02a76c1af27e730fdad79bf7cffd8..77e2542e4e91d30bae390fc2dcd0fcb23b99d827 100644 (file)
@@ -12,11 +12,18 @@ import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface ListStatement extends MultipleElementsDeclaredStatement,
         DataDefinitionAwareDeclaredStatement.WithReusableDefinitions<QName>,
         ConfigStatementAwareDeclaredStatement<QName>, ActionStatementAwareDeclaredStatement<QName>,
         MustStatementAwareDeclaredStatement<QName>, NotificationStatementAwareDeclaredStatement<QName> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.LIST;
+    }
+
     default @Nullable KeyStatement getKey() {
         final Optional<KeyStatement> opt = findFirstDeclaredSubstatement(KeyStatement.class);
         return opt.isPresent() ? opt.get() : null;
index 6464ee46793a7924934ed21d1411ef57d1524019..57653ab0f7b1eca2bc17119f0d810110b1edb868 100644 (file)
@@ -1,12 +1,10 @@
 <module xmlns="urn:ietf:params:xml:ns:yang:yin:1"
     xmlns:foo-prefix="foo-namespace" name="foo">
-    <namespace uri="foo-namespace"></namespace>
-    <prefix value="foo-prefix"></prefix>
-    <revision date="2016-08-05"></revision>
-    <extension name="test-extension">
-    </extension>
+    <namespace uri="foo-namespace"/>
+    <prefix value="foo-prefix"/>
+    <revision date="2016-08-05"/>
     <feature name="test-feature">
-        <status value="current"></status>
+        <status value="current"/>
         <description>
             <text>test-feature description</text>
         </description>
             <text>test-feature reference</text>
         </reference>
     </feature>
-    <identity name="test-identity">
-        <base name="test-base-identity"></base>
-        <status value="current"></status>
-        <description>
-            <text>test-identity description</text>
-        </description>
-        <reference>
-            <text>test-identity reference</text>
-        </reference>
-    </identity>
-    <identity name="test-base-identity">
-    </identity>
     <typedef name="test-uint32-typedef">
         <type name="uint32">
-            <range value="50..100">
-            </range>
+            <range value="50..100"/>
         </type>
         <units name="seconds"></units>
     </typedef>
     <typedef name="test-int32-typedef">
         <type name="int32">
-            <range value="50..100">
-            </range>
+            <range value="50..100"/>
         </type>
     </typedef>
     <typedef name="test-leafref-typedef">
         <type name="leafref">
-            <path value="../leafref-target-leaf"></path>
+            <path value="../leafref-target-leaf"/>
         </type>
     </typedef>
     <typedef name="test-iid-typedef">
             <require-instance value="false"></require-instance>
         </type>
     </typedef>
-    <grouping name="test-grouping-1">
-        <leaf name="test-leaf-1">
-            <type name="string"></type>
-            <default value="def-val"></default>
-        </leaf>
-        <leaf-list name="test-leaf-list">
-            <type name="string"></type>
-            <config value="false"></config>
-            <ordered-by value="user"></ordered-by>
-        </leaf-list>
-        <list name="test-list">
-            <key value="key-leaf-1 key-leaf-2"></key>
-            <min-elements value="5"></min-elements>
-            <leaf name="key-leaf-1">
-                <type name="string"></type>
+    <identity name="test-base-identity"/>
+    <identity name="test-identity">
+        <base name="test-base-identity"/>
+        <status value="current"/>
+        <description>
+            <text>test-identity description</text>
+        </description>
+        <reference>
+            <text>test-identity reference</text>
+        </reference>
+    </identity>
+    <extension name="test-extension"/>
+    <rpc name="test-rpc">
+        <input>
+            <leaf name="input-leaf">
+                <type name="string"/>
             </leaf>
-            <leaf name="key-leaf-2">
-                <type name="string"></type>
+        </input>
+        <output>
+            <leaf name="output-leaf">
+                <type name="string"/>
             </leaf>
-        </list>
-        <container name="test-container-2">
-            <config value="false"></config>
-        </container>
-    </grouping>
-    <grouping name="test-grouping-2">
-        <anyxml name="test-anyxml-2">
-            <config value="false"></config>
-        </anyxml>
-        <choice name="test-choice-2">
-            <config value="false"></config>
-            <case name="first">
-                <leaf name="first-case-leaf">
-                    <type name="string">
-                        <length value="10..10 | 15">
-                        </length>
-                    </type>
-                </leaf>
-            </case>
-            <case name="second">
-                <leaf name="second-case-leaf">
-                    <type name="int32">
-                        <range value="10..10 | 15">
-                        </range>
-                    </type>
-                </leaf>
-            </case>
-        </choice>
-    </grouping>
+        </output>
+        <grouping name="rpc-grouping">
+            <leaf name="rpc-grouping-leaf">
+                <type name="string"/>
+            </leaf>
+        </grouping>
+    </rpc>
+    <notification name="test-notification">
+        <uses name="test-grouping-2">
+            <refine target-node="test-choice-2">
+                <config value="false"/>
+            </refine>
+            <refine target-node="test-anyxml-2">
+                <config value="false"/>
+            </refine>
+        </uses>
+    </notification>
     <anyxml name="test-anyxml">
-        <when condition="foo != 'bar'"></when>
-        <must condition="bar != 'foo'"></must>
-        <foo-prefix:test-extension></foo-prefix:test-extension>
+        <when condition="foo != 'bar'"/>
+        <must condition="bar != 'foo'"/>
+        <foo-prefix:test-extension/>
     </anyxml>
     <leaf name="leafref-target-leaf">
-        <type name="string"></type>
+        <type name="string"/>
     </leaf>
     <container name="test-container-1">
-        <must condition="bar != 'foo'"></must>
+        <must condition="bar != 'foo'"/>
     </container>
     <container name="test-container-3">
         <choice name="test-choice">
             <case name="a">
                 <leaf name="case-a-leaf">
-                    <type name="int32"></type>
+                    <type name="int32"/>
                 </leaf>
             </case>
             <case name="b">
                 <leaf name="case-b-leaf">
                     <type name="decimal64">
-                        <fraction-digits value="3"></fraction-digits>
+                        <fraction-digits value="3"/>
                     </type>
                 </leaf>
             </case>
         <leaf name="bits-leaf">
             <type name="bits">
                 <bit name="one">
-                    <position value="1"></position>
+                    <position value="1"/>
                 </bit>
                 <bit name="two">
-                    <position value="2"></position>
+                    <position value="2"/>
                 </bit>
             </type>
         </leaf>
         <leaf name="identityref-leaf">
             <type name="identityref">
-                <base name="test-base-identity"></base>
+                <base name="test-base-identity"/>
             </type>
         </leaf>
     </container>
     <augment target-node="/test-container-3/test-choice">
         <case name="c">
             <leaf name="case-c-leaf">
-                <type name="string"></type>
+                <type name="string"/>
             </leaf>
         </case>
     </augment>
     <augment target-node="/test-container-1">
         <uses name="test-grouping-1">
             <refine target-node="test-list">
-                <min-elements value="5"></min-elements>
+                <min-elements value="5"/>
             </refine>
             <refine target-node="test-leaf-list">
-                <config value="false"></config>
+                <config value="false"/>
             </refine>
             <refine target-node="test-leaf-1">
-                <default value="def-val"></default>
+                <default value="def-val"/>
             </refine>
             <refine target-node="test-container-2">
-                <config value="false"></config>
+                <config value="false"/>
             </refine>
             <augment target-node="test-container-2">
                 <leaf name="test-leaf-2">
-                    <type name="string"></type>
+                    <type name="string"/>
                 </leaf>
             </augment>
         </uses>
     </augment>
-    <rpc name="test-rpc">
-        <grouping name="rpc-grouping">
-            <leaf name="rpc-grouping-leaf">
-                <type name="string"></type>
-            </leaf>
-        </grouping>
-        <input>
-            <leaf name="input-leaf">
-                <type name="string"></type>
+    <grouping name="test-grouping-1">
+        <leaf name="test-leaf-1">
+            <type name="string"/>
+            <default value="def-val"/>
+        </leaf>
+        <leaf-list name="test-leaf-list">
+            <type name="string"/>
+            <config value="false"/>
+            <ordered-by value="user"/>
+        </leaf-list>
+        <list name="test-list">
+            <key value="key-leaf-1 key-leaf-2"/>
+            <min-elements value="5"/>
+            <leaf name="key-leaf-1">
+                <type name="string"/>
             </leaf>
-        </input>
-        <output>
-            <leaf name="output-leaf">
-                <type name="string"></type>
+            <leaf name="key-leaf-2">
+                <type name="string"/>
             </leaf>
-        </output>
-    </rpc>
-    <notification name="test-notification">
-        <uses name="test-grouping-2">
-            <refine target-node="test-choice-2">
-                <config value="false"></config>
-            </refine>
-            <refine target-node="test-anyxml-2">
-                <config value="false"></config>
-            </refine>
-        </uses>
-    </notification>
+        </list>
+        <container name="test-container-2">
+            <config value="false"/>
+        </container>
+    </grouping>
+    <grouping name="test-grouping-2">
+        <anyxml name="test-anyxml-2">
+            <config value="false"/>
+        </anyxml>
+        <choice name="test-choice-2">
+            <config value="false"/>
+            <case name="first">
+                <leaf name="first-case-leaf">
+                    <type name="string">
+                        <length value="10..10 | 15"/>
+                    </type>
+                </leaf>
+            </case>
+            <case name="second">
+                <leaf name="second-case-leaf">
+                    <type name="int32">
+                        <range value="10..10 | 15"/>
+                    </type>
+                </leaf>
+            </case>
+        </choice>
+    </grouping>
 </module>
index 1e7833db51c3811a530cd1e0c93b310169f2a361..666a561b263c3744b73dcd49f9e7b28768ad9694 100644 (file)
@@ -13,6 +13,7 @@ import com.google.common.annotations.Beta;
 import com.google.common.collect.ImmutableList;
 import java.util.Collection;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementSource;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
@@ -65,6 +66,39 @@ public abstract class AbstractDeclaredStatement<A> extends AbstractModelStatemen
         }
     }
 
+    public abstract static class WithQNameArgument extends AbstractDeclaredStatement<QName> {
+        public abstract static class WithSubstatements extends WithQNameArgument {
+            private final @NonNull Object substatements;
+
+            protected WithSubstatements(final QName argument,
+                    final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+                super(argument);
+                this.substatements = maskList(substatements);
+            }
+
+            @Override
+            public final Collection<? extends DeclaredStatement<?>> declaredSubstatements() {
+                return unmaskList(substatements);
+            }
+        }
+
+        private final QName argument;
+
+        protected WithQNameArgument(final QName argument) {
+            this.argument = requireNonNull(argument);
+        }
+
+        @Override
+        public final @NonNull QName argument() {
+            return argument;
+        }
+
+        @Override
+        public final String rawArgument() {
+            return argument.getLocalName();
+        }
+    }
+
     public abstract static class WithRawStringArgument extends WithRawArgument<String> {
         public abstract static class WithSubstatements extends WithRawStringArgument {
             private final @NonNull Object substatements;
index d03945d75f0a1fed8f8ce48fdace836512a9bea1..0ff9cfb4a2e2cd49c29381beab5937deadb0be36 100644 (file)
@@ -31,6 +31,19 @@ public abstract class BaseQNameStatementSupport<D extends DeclaredStatement<QNam
         super(publicDefinition);
     }
 
+    @Override
+    public final D createDeclared(final StmtContext<QName, D, ?> ctx) {
+        final ImmutableList<? extends DeclaredStatement<?>> substatements = ctx.declaredSubstatements().stream()
+                .map(StmtContext::buildDeclared)
+                .collect(ImmutableList.toImmutableList());
+        return substatements.isEmpty() ? createEmptyDeclared(ctx) : createDeclared(ctx, substatements);
+    }
+
+    protected abstract @NonNull D createDeclared(@NonNull StmtContext<QName, D, ?> ctx,
+            @NonNull ImmutableList<? extends DeclaredStatement<?>> substatements);
+
+    protected abstract @NonNull D createEmptyDeclared(@NonNull StmtContext<QName, D, ?> ctx);
+
     @Override
     public final E createEffective(final StmtContext<QName, D, E> ctx) {
         final D declared = ctx.buildDeclared();
index b3081c994d9eb27b40922117237a16afad3fc83c..79afa2b9b6039e01053c6218e1ba45a6faa46a01 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
@@ -43,8 +44,14 @@ abstract class AbstractContainerStatementSupport
     }
 
     @Override
-    public final ContainerStatement createDeclared(final StmtContext<QName, ContainerStatement,?> ctx) {
-        return new ContainerStatementImpl(ctx);
+    protected final ContainerStatement createDeclared(final StmtContext<QName, ContainerStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularContainerStatement(ctx.coerceStatementArgument(), substatements);
+    }
+
+    @Override
+    protected final ContainerStatement createEmptyDeclared(final StmtContext<QName, ContainerStatement, ?> ctx) {
+        return new EmptyContainerStatement(ctx.coerceStatementArgument());
     }
 
     @Override
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementImpl.java
deleted file mode 100644 (file)
index 412079d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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.container;
-
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class ContainerStatementImpl extends AbstractDeclaredStatement<QName> implements ContainerStatement {
-    ContainerStatementImpl(final StmtContext<QName, ContainerStatement,?> context) {
-        super(context);
-    }
-}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/EmptyContainerStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/EmptyContainerStatement.java
new file mode 100644 (file)
index 0000000..fcf3296
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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.container;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
+
+final class EmptyContainerStatement extends WithQNameArgument implements ContainerStatement {
+    EmptyContainerStatement(final QName argument) {
+        super(argument);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/RegularContainerStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/RegularContainerStatement.java
new file mode 100644 (file)
index 0000000..29cf434
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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.container;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+final class RegularContainerStatement extends WithSubstatements implements ContainerStatement {
+    RegularContainerStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -9,11 +9,10 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf;
 
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
 
-final class LeafStatementImpl extends AbstractDeclaredStatement<QName> implements LeafStatement {
-    LeafStatementImpl(final StmtContext<QName, LeafStatement, ?> context) {
-        super(context);
+final class EmptyLeafStatement extends WithQNameArgument implements LeafStatement {
+    EmptyLeafStatement(final QName argument) {
+        super(argument);
     }
 }
index fdc13903d7a422fe87902e4c75e9c08f3b463ef9..48ebde4ffcc0bd618ccd37d11dd5785bc8b514a2 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
@@ -72,13 +73,19 @@ public final class LeafStatementSupport extends BaseQNameStatementSupport<LeafSt
     }
 
     @Override
-    public LeafStatement createDeclared(final StmtContext<QName, LeafStatement, ?> ctx) {
-        return new LeafStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected LeafStatement createDeclared(final StmtContext<QName, LeafStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularLeafStatement(ctx.coerceStatementArgument(), substatements);
+    }
+
+    @Override
+    protected LeafStatement createEmptyDeclared(final StmtContext<QName, LeafStatement, ?> ctx) {
+        return new EmptyLeafStatement(ctx.coerceStatementArgument());
     }
 
     @Override
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/RegularLeafStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf/RegularLeafStatement.java
new file mode 100644 (file)
index 0000000..86b12c6
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LeafStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+final class RegularLeafStatement extends WithSubstatements implements LeafStatement {
+    RegularLeafStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}
index 3d9288ed2988af175b6c69054d5f645c1f3b60c7..91b6caa4f6ed8b5dc136049b9fecbf46fb914ea2 100644 (file)
@@ -16,6 +16,7 @@ import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.DefaultEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
@@ -50,8 +51,14 @@ abstract class AbstractLeafListStatementSupport
     }
 
     @Override
-    public final LeafListStatement createDeclared(final StmtContext<QName, LeafListStatement, ?> ctx) {
-        return new LeafListStatementImpl(ctx);
+    protected final LeafListStatement createDeclared(final StmtContext<QName, LeafListStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularLeafListStatement(ctx.coerceStatementArgument(), substatements);
+    }
+
+    @Override
+    protected final LeafListStatement createEmptyDeclared(final StmtContext<QName, LeafListStatement, ?> ctx) {
+        return new EmptyLeafListStatement(ctx.coerceStatementArgument());
     }
 
     @Override
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/EmptyLeafListStatement.java
new file mode 100644 (file)
index 0000000..bceef66
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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;
+
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
+
+final class EmptyLeafListStatement extends WithQNameArgument implements LeafListStatement {
+    EmptyLeafListStatement(final QName argument) {
+        super(argument);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementImpl.java
deleted file mode 100644 (file)
index 2063141..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * 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;
-
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class LeafListStatementImpl extends AbstractDeclaredStatement<QName> implements LeafListStatement {
-    LeafListStatementImpl(final StmtContext<QName, LeafListStatement, ?> context) {
-        super(context);
-    }
-}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/RegularLeafListStatement.java
new file mode 100644 (file)
index 0000000..ab33e6b
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LeafListStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+final class RegularLeafListStatement extends WithSubstatements implements LeafListStatement {
+    RegularLeafListStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}
index 68f1dcd3efaff0e1d1e35904bd2e2470f62c14dc..4a4df814ef2b9286ac5328f6ed0592a2c633d9c8 100644 (file)
@@ -20,6 +20,7 @@ import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.KeyEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
@@ -58,8 +59,14 @@ abstract class AbstractListStatementSupport extends BaseQNameStatementSupport<Li
     }
 
     @Override
-    public final ListStatement createDeclared(final StmtContext<QName, ListStatement, ?> ctx) {
-        return new ListStatementImpl(ctx);
+    protected ListStatement createDeclared(final StmtContext<QName, ListStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularListStatement(ctx.coerceStatementArgument(), substatements);
+    }
+
+    @Override
+    protected ListStatement createEmptyDeclared(final StmtContext<QName, ListStatement, ?> ctx) {
+        return new EmptyListStatement(ctx.coerceStatementArgument());
     }
 
     @Override
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
@@ -9,11 +9,10 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list;
 
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument;
 
-final class ListStatementImpl extends AbstractDeclaredStatement<QName> implements ListStatement {
-    ListStatementImpl(final StmtContext<QName, ListStatement, ?> context) {
-        super(context);
+final class EmptyListStatement extends WithQNameArgument implements ListStatement {
+    EmptyListStatement(final QName argument) {
+        super(argument);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/RegularListStatement.java
new file mode 100644 (file)
index 0000000..bed73e9
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * 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;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithQNameArgument.WithSubstatements;
+
+final class RegularListStatement extends WithSubstatements implements ListStatement {
+    RegularListStatement(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(argument, substatements);
+    }
+}