Refactor AbstractAugmentStatementSupport.copyFromSourceToTarget() 48/93948/2
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 27 Nov 2020 03:31:37 +0000 (04:31 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 27 Nov 2020 03:35:35 +0000 (04:35 +0100)
We already have per-version supports, hence can easily specialize
handling of mandatory/when statements. Introduce an abstract
method to facilitate this -- allowing us to remove an explicit
check for yang-version.

Change-Id: Id8cbcd085c851606ac1bfbbb26e771f778edfbdf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java

index 3cf5ed2a3c6724e043cc7fb68d4b0a5df18798b4..f94f7b2f19222e69f1918473326af98b1146b814 100644 (file)
@@ -20,7 +20,6 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.regex.Pattern;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.common.YangVersion;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.Status;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
@@ -197,7 +196,7 @@ abstract class AbstractAugmentStatementSupport
         return parent;
     }
 
-    static void copyFromSourceToTarget(final StatementContextBase<?, ?, ?> sourceCtx,
+    final void copyFromSourceToTarget(final StatementContextBase<?, ?, ?> sourceCtx,
             final StatementContextBase<?, ?, ?> targetCtx) {
         final CopyType typeOfCopy = sourceCtx.coerceParentContext().producesDeclared(UsesStatement.class)
                 ? CopyType.ADDED_BY_USES_AUGMENTATION : CopyType.ADDED_BY_AUGMENTATION;
@@ -205,8 +204,7 @@ abstract class AbstractAugmentStatementSupport
          * Since Yang 1.1, if an augmentation is made conditional with a
          * "when" statement, it is allowed to add mandatory nodes.
          */
-        final boolean skipCheckOfMandatoryNodes = YangVersion.VERSION_1_1.equals(sourceCtx.getRootVersion())
-                && isConditionalAugmentStmt(sourceCtx);
+        final boolean skipCheckOfMandatoryNodes = allowsMandatory(sourceCtx);
         final boolean unsupported = !sourceCtx.isSupportedByFeatures();
 
         final Collection<? extends Mutable<?, ?, ?>> declared = sourceCtx.mutableDeclaredSubstatements();
@@ -224,21 +222,9 @@ abstract class AbstractAugmentStatementSupport
         targetCtx.addEffectiveSubstatements(buffer);
     }
 
-    /**
-     * Checks whether supplied statement context is conditional augment
-     * statement.
-     *
-     * @param ctx
-     *            statement context to be checked
-     *
-     * @return true if supplied statement context is conditional augment
-     *         statement, otherwise false
-     */
-    private static boolean isConditionalAugmentStmt(final StmtContext<?, ?, ?> ctx) {
-        return ctx.getPublicDefinition() == YangStmtMapping.AUGMENT && hasWhenSubstatement(ctx);
-    }
+    abstract boolean allowsMandatory(StmtContext<?, ?, ?> ctx);
 
-    private static boolean hasWhenSubstatement(final StmtContext<?, ?, ?> ctx) {
+    static boolean hasWhenSubstatement(final StmtContext<?, ?, ?> ctx) {
         return ctx.hasSubstatement(WhenEffectiveStatement.class);
     }
 
index d411e43d1227d5ba3f5f6b7d8bc65f5ed00622cc..f787c726adee82babad79c36b651ab64125af212 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 public final class AugmentStatementRFC6020Support extends AbstractAugmentStatementSupport {
@@ -41,4 +42,9 @@ public final class AugmentStatementRFC6020Support extends AbstractAugmentStateme
     protected SubstatementValidator getSubstatementValidator() {
         return SUBSTATEMENT_VALIDATOR;
     }
+
+    @Override
+    boolean allowsMandatory(final StmtContext<?, ?, ?> ctx) {
+        return false;
+    }
 }
\ No newline at end of file
index 28edb69c01e9b22d94920d9c393f91d08776e75e..d59f18c42b35cef5f7c30a83fb235ff08c459c50 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.augment;
 
 import com.google.common.annotations.Beta;
 import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
 
 /**
@@ -49,4 +50,9 @@ public final class AugmentStatementRFC7950Support extends AbstractAugmentStateme
     protected SubstatementValidator getSubstatementValidator() {
         return SUBSTATEMENT_VALIDATOR;
     }
+
+    @Override
+    boolean allowsMandatory(final StmtContext<?, ?, ?> ctx) {
+        return ctx.getPublicDefinition() == YangStmtMapping.AUGMENT && hasWhenSubstatement(ctx);
+    }
 }