From a1fe3aa5e60460de4854aa41a0e4fd6e9937eb44 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 8 Dec 2020 15:05:39 +0100 Subject: [PATCH] Merge LeafListStatementSupport The two subclasses differ only in their implicit input/output, merge them together, reducing the number of classes we have. Change-Id: Icc8d4e4e37fdb013deae11b98d5f9d93d6e0d607 Signed-off-by: Robert Varga --- .../rfc7950/reactor/RFC7950Reactors.java | 7 +-- .../LeafListStatementRFC6020Support.java | 43 ------------- .../LeafListStatementRFC7950Support.java | 47 -------------- ...ort.java => LeafListStatementSupport.java} | 63 +++++++++++++++++-- 4 files changed, 62 insertions(+), 98 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/{AbstractLeafListStatementSupport.java => LeafListStatementSupport.java} (66%) 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 2fb2e8c80a..cb1e6590ae 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 @@ -55,8 +55,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.include.IncludeStatem import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.input.InputStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.key.KeyStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf.LeafStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementRFC6020Support; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list.LeafListStatementRFC7950Support; +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; @@ -368,8 +367,8 @@ public final class RFC7950Reactors { .addSupport(UsesStatementSupport.getInstance()) .addSupport(ErrorMessageStatementSupport.getInstance()) .addSupport(ErrorAppTagStatementSupport.getInstance()) - .addVersionSpecificSupport(VERSION_1, LeafListStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, LeafListStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, LeafListStatementSupport.rfc6020Instance()) + .addVersionSpecificSupport(VERSION_1_1, LeafListStatementSupport.rfc7950Instance()) .addSupport(PresenceStatementSupport.getInstance()) .addSupport(MaxElementsStatementSupport.getInstance()) .addSupport(MinElementsStatementSupport.getInstance()) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java deleted file mode 100644 index dbee6de475..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC6020Support.java +++ /dev/null @@ -1,43 +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.leaf_list; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -public final class LeafListStatementRFC6020Support extends AbstractLeafListStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LEAF_LIST) - .addOptional(YangStmtMapping.CONFIG) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final LeafListStatementRFC6020Support INSTANCE = new LeafListStatementRFC6020Support(); - - private LeafListStatementRFC6020Support() { - // Hidden - } - - public static LeafListStatementRFC6020Support 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/leaf_list/LeafListStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java deleted file mode 100644 index 2c68953bbe..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementRFC7950Support.java +++ /dev/null @@ -1,47 +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.leaf_list; - -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 leaf-list statement. - */ -public final class LeafListStatementRFC7950Support extends AbstractLeafListStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .LEAF_LIST) - .addOptional(YangStmtMapping.CONFIG) - .addAny(YangStmtMapping.DEFAULT) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.IF_FEATURE) - .addOptional(YangStmtMapping.MIN_ELEMENTS) - .addOptional(YangStmtMapping.MAX_ELEMENTS) - .addAny(YangStmtMapping.MUST) - .addOptional(YangStmtMapping.ORDERED_BY) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addMandatory(YangStmtMapping.TYPE) - .addOptional(YangStmtMapping.UNITS) - .addOptional(YangStmtMapping.WHEN) - .build(); - private static final LeafListStatementRFC7950Support INSTANCE = new LeafListStatementRFC7950Support(); - - private LeafListStatementRFC7950Support() { - // Hidden - } - - public static LeafListStatementRFC7950Support 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/leaf_list/AbstractLeafListStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java similarity index 66% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java index 40d6177390..24ab927a29 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/AbstractLeafListStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/leaf_list/LeafListStatementSupport.java @@ -7,9 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.leaf_list; +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.Optional; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Ordering; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ElementCountConstraint; @@ -30,22 +34,73 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMix import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStmtUtils; 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 AbstractLeafListStatementSupport +@Beta +public final class LeafListStatementSupport extends BaseSchemaTreeStatementSupport { - AbstractLeafListStatementSupport() { + private static final @NonNull LeafListStatementSupport RFC6020_INSTANCE = new LeafListStatementSupport( + SubstatementValidator.builder(YangStmtMapping.LEAF_LIST) + .addOptional(YangStmtMapping.CONFIG) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .addOptional(YangStmtMapping.WHEN) + .build()); + private static final @NonNull LeafListStatementSupport RFC7950_INSTANCE = new LeafListStatementSupport( + SubstatementValidator.builder(YangStmtMapping + .LEAF_LIST) + .addOptional(YangStmtMapping.CONFIG) + .addAny(YangStmtMapping.DEFAULT) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.IF_FEATURE) + .addOptional(YangStmtMapping.MIN_ELEMENTS) + .addOptional(YangStmtMapping.MAX_ELEMENTS) + .addAny(YangStmtMapping.MUST) + .addOptional(YangStmtMapping.ORDERED_BY) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addMandatory(YangStmtMapping.TYPE) + .addOptional(YangStmtMapping.UNITS) + .addOptional(YangStmtMapping.WHEN) + .build()); + + private final SubstatementValidator validator; + + private LeafListStatementSupport(final SubstatementValidator validator) { super(YangStmtMapping.LEAF_LIST, CopyPolicy.DECLARED_COPY); + this.validator = requireNonNull(validator); + } + + public static @NonNull LeafListStatementSupport rfc6020Instance() { + return RFC6020_INSTANCE; + } + + public static @NonNull LeafListStatementSupport rfc7950Instance() { + return RFC7950_INSTANCE; + } + + @Override + protected SubstatementValidator getSubstatementValidator() { + return validator; } @Override - protected final LeafListStatement createDeclared(final StmtContext ctx, + protected LeafListStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { return new RegularLeafListStatement(ctx.getArgument(), substatements); } @Override - protected final LeafListStatement createEmptyDeclared(final StmtContext ctx) { + protected LeafListStatement createEmptyDeclared(final StmtContext ctx) { return new EmptyLeafListStatement(ctx.getArgument()); } -- 2.36.6