From: Robert Varga Date: Mon, 7 Dec 2020 20:22:43 +0000 (+0100) Subject: Merge ModuleStatementSupport X-Git-Tag: v7.0.0~354 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=cd1130e22cccefec087a94f72235985d52b59733;p=yangtools.git Merge ModuleStatementSupport The two subclasses differ only in validator, merge them into a single one, reducting the number of classes we have. Change-Id: Ia29775058017a9961b2c99c12bd058aaa59a030d Signed-off-by: Robert Varga --- 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 587a2ed227..4a652e6444 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 @@ -75,8 +75,7 @@ import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.mandatory.MandatorySt import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.max_elements.MaxElementsStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.min_elements.MinElementsStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.modifier.ModifierStatementSupport; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementRFC6020Support; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementRFC7950Support; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module.ModuleStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.must.MustStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.namespace.NamespaceStatementSupport; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.notification.NotificationStatementRFC6020Support; @@ -169,8 +168,8 @@ public final class RFC7950Reactors { .build(); private static final StatementSupportBundle PRE_LINKAGE_BUNDLE = StatementSupportBundle.derivedFrom(INIT_BUNDLE) - .addVersionSpecificSupport(VERSION_1, ModuleStatementRFC6020Support.getInstance()) - .addVersionSpecificSupport(VERSION_1_1, ModuleStatementRFC7950Support.getInstance()) + .addVersionSpecificSupport(VERSION_1, ModuleStatementSupport.rfc6020Instance()) + .addVersionSpecificSupport(VERSION_1_1, ModuleStatementSupport.rfc7950Instance()) .addVersionSpecificSupport(VERSION_1, SubmoduleStatementRFC6020Support.getInstance()) .addVersionSpecificSupport(VERSION_1_1, SubmoduleStatementRFC7950Support.getInstance()) .addSupport(NamespaceStatementSupport.getInstance()) diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java deleted file mode 100644 index d616e5cd54..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC6020Support.java +++ /dev/null @@ -1,59 +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.module; - -import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -public final class ModuleStatementRFC6020Support extends AbstractModuleStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MODULE) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addMandatory(YangStmtMapping.NAMESPACE) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addOptional(YangStmtMapping.YANG_VERSION) - .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) - .build(); - private static final ModuleStatementRFC6020Support INSTANCE = new ModuleStatementRFC6020Support(); - - private ModuleStatementRFC6020Support() { - // Hidden - } - - public static ModuleStatementRFC6020Support 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/module/ModuleStatementRFC7950Support.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC7950Support.java deleted file mode 100644 index 80f77ccd1c..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementRFC7950Support.java +++ /dev/null @@ -1,62 +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.module; - -import com.google.common.annotations.Beta; -import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; -import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; -import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; - -@Beta -public final class ModuleStatementRFC7950Support extends AbstractModuleStatementSupport { - private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping - .MODULE) - .addAny(YangStmtMapping.ANYDATA) - .addAny(YangStmtMapping.ANYXML) - .addAny(YangStmtMapping.AUGMENT) - .addAny(YangStmtMapping.CHOICE) - .addOptional(YangStmtMapping.CONTACT) - .addAny(YangStmtMapping.CONTAINER) - .addOptional(YangStmtMapping.DESCRIPTION) - .addAny(YangStmtMapping.DEVIATION) - .addAny(YangStmtMapping.EXTENSION) - .addAny(YangStmtMapping.FEATURE) - .addAny(YangStmtMapping.GROUPING) - .addAny(YangStmtMapping.IDENTITY) - .addAny(YangStmtMapping.IMPORT) - .addAny(YangStmtMapping.INCLUDE) - .addAny(YangStmtMapping.LEAF) - .addAny(YangStmtMapping.LEAF_LIST) - .addAny(YangStmtMapping.LIST) - .addMandatory(YangStmtMapping.NAMESPACE) - .addAny(YangStmtMapping.NOTIFICATION) - .addOptional(YangStmtMapping.ORGANIZATION) - .addMandatory(YangStmtMapping.PREFIX) - .addOptional(YangStmtMapping.REFERENCE) - .addAny(YangStmtMapping.REVISION) - .addAny(YangStmtMapping.RPC) - .addAny(YangStmtMapping.TYPEDEF) - .addAny(YangStmtMapping.USES) - .addMandatory(YangStmtMapping.YANG_VERSION) - .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) - .build(); - private static final ModuleStatementRFC7950Support INSTANCE = new ModuleStatementRFC7950Support(); - - private ModuleStatementRFC7950Support() { - // Hidden - } - - public static ModuleStatementRFC7950Support 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/module/AbstractModuleStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java similarity index 69% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java index 35b4228d66..65ada4e4e0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/AbstractModuleStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/module/ModuleStatementSupport.java @@ -8,8 +8,10 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.module; import static com.google.common.base.Verify.verify; +import static java.util.Objects.requireNonNull; import static org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils.firstAttributeOf; +import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import java.net.URI; import java.util.ArrayList; @@ -18,6 +20,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.openconfig.model.api.OpenConfigStatements; import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.common.UnqualifiedQName; @@ -46,6 +49,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SemanticVersionNamespace; 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.ImpPrefixToNamespace; import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx; import org.opendaylight.yangtools.yang.parser.spi.source.IncludedSubmoduleNameToModuleCtx; @@ -58,14 +62,88 @@ import org.opendaylight.yangtools.yang.parser.spi.source.ModuleQNameToModuleName import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; -abstract class AbstractModuleStatementSupport +@Beta +public final class ModuleStatementSupport extends BaseStatementSupport { - AbstractModuleStatementSupport() { + private static final @NonNull ModuleStatementSupport RFC6020_INSTANCE = new ModuleStatementSupport( + SubstatementValidator.builder(YangStmtMapping.MODULE) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addOptional(YangStmtMapping.YANG_VERSION) + .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) + .build()); + private static final @NonNull ModuleStatementSupport RFC7950_INSTANCE = new ModuleStatementSupport( + SubstatementValidator.builder(YangStmtMapping.MODULE) + .addAny(YangStmtMapping.ANYDATA) + .addAny(YangStmtMapping.ANYXML) + .addAny(YangStmtMapping.AUGMENT) + .addAny(YangStmtMapping.CHOICE) + .addOptional(YangStmtMapping.CONTACT) + .addAny(YangStmtMapping.CONTAINER) + .addOptional(YangStmtMapping.DESCRIPTION) + .addAny(YangStmtMapping.DEVIATION) + .addAny(YangStmtMapping.EXTENSION) + .addAny(YangStmtMapping.FEATURE) + .addAny(YangStmtMapping.GROUPING) + .addAny(YangStmtMapping.IDENTITY) + .addAny(YangStmtMapping.IMPORT) + .addAny(YangStmtMapping.INCLUDE) + .addAny(YangStmtMapping.LEAF) + .addAny(YangStmtMapping.LEAF_LIST) + .addAny(YangStmtMapping.LIST) + .addMandatory(YangStmtMapping.NAMESPACE) + .addAny(YangStmtMapping.NOTIFICATION) + .addOptional(YangStmtMapping.ORGANIZATION) + .addMandatory(YangStmtMapping.PREFIX) + .addOptional(YangStmtMapping.REFERENCE) + .addAny(YangStmtMapping.REVISION) + .addAny(YangStmtMapping.RPC) + .addAny(YangStmtMapping.TYPEDEF) + .addAny(YangStmtMapping.USES) + .addMandatory(YangStmtMapping.YANG_VERSION) + .addOptional(OpenConfigStatements.OPENCONFIG_VERSION) + .build()); + + private final SubstatementValidator validator; + + private ModuleStatementSupport(final SubstatementValidator validator) { super(YangStmtMapping.MODULE, CopyPolicy.REJECT); + this.validator = requireNonNull(validator); + } + + public static @NonNull ModuleStatementSupport rfc6020Instance() { + return RFC6020_INSTANCE; + } + + public static @NonNull ModuleStatementSupport rfc7950Instance() { + return RFC7950_INSTANCE; } @Override - public final UnqualifiedQName parseArgumentValue(final StmtContext ctx, final String value) { + public UnqualifiedQName parseArgumentValue(final StmtContext ctx, final String value) { try { return UnqualifiedQName.of(value); } catch (IllegalArgumentException e) { @@ -74,8 +152,7 @@ abstract class AbstractModuleStatementSupport } @Override - public final void onPreLinkageDeclared( - final Mutable stmt) { + public void onPreLinkageDeclared(final Mutable stmt) { final String moduleName = stmt.getRawArgument(); final URI moduleNs = SourceException.throwIfNull( @@ -98,9 +175,7 @@ abstract class AbstractModuleStatementSupport } @Override - public final void onLinkageDeclared( - final Mutable stmt) { - + public void onLinkageDeclared(final Mutable stmt) { final URI moduleNs = SourceException.throwIfNull( firstAttributeOf(stmt.declaredSubstatements(), NamespaceStatement.class), stmt, "Namespace of the module [%s] is missing", stmt.argument()); @@ -138,7 +213,12 @@ abstract class AbstractModuleStatementSupport } @Override - protected final ImmutableList> buildEffectiveSubstatements( + protected SubstatementValidator getSubstatementValidator() { + return validator; + } + + @Override + protected ImmutableList> buildEffectiveSubstatements( final Current stmt, final List> substatements) { final ImmutableList> local = @@ -165,18 +245,18 @@ abstract class AbstractModuleStatementSupport } @Override - protected final ModuleStatement createDeclared(final StmtContext ctx, + protected ModuleStatement createDeclared(final StmtContext ctx, final ImmutableList> substatements) { return new ModuleStatementImpl(ctx.getRawArgument(), ctx.getArgument(), substatements); } @Override - protected final ModuleStatement createEmptyDeclared(final StmtContext ctx) { + protected ModuleStatement createEmptyDeclared(final StmtContext ctx) { throw noNamespace(ctx); } @Override - protected final ModuleEffectiveStatement createEffective(final Current stmt, + protected ModuleEffectiveStatement createEffective(final Current stmt, final ImmutableList> substatements) { if (substatements.isEmpty()) { throw noNamespace(stmt);