Migrate Must/WhenStatementSupport to BaseStatementSupport 23/90823/9
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 30 Jun 2020 11:19:35 +0000 (13:19 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 1 Jul 2020 17:05:44 +0000 (19:05 +0200)
This allows us to reduce the footprint of individual declared
and effective instances.

JIRA: YANGTOOLS-1065
Change-Id: I6a5dcba7fdbb2a6cdeba54c99627a41423683e05
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 files changed:
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MustEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/MustStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/WhenEffectiveStatement.java
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/WhenStatement.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/EffectiveStatementMixins.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/EmptyMustEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/EmptyMustStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementImpl.java with 60% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustDefinitionMixin.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustEffectiveStatementImpl.java [deleted file]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/EmptyWhenEffectiveStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenEffectiveStatementImpl.java with 55% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/EmptyWhenStatement.java [moved from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementImpl.java with 60% similarity]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenEffectiveStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenStatement.java [new file with mode: 0644]
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/WhenStatementSupport.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/GroupingTest.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YangParserSimpleTest.java

index 2f1d281cb7fd4290564fb2f34aea862c2cf35e6a..1f3e2b0ba9e0bc8b68c5ba97e6073c60850c43f0 100644 (file)
@@ -9,9 +9,14 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
 public interface MustEffectiveStatement extends EffectiveStatement<RevisionAwareXPath, MustStatement> {
-
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MUST;
+    }
 }
index 50d91ed0a68438e6d67d23df13bff8006b7a8b53..0551680047ef2b5b65c8126546b2bc811f530d50 100644 (file)
@@ -11,8 +11,15 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface MustStatement extends ConstrainedDocumentedDeclaredStatement<RevisionAwareXPath> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.MUST;
+    }
+
     default @NonNull RevisionAwareXPath getCondition() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
index c37fb34bf7db64b1d1d6e578a62a14b7b61ed226..5c9bf1cda97d37c58485c60ed806426b5e0a7152 100644 (file)
@@ -9,9 +9,14 @@ package org.opendaylight.yangtools.yang.model.api.stmt;
 
 import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 @Beta
 public interface WhenEffectiveStatement extends EffectiveStatement<RevisionAwareXPath, WhenStatement> {
-
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.WHEN;
+    }
 }
index ac8d6fffa50096aafb42e5c949124027b3d47c5a..0f4d476d8cd67be3900d5e94ef4aa7746b76e792 100644 (file)
@@ -11,8 +11,15 @@ import static com.google.common.base.Verify.verifyNotNull;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 
 public interface WhenStatement extends DocumentedDeclaredStatement<RevisionAwareXPath> {
+    @Override
+    default StatementDefinition statementDefinition() {
+        return YangStmtMapping.WHEN;
+    }
+
     default @NonNull RevisionAwareXPath getCondition() {
         // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here
         return verifyNotNull(argument());
index 34bf5f52dd42644ad94b8d7dd649a585ac5f25c3..fef94246002d95821d20a3164d0bb1551b72cde5 100644 (file)
@@ -24,6 +24,7 @@ import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.AddedByUsesAware;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
+import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition;
 import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.CopyableNode;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
@@ -47,6 +48,8 @@ import org.opendaylight.yangtools.yang.model.api.WhenConditionAware;
 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.DescriptionEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
@@ -242,6 +245,25 @@ public final class EffectiveStatementMixins {
         }
     }
 
+    /**
+     * Bridge between {@link EffectiveStatementWithFlags} and {@link ConstraintMetaDefinition}.
+     *
+     * @param <A> Argument type ({@link Void} if statement does not have argument.)
+     * @param <D> Class representing declared version of this statement.
+     */
+    public interface ConstraintMetaDefinitionMixin<A, D extends DeclaredStatement<A>> extends DocumentedNodeMixin<A, D>,
+            ConstraintMetaDefinition {
+        @Override
+        default Optional<String> getErrorAppTag() {
+            return findFirstEffectiveSubstatementArgument(ErrorAppTagEffectiveStatement.class);
+        }
+
+        @Override
+        default Optional<String> getErrorMessage() {
+            return findFirstEffectiveSubstatementArgument(ErrorMessageEffectiveStatement.class);
+        }
+    }
+
     /**
      * Bridge between {@link EffectiveStatementWithFlags} and {@link MandatoryAware}.
      *
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/EmptyMustEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/EmptyMustEffectiveStatement.java
new file mode 100644 (file)
index 0000000..07468ef
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * 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.must;
+
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
+
+final class EmptyMustEffectiveStatement extends DefaultArgument<RevisionAwareXPath, MustStatement>
+        implements MustDefinitionMixin {
+    EmptyMustEffectiveStatement(final MustStatement declared) {
+        super(declared);
+    }
+
+    // FIXME: 6.0.0: remove this method
+    @Override
+    public String toString() {
+        return argument().getOriginalString();
+    }
+}
@@ -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,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.must;
 
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class MustStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements MustStatement {
-    MustStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> context) {
+final class EmptyMustStatement extends WithArgument<RevisionAwareXPath> implements MustStatement {
+    EmptyMustStatement(final StmtContext<RevisionAwareXPath, ?, ?> context) {
         super(context);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustDefinitionMixin.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustDefinitionMixin.java
new file mode 100644 (file)
index 0000000..c3e52ce
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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.must;
+
+import org.opendaylight.yangtools.yang.model.api.MustDefinition;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.stmt.MustEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin;
+
+interface MustDefinitionMixin extends MustDefinition, ConstraintMetaDefinitionMixin<RevisionAwareXPath, MustStatement>,
+        MustEffectiveStatement {
+    @Override
+    default RevisionAwareXPath getXpath() {
+        return argument();
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/MustEffectiveStatementImpl.java
deleted file mode 100644 (file)
index abbe9c4..0000000
+++ /dev/null
@@ -1,69 +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.must;
-
-import java.util.Optional;
-import org.opendaylight.yangtools.yang.model.api.MustDefinition;
-import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
-import org.opendaylight.yangtools.yang.model.api.stmt.DescriptionEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ErrorAppTagEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ErrorMessageEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MustEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ReferenceEffectiveStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
-
-final class MustEffectiveStatementImpl extends DeclaredEffectiveStatementBase<RevisionAwareXPath, MustStatement>
-        implements MustDefinition, MustEffectiveStatement {
-
-    private final RevisionAwareXPath xpath;
-    private final String description;
-    private final String errorAppTag;
-    private final String errorMessage;
-    private final String reference;
-
-    MustEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
-        super(ctx);
-        xpath = ctx.getStatementArgument();
-        description = findFirstEffectiveSubstatementArgument(DescriptionEffectiveStatement.class).orElse(null);
-        errorAppTag = findFirstEffectiveSubstatementArgument(ErrorAppTagEffectiveStatement.class).orElse(null);
-        errorMessage = findFirstEffectiveSubstatementArgument(ErrorMessageEffectiveStatement.class).orElse(null);
-        reference = findFirstEffectiveSubstatementArgument(ReferenceEffectiveStatement.class).orElse(null);
-    }
-
-    @Override
-    public RevisionAwareXPath getXpath() {
-        return xpath;
-    }
-
-    @Override
-    public Optional<String> getDescription() {
-        return Optional.ofNullable(description);
-    }
-
-    @Override
-    public Optional<String> getErrorAppTag() {
-        return Optional.ofNullable(errorAppTag);
-    }
-
-    @Override
-    public Optional<String> getErrorMessage() {
-        return Optional.ofNullable(errorMessage);
-    }
-
-    @Override
-    public Optional<String> getReference() {
-        return Optional.ofNullable(reference);
-    }
-
-    @Override
-    public String toString() {
-        return xpath.getOriginalString();
-    }
-}
index 8ce4e2cd193dad9143f4daa2a9468360aa2464e1..418a19ef31a6803efc8a02933d427cea2e7c719d 100644 (file)
@@ -9,18 +9,21 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.must;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 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.MustEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class MustStatementSupport
-        extends AbstractStatementSupport<RevisionAwareXPath, MustStatement, MustEffectiveStatement> {
+        extends BaseStatementSupport<RevisionAwareXPath, MustStatement, MustEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping
         .MUST)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -46,18 +49,32 @@ public final class MustStatementSupport
     }
 
     @Override
-    public MustStatement createDeclared(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
-        return new MustStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public MustEffectiveStatement createEffective(
-            final StmtContext<RevisionAwareXPath, MustStatement, MustEffectiveStatement> ctx) {
-        return new MustEffectiveStatementImpl(ctx);
+    protected MustStatement createDeclared(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularMustStatement(ctx, substatements);
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected MustStatement createEmptyDeclared(final StmtContext<RevisionAwareXPath, MustStatement, ?> ctx) {
+        return new EmptyMustStatement(ctx);
+    }
+
+    @Override
+    protected MustEffectiveStatement createEffective(
+            final StmtContext<RevisionAwareXPath, MustStatement, MustEffectiveStatement> ctx,
+            final MustStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularMustEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected MustEffectiveStatement createEmptyEffective(
+            final StmtContext<RevisionAwareXPath, MustStatement, MustEffectiveStatement> ctx,
+            final MustStatement declared) {
+        return new EmptyMustEffectiveStatement(declared);
     }
 }
\ No newline at end of file
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustEffectiveStatement.java
new file mode 100644 (file)
index 0000000..65c2c9e
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * 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.must;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+
+final class RegularMustEffectiveStatement extends WithSubstatements<RevisionAwareXPath, MustStatement>
+        implements MustDefinitionMixin {
+    RegularMustEffectiveStatement(final MustStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(declared, substatements);
+    }
+
+    // FIXME: 6.0.0: remove this method
+    @Override
+    public String toString() {
+        return argument().getOriginalString();
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/must/RegularMustStatement.java
new file mode 100644 (file)
index 0000000..aa05ade
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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.must;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.MustStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularMustStatement extends WithSubstatements<RevisionAwareXPath> implements MustStatement {
+    RegularMustStatement(final StmtContext<RevisionAwareXPath, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, 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,
@@ -10,12 +10,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.DeclaredEffectiveStatementBase;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument;
 
-final class WhenEffectiveStatementImpl extends DeclaredEffectiveStatementBase<RevisionAwareXPath, WhenStatement>
+final class EmptyWhenEffectiveStatement extends DefaultArgument<RevisionAwareXPath, WhenStatement>
         implements WhenEffectiveStatement {
-    WhenEffectiveStatementImpl(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
-        super(ctx);
+    EmptyWhenEffectiveStatement(final WhenStatement declared) {
+        super(declared);
     }
-}
\ No newline at end of file
+}
@@ -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,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when;
 
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 
-final class WhenStatementImpl extends AbstractDeclaredStatement<RevisionAwareXPath> implements WhenStatement {
-    WhenStatementImpl(final StmtContext<RevisionAwareXPath, WhenStatement, ?> context) {
+final class EmptyWhenStatement extends WithArgument<RevisionAwareXPath> implements WhenStatement {
+    EmptyWhenStatement(final StmtContext<RevisionAwareXPath, ?, ?> context) {
         super(context);
     }
 }
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenEffectiveStatement.java
new file mode 100644 (file)
index 0000000..d469d30
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * 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.when;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.WhenEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements;
+
+final class RegularWhenEffectiveStatement extends WithSubstatements<RevisionAwareXPath, WhenStatement>
+        implements WhenEffectiveStatement {
+    RegularWhenEffectiveStatement(final WhenStatement declared,
+            final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        super(declared, substatements);
+    }
+}
diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/when/RegularWhenStatement.java
new file mode 100644 (file)
index 0000000..490c22b
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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.when;
+
+import com.google.common.collect.ImmutableList;
+import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
+import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+
+final class RegularWhenStatement extends WithSubstatements<RevisionAwareXPath> implements WhenStatement {
+    RegularWhenStatement(final StmtContext<RevisionAwareXPath, ?, ?> context,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        super(context, substatements);
+    }
+}
index 060a4665ca753c2e9775b08e6172bfc1c80c1ae8..a0e0771336324079b62733d9ee76e5e268bde2b0 100644 (file)
@@ -9,18 +9,21 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.when;
 
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.collect.ImmutableList;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.yang.model.api.RevisionAwareXPath;
 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.WhenEffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.WhenStatement;
+import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport;
 import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.XPathSupport;
-import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class WhenStatementSupport
-        extends AbstractStatementSupport<RevisionAwareXPath, WhenStatement, WhenEffectiveStatement> {
+        extends BaseStatementSupport<RevisionAwareXPath, WhenStatement, WhenEffectiveStatement> {
     private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(
         YangStmtMapping.WHEN)
         .addOptional(YangStmtMapping.DESCRIPTION)
@@ -44,18 +47,32 @@ public final class WhenStatementSupport
     }
 
     @Override
-    public WhenStatement createDeclared(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
-        return new WhenStatementImpl(ctx);
+    protected SubstatementValidator getSubstatementValidator() {
+        return SUBSTATEMENT_VALIDATOR;
     }
 
     @Override
-    public WhenEffectiveStatement createEffective(
-            final StmtContext<RevisionAwareXPath, WhenStatement, WhenEffectiveStatement> ctx) {
-        return new WhenEffectiveStatementImpl(ctx);
+    protected WhenStatement createDeclared(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx,
+            final ImmutableList<? extends DeclaredStatement<?>> substatements) {
+        return new RegularWhenStatement(ctx, substatements);
     }
 
     @Override
-    protected SubstatementValidator getSubstatementValidator() {
-        return SUBSTATEMENT_VALIDATOR;
+    protected WhenStatement createEmptyDeclared(final StmtContext<RevisionAwareXPath, WhenStatement, ?> ctx) {
+        return new EmptyWhenStatement(ctx);
+    }
+
+    @Override
+    protected WhenEffectiveStatement createEffective(
+            final StmtContext<RevisionAwareXPath, WhenStatement, WhenEffectiveStatement> ctx,
+            final WhenStatement declared, final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+        return new RegularWhenEffectiveStatement(declared, substatements);
+    }
+
+    @Override
+    protected WhenEffectiveStatement createEmptyEffective(
+            final StmtContext<RevisionAwareXPath, WhenStatement, WhenEffectiveStatement> ctx,
+            final WhenStatement declared) {
+        return new EmptyWhenEffectiveStatement(declared);
     }
-}
\ No newline at end of file
+}
index f760260837de6e9c7b0f319d9be5a4b89411a126..4867dc7285f3318c483bebb83612da3aa7b4e648 100644 (file)
@@ -106,7 +106,8 @@ public class GroupingTest {
         final Collection<? extends MustDefinition> leafMustConstraints = refineLeaf.getMustConstraints();
         assertEquals(1, leafMustConstraints.size());
         final MustDefinition leafMust = leafMustConstraints.iterator().next();
-        assertEquals("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)", leafMust.toString());
+        assertEquals("ifType != 'ethernet' or (ifType = 'ethernet' and ifMTU = 1500)",
+            leafMust.getXpath().getOriginalString());
         assertEquals(1, refineLeaf.getUnknownSchemaNodes().size());
 
         // container port
index e8159ab1c4d37a44d30f5a4e92f4e995a5e37b4e..6be0a73062a9cbb99241f11a136293395f367254 100644 (file)
@@ -82,10 +82,10 @@ public class YangParserSimpleTest {
         boolean found1 = false;
         boolean found2 = false;
         for (final MustDefinition must : mustConstraints) {
-            if (must1.equals(must.toString())) {
+            if (must1.equals(must.getXpath().getOriginalString())) {
                 found1 = true;
                 assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
-            } else if (must2.equals(must.toString())) {
+            } else if (must2.equals(must.getXpath().getOriginalString())) {
                 found2 = true;
                 assertEquals(Optional.of("An atm MTU must be  64 .. 17966"), must.getErrorMessage());
                 assertEquals(Optional.of("anyxml data error-app-tag"), must.getErrorAppTag());
@@ -129,10 +129,10 @@ public class YangParserSimpleTest {
         boolean found1 = false;
         boolean found2 = false;
         for (final MustDefinition must : mustConstraints) {
-            if (must1.equals(must.toString())) {
+            if (must1.equals(must.getXpath().getOriginalString())) {
                 found1 = true;
                 assertEquals(Optional.of("An ethernet MTU must be 1500"), must.getErrorMessage());
-            } else if (must2.equals(must.toString())) {
+            } else if (must2.equals(must.getXpath().getOriginalString())) {
                 found2 = true;
                 assertEquals(Optional.of("An atm MTU must be  64 .. 17966"), must.getErrorMessage());
                 assertEquals(Optional.of("anydata data error-app-tag"), must.getErrorAppTag());
@@ -171,10 +171,10 @@ public class YangParserSimpleTest {
         boolean found1 = false;
         boolean found2 = false;
         for (final MustDefinition must : mustConstraints) {
-            if (must1.equals(must.toString())) {
+            if (must1.equals(must.getXpath().getOriginalString())) {
                 found1 = true;
                 assertEquals(Optional.of(errMsg1), must.getErrorMessage());
-            } else if (must2.equals(must.toString())) {
+            } else if (must2.equals(must.getXpath().getOriginalString())) {
                 found2 = true;
                 assertFalse(must.getErrorMessage().isPresent());
                 assertFalse(must.getErrorAppTag().isPresent());