From d038469f93315d606212ece427deafdf89ee3552 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 8 Dec 2020 16:02:31 +0100 Subject: [PATCH] Merge ListStatementSupport The two subclasses differ only in their statement validator, merge them together, reducing the number of classes we have. Change-Id: I8c07d438ff20a572f44b4e6498630d125f9054c9 Signed-off-by: Robert Varga --- .../rfc7950/reactor/RFC7950Reactors.java | 7 +- .../list/ListStatementRFC6020Support.java | 52 ------------ .../list/ListStatementRFC7950Support.java | 60 ------------- ...Support.java => ListStatementSupport.java} | 84 +++++++++++++++++-- 4 files changed, 80 insertions(+), 123 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/{AbstractListStatementSupport.java => ListStatementSupport.java} (70%) 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 5249145145..2ea07a015d 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 @@ -57,8 +57,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf.LeafStatementSup import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.length.LengthStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ConfigListWarningNamespace; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementRFC6020Support; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list.ListStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory.MandatoryStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements.MaxElementsStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.min_elements.MinElementsStatementSupport; @@ -232,8 +231,8 @@ public final class RFC7950Reactors { .addVersionSpecificSupport(VERSION_1_1, ContainerStatementSupport.rfc7950Instance()) .addVersionSpecificSupport(VERSION_1, GroupingStatementSupport.rfc6020Instance()) .addVersionSpecificSupport(VERSION_1_1, GroupingStatementSupport.rfc7950Instance()) - .addVersionSpecificSupport(VERSION_1, ListStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, ListStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, ListStatementSupport.rfc6020Instance()) + .addVersionSpecificSupport(VERSION_1_1, ListStatementSupport.rfc7950Instance()) .addSupport(ConfigListWarningNamespace.BEHAVIOUR) .addSupport(UniqueStatementSupport.getInstance()) .addVersionSpecificSupport(VERSION_1_1, ActionStatementSupport.getInstance()) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java deleted file mode 100644 index cced709a2a..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC6020Support.java +++ /dev/null @@ -1,52 +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.list; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -public final class ListStatementRFC6020Support extends AbstractListStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LIST) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.KEY) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.UNIQUE) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final ListStatementRFC6020Support INSTANCE = new ListStatementRFC6020Support(); - - private ListStatementRFC6020Support() { - // Hidden - } - - public static ListStatementRFC6020Support 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/list/ListStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java deleted file mode 100644 index 76d612c973..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementRFC7950Support.java +++ /dev/null @@ -1,60 +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.list; - -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 List statement. - */ -@Beta -public final class ListStatementRFC7950Support extends AbstractListStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LIST) - .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) - .addOptional(YangStmtMapping.KEY) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.UNIQUE) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final ListStatementRFC7950Support INSTANCE = new ListStatementRFC7950Support(); - - private ListStatementRFC7950Support() { - // Hidden - } - - public static ListStatementRFC7950Support 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/list/AbstractListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java similarity index 70% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java index 9fcb7b8c6b..2fa286c3f2 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/AbstractListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/list/ListStatementSupport.java @@ -8,7 +8,9 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.list; import static com.google.common.base.Verify.verify; +import static java.util.Objects.requireNonNull; +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import java.util.ArrayList; @@ -44,30 +46,98 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Parent.E import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext.Mutable; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -abstract class AbstractListStatementSupport extends - BaseSchemaTreeStatementSupport { - - private static final Logger LOG = LoggerFactory.getLogger(AbstractListStatementSupport.class); +@Beta +public final class ListStatementSupport extends BaseSchemaTreeStatementSupport { + private static final Logger LOG = LoggerFactory.getLogger(ListStatementSupport.class); private static final ImmutableSet UNINSTANTIATED_DATATREE_STATEMENTS = ImmutableSet.of( YangStmtMapping.GROUPING, YangStmtMapping.NOTIFICATION, YangStmtMapping.INPUT, YangStmtMapping.OUTPUT); - AbstractListStatementSupport() { + private static final @NonNull ListStatementSupport RFC6020_INSTANCE = new ListStatementSupport( + SubstatementValidator.builder(YangStmtMapping.LIST) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.KEY) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.UNIQUE) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build()); + private static final @NonNull ListStatementSupport RFC7950_INSTANCE = new ListStatementSupport( + SubstatementValidator.builder(YangStmtMapping.LIST) + .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) + .addOptional(YangStmtMapping.KEY) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.UNIQUE) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.WHEN) + .build()); + + private final SubstatementValidator validator; + + ListStatementSupport(final SubstatementValidator validator) { super(YangStmtMapping.LIST, CopyPolicy.DECLARED_COPY); + this.validator = requireNonNull(validator); + } + + public static @NonNull ListStatementSupport rfc6020Instance() { + return RFC6020_INSTANCE; + } + + public static @NonNull ListStatementSupport rfc7950Instance() { + return RFC7950_INSTANCE; + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - protected final ListStatement createDeclared(final StmtContext ctx, + protected ListStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { return new RegularListStatement(ctx.getArgument(), substatements); } @Override - protected final ListStatement createEmptyDeclared(final StmtContext ctx) { + protected ListStatement createEmptyDeclared(final StmtContext ctx) { return new EmptyListStatement(ctx.getArgument()); } -- 2.36.6