From 90e42a2661328568a667dc3000b071a478868499 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Fri, 27 Nov 2020 04:31:37 +0100 Subject: [PATCH] Refactor AbstractAugmentStatementSupport.copyFromSourceToTarget() 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 --- .../AbstractAugmentStatementSupport.java | 22 ++++--------------- .../AugmentStatementRFC6020Support.java | 6 +++++ .../AugmentStatementRFC7950Support.java | 6 +++++ 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java index 3cf5ed2a3c..f94f7b2f19 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AbstractAugmentStatementSupport.java @@ -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> 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); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java index d411e43d12..f787c726ad 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC6020Support.java @@ -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 diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java index 28edb69c01..d59f18c42b 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/augment/AugmentStatementRFC7950Support.java @@ -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); + } } -- 2.36.6