From b18cafbfacf2878a587eb064847a44b740b0da29 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 8 Dec 2020 11:58:06 +0100 Subject: [PATCH] Merge ContainerStatementSupport The two subclasses differ only in validator, merge them together, reducing the number of classes we have. Change-Id: Ie740c816edcc2454f712f47ce08e658ae9f6739c Signed-off-by: Robert Varga --- .../rfc7950/reactor/RFC7950Reactors.java | 7 +- .../ContainerStatementRFC6020Support.java | 48 ------------ .../ContainerStatementRFC7950Support.java | 56 -------------- ...rt.java => ContainerStatementSupport.java} | 75 ++++++++++++++++++- 4 files changed, 74 insertions(+), 112 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/{AbstractContainerStatementSupport.java => ContainerStatementSupport.java} (52%) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java index 7f171f8358..28f1ffa63c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/reactor/RFC7950Reactors.java @@ -34,8 +34,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.case_.CaseStatementSu import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.choice.ChoiceStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.config.ConfigStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.contact.ContactStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerStatementRFC6020Support; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container.ContainerStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.default_.DefaultStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.description.DescriptionStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.deviate.DeviateStatementRFC6020Support; @@ -240,8 +239,8 @@ public final class RFC7950Reactors { .addVersionSpecificSupport(VERSION_1_1, ModifierStatementSupport.getInstance()) .addSupport(RangeStatementSupport.getInstance()) .addSupport(KeyStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, ContainerStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, ContainerStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, ContainerStatementSupport.rfc6020Instance()) + .addVersionSpecificSupport(VERSION_1_1, ContainerStatementSupport.rfc7950Instance()) .addVersionSpecificSupport(VERSION_1, GroupingStatementRFC6020Support.getInstance()) .addVersionSpecificSupport(VERSION_1_1, GroupingStatementRFC7950Support.getInstance()) .addVersionSpecificSupport(VERSION_1, ListStatementRFC6020Support.getInstance()) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java deleted file mode 100644 index 7d75192b8c..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC6020Support.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2017 Pantheon Technologies, 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.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -public final class ContainerStatementRFC6020Support extends AbstractContainerStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( - YangStmtMapping.CONTAINER) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.PRESENCE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final ContainerStatementRFC6020Support INSTANCE = new ContainerStatementRFC6020Support(); - - private ContainerStatementRFC6020Support() { - // Hidden - } - - public static ContainerStatementRFC6020Support getInstance() { - return INSTANCE; - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } -} \ No newline at end of file diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java deleted file mode 100644 index ad87af8ce1..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementRFC7950Support.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2016 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 com.google.common.annotations.Beta; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -/** - * Class providing necessary support for processing YANG 1.1 Container statement. - */ -@Beta -public final class ContainerStatementRFC7950Support extends AbstractContainerStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .CONTAINER) - .addAny(YangStmtMapping.ACTION) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.PRESENCE) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final ContainerStatementRFC7950Support INSTANCE = new ContainerStatementRFC7950Support(); - - private ContainerStatementRFC7950Support() { - // Hidden - } - - public static ContainerStatementRFC7950Support getInstance() { - return INSTANCE; - } - - @Override - protected SubstatementValidator getSubstatementValidator() { - return SUBSTATEMENT_VALIDATOR; - } -} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java similarity index 52% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java index 463174c58e..e99d65bcb3 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/AbstractContainerStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/container/ContainerStatementSupport.java @@ -7,7 +7,11 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.container; +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaPath; @@ -25,22 +29,85 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.SubstatementIndexingException; import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -abstract class AbstractContainerStatementSupport +@Beta +public final class ContainerStatementSupport extends BaseSchemaTreeStatementSupport { - AbstractContainerStatementSupport() { + private static final @NonNull ContainerStatementSupport RFC6020_INSTANCE = new ContainerStatementSupport( + SubstatementValidator.builder(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.PRESENCE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build()); + + private static final @NonNull ContainerStatementSupport RFC7950_INSTANCE = new ContainerStatementSupport( + SubstatementValidator.builder(YangStmtMapping.CONTAINER) + .addAny(YangStmtMapping.ACTION) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.PRESENCE) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build()); + + private final SubstatementValidator validator; + + private ContainerStatementSupport(final SubstatementValidator validator) { super(YangStmtMapping.CONTAINER, CopyPolicy.DECLARED_COPY); + this.validator = requireNonNull(validator); + } + + public static @NonNull ContainerStatementSupport rfc6020Instance() { + return RFC6020_INSTANCE; + } + + public static @NonNull ContainerStatementSupport rfc7950Instance() { + return RFC7950_INSTANCE; + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - protected final ContainerStatement createDeclared(final StmtContext ctx, + protected ContainerStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { return new RegularContainerStatement(ctx.getArgument(), substatements); } @Override - protected final ContainerStatement createEmptyDeclared(final StmtContext ctx) { + protected ContainerStatement createEmptyDeclared(final StmtContext ctx) { return new EmptyContainerStatement(ctx.getArgument()); } -- 2.36.6