From 839be3d1515bec2df8d79824869ef469d9f4ffa5 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 8 Dec 2020 12:33:38 +0100 Subject: [PATCH] Merge GroupingStatementSupport The two subclasses differ only in validator, merge them together, reducing the number of classes we have. Change-Id: I97dd358a284d3105538bfd324c30abc82ca17501 Signed-off-by: Robert Varga --- .../rfc7950/reactor/RFC7950Reactors.java | 7 +- .../GroupingStatementRFC6020Support.java | 43 ------------ .../GroupingStatementRFC7950Support.java | 51 -------------- ...ort.java => GroupingStatementSupport.java} | 68 +++++++++++++++++-- 4 files changed, 65 insertions(+), 104 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/{AbstractGroupingStatementSupport.java => GroupingStatementSupport.java} (64%) 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 55c14d7a4d..a01429fec9 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 @@ -46,8 +46,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.error_message.ErrorMe import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.extension.ExtensionStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.feature.FeatureStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.fraction_digits.FractionDigitsStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping.GroupingStatementRFC6020Support; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping.GroupingStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping.GroupingStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.identity.IdentityStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementRFC6020Support; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.if_feature.IfFeatureStatementRFC7950Support; @@ -240,8 +239,8 @@ public final class RFC7950Reactors { .addSupport(KeyStatementSupport.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, GroupingStatementSupport.rfc6020Instance()) + .addVersionSpecificSupport(VERSION_1_1, GroupingStatementSupport.rfc7950Instance()) .addVersionSpecificSupport(VERSION_1, ListStatementRFC6020Support.getInstance()) .addVersionSpecificSupport(VERSION_1_1, ListStatementRFC7950Support.getInstance()) .addSupport(ConfigListWarningNamespace.BEHAVIOUR) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.java deleted file mode 100644 index d19b01908b..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC6020Support.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.grouping; - -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -public final class GroupingStatementRFC6020Support extends AbstractGroupingStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .GROUPING) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - private static final GroupingStatementRFC6020Support INSTANCE = new GroupingStatementRFC6020Support(); - - private GroupingStatementRFC6020Support() { - // Hidden - } - - public static GroupingStatementRFC6020Support 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/grouping/GroupingStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java deleted file mode 100644 index ce3a2a5868..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementRFC7950Support.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2015 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.grouping; - -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 Grouping statement. - */ -@Beta -public final class GroupingStatementRFC7950Support extends AbstractGroupingStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .GROUPING) - .addAny(YangStmtMapping.ACTION) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.CHOICE) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.REFERENCE) - .addOptional(YangStmtMapping.STATUS) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .build(); - private static final GroupingStatementRFC7950Support INSTANCE = new GroupingStatementRFC7950Support(); - - private GroupingStatementRFC7950Support() { - // Hidden - } - - public static GroupingStatementRFC7950Support 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/grouping/AbstractGroupingStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementSupport.java similarity index 64% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementSupport.java index b36fa07f24..2e88eec31c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/AbstractGroupingStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/grouping/GroupingStatementSupport.java @@ -7,8 +7,12 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.grouping; +import static java.util.Objects.requireNonNull; + +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import java.util.Collection; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; @@ -27,21 +31,68 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase; 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.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -abstract class AbstractGroupingStatementSupport +@Beta +public final class GroupingStatementSupport extends BaseQNameStatementSupport { - AbstractGroupingStatementSupport() { + private static final @NonNull GroupingStatementSupport RFC6020_INSTANCE = new GroupingStatementSupport( + SubstatementValidator.builder(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build()); + private static final @NonNull GroupingStatementSupport RFC7950_INSTANCE = new GroupingStatementSupport( + SubstatementValidator.builder(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.ACTION) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.CHOICE) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.REFERENCE) + .addOptional(YangStmtMapping.STATUS) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .build()); + + private final SubstatementValidator validator; + + GroupingStatementSupport(final SubstatementValidator validator) { super(YangStmtMapping.GROUPING, CopyPolicy.DECLARED_COPY); + this.validator = requireNonNull(validator); + } + + public static @NonNull GroupingStatementSupport rfc6020Instance() { + return RFC6020_INSTANCE; + } + + public static @NonNull GroupingStatementSupport rfc7950Instance() { + return RFC7950_INSTANCE; } @Override - public final QName parseArgumentValue(final StmtContext ctx, final String value) { + public QName parseArgumentValue(final StmtContext ctx, final String value) { return StmtContextUtils.parseIdentifier(ctx, value); } @Override - public final void onFullDefinitionDeclared( + public void onFullDefinitionDeclared( final Mutable stmt) { super.onFullDefinitionDeclared(stmt); @@ -75,13 +126,18 @@ abstract class AbstractGroupingStatementSupport } @Override - protected final GroupingStatement createDeclared(final StmtContext ctx, + protected SubstatementValidator getSubstatementValidator() { + return validator; + } + + @Override + protected GroupingStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { return new RegularGroupingStatement(ctx.getArgument(), substatements); } @Override - protected final GroupingStatement createEmptyDeclared(final StmtContext ctx) { + protected GroupingStatement createEmptyDeclared(final StmtContext ctx) { return new EmptyGroupingStatement(ctx.getArgument()); } -- 2.36.6