From 112708cfd4b31505de3abc9d663df6669f119235 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 1 Jul 2020 16:38:15 +0200 Subject: [PATCH] Convert range statement Convert the mostly trivial case of range statement, which can be easily minimized. We also terminally-deprecate AbstractListConstraintEffectiveStatement, as it is no longer needed. JIRA: YANGTOOLS-1065 Change-Id: I38c0583aaf46670639c4b8a5b9464113c0032bb4 Signed-off-by: Robert Varga --- .../api/stmt/RangeEffectiveStatement.java | 14 +++++--- .../yang/model/api/stmt/RangeStatement.java | 7 ++++ ...tractListConstraintEffectiveStatement.java | 2 ++ .../range/EmptyRangeEffectiveStatement.java | 22 +++++++++++++ ...mentImpl.java => EmptyRangeStatement.java} | 12 +++---- .../stmt/range/RangeStatementImpl.java | 20 ------------ .../stmt/range/RangeStatementSupport.java | 32 ++++++++++++++----- .../range/RegularRangeEffectiveStatement.java | 25 +++++++++++++++ .../stmt/range/RegularRangeStatement.java | 23 +++++++++++++ 9 files changed, 118 insertions(+), 39 deletions(-) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/{RangeEffectiveStatementImpl.java => EmptyRangeStatement.java} (62%) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeEffectiveStatement.java index 89685dccf2..1274c713c7 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeEffectiveStatement.java @@ -10,12 +10,18 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.List; import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; @Beta public interface RangeEffectiveStatement extends EffectiveStatement, RangeStatement>, - // FIXME: 6.0.0: reconsider this interface extension - // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective statements) - ConstraintMetaDefinition { - + // FIXME: 6.0.0: reconsider this interface extension + // FIXME: 6.0.0: if we are keeping it, consider a default implementation (shared with others effective + // statements) + ConstraintMetaDefinition { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.RANGE; + } } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeStatement.java index 40713334b1..512c706375 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/RangeStatement.java @@ -9,8 +9,15 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import java.util.List; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public interface RangeStatement extends ConstrainedDocumentedDeclaredStatement> { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.RANGE; + } + @Override @NonNull List argument(); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java index 1700c1d175..f21584da7c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/AbstractListConstraintEffectiveStatement.java @@ -14,6 +14,8 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; @Beta +@Deprecated(forRemoval = true) +// FIXME: 6.0.0: remove this class public abstract class AbstractListConstraintEffectiveStatement>> extends AbstractConstraintEffectiveStatement, D> { diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java new file mode 100644 index 0000000000..1bf06f4058 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeEffectiveStatement.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, 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.range; + +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin; + +final class EmptyRangeEffectiveStatement extends DefaultArgument, RangeStatement> + implements RangeEffectiveStatement, ConstraintMetaDefinitionMixin, RangeStatement> { + EmptyRangeEffectiveStatement(final RangeStatement declared) { + super(declared); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeStatement.java similarity index 62% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeStatement.java index 6684679fdf..f6bb06835d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/EmptyRangeStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2020 PANTHEON.tech, 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, @@ -8,15 +8,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.range; import java.util.List; -import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractListConstraintEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -final class RangeEffectiveStatementImpl extends AbstractListConstraintEffectiveStatement - implements RangeEffectiveStatement { - RangeEffectiveStatementImpl(final StmtContext, RangeStatement, ?> ctx) { - super(ctx); +final class EmptyRangeStatement extends WithArgument> implements RangeStatement { + EmptyRangeStatement(final StmtContext, ?, ?> context) { + super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java deleted file mode 100644 index c715067215..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementImpl.java +++ /dev/null @@ -1,20 +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.range; - -import java.util.List; -import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -final class RangeStatementImpl extends AbstractDeclaredStatement> implements RangeStatement { - RangeStatementImpl(final StmtContext, RangeStatement, ?> context) { - super(context); - } -} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java index bb74845c3e..17527508f0 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RangeStatementSupport.java @@ -15,19 +15,21 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; import org.opendaylight.yangtools.yang.model.api.stmt.UnresolvedNumber; import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.ArgumentUtils; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.BaseStatementSupport; 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.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class RangeStatementSupport - extends AbstractStatementSupport, RangeStatement, RangeEffectiveStatement> { + extends BaseStatementSupport, RangeStatement, RangeEffectiveStatement> { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder(YangStmtMapping .RANGE) .addOptional(YangStmtMapping.DESCRIPTION) @@ -46,7 +48,7 @@ public final class RangeStatementSupport } @Override - public List parseArgumentValue(final StmtContext ctx, final String rangeArgument) { + public ImmutableList parseArgumentValue(final StmtContext ctx, final String rangeArgument) { final List ranges = new ArrayList<>(); for (final String singleRange : ArgumentUtils.PIPE_SPLITTER.split(rangeArgument)) { @@ -77,14 +79,28 @@ public final class RangeStatementSupport } @Override - public RangeStatement createDeclared(final StmtContext, RangeStatement, ?> ctx) { - return new RangeStatementImpl(ctx); + protected RangeStatement createDeclared(final StmtContext, RangeStatement, ?> ctx, + final ImmutableList> substatements) { + return new RegularRangeStatement(ctx, substatements); } @Override - public RangeEffectiveStatement createEffective( - final StmtContext, RangeStatement, RangeEffectiveStatement> ctx) { - return new RangeEffectiveStatementImpl(ctx); + protected RangeStatement createEmptyDeclared(final StmtContext, RangeStatement, ?> ctx) { + return new EmptyRangeStatement(ctx); + } + + @Override + protected RangeEffectiveStatement createEffective( + final StmtContext, RangeStatement, RangeEffectiveStatement> ctx, + final RangeStatement declared, final ImmutableList> substatements) { + return new RegularRangeEffectiveStatement(declared, substatements); + } + + @Override + protected RangeEffectiveStatement createEmptyEffective( + final StmtContext, RangeStatement, RangeEffectiveStatement> ctx, + final RangeStatement declared) { + return new EmptyRangeEffectiveStatement(declared); } @Override diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java new file mode 100644 index 0000000000..43c4f708f7 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeEffectiveStatement.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, 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.range; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.ConstraintMetaDefinitionMixin; + +final class RegularRangeEffectiveStatement extends WithSubstatements, RangeStatement> + implements RangeEffectiveStatement, ConstraintMetaDefinitionMixin, RangeStatement> { + RegularRangeEffectiveStatement(final RangeStatement declared, + final ImmutableList> substatements) { + super(declared, substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java new file mode 100644 index 0000000000..d19b218cb0 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/range/RegularRangeStatement.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 PANTHEON.tech, 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.range; + +import com.google.common.collect.ImmutableList; +import java.util.List; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.RangeStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.ValueRange; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularRangeStatement extends WithSubstatements> implements RangeStatement { + RegularRangeStatement(final StmtContext, ?, ?> context, + final ImmutableList> substatements) { + super(context, substatements); + } +} -- 2.36.6