From ecd0ed5c8c41ad3e40b7db419f80a33ecacf9d58 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 1 Jul 2020 20:25:10 +0200 Subject: [PATCH] Convert bit statement Convert the mostly trivial case of bit statement, which can be easily minimized. Change-Id: I4b1041c3205034d28844be0e8faab5545006ea23 JIRA: YANGTOOLS-1065 Signed-off-by: Robert Varga --- .../model/api/stmt/BitEffectiveStatement.java | 7 ++++ .../yang/model/api/stmt/BitStatement.java | 7 ++++ .../stmt/bit/AbstractBitStatementSupport.java | 33 +++++++++++++----- .../stmt/bit/BitEffectiveStatementImpl.java | 26 -------------- .../stmt/bit/EmptyBitEffectiveStatement.java | 34 +++++++++++++++++++ ...tementImpl.java => EmptyBitStatement.java} | 8 ++--- .../bit/RegularBitEffectiveStatement.java | 27 +++++++++++++++ .../rfc7950/stmt/bit/RegularBitStatement.java | 21 ++++++++++++ 8 files changed, 124 insertions(+), 39 deletions(-) delete mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java rename yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/{BitStatementImpl.java => EmptyBitStatement.java} (58%) create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java create mode 100644 yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitEffectiveStatement.java index f9bb3827fb..bcb6004c67 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitEffectiveStatement.java @@ -10,10 +10,17 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; import java.util.Optional; import org.opendaylight.yangtools.yang.common.Uint32; +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 BitEffectiveStatement extends EffectiveStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.BIT; + } + default Optional getDeclaredPosition() { return findFirstEffectiveSubstatementArgument(PositionEffectiveStatement.class); } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitStatement.java index d9fbdf0df2..99c62694b8 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/BitStatement.java @@ -12,9 +12,16 @@ import static com.google.common.base.Verify.verifyNotNull; import java.util.Optional; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; public interface BitStatement extends DocumentedDeclaredStatement.WithStatus, IfFeatureAwareDeclaredStatement { + @Override + default StatementDefinition statementDefinition() { + return YangStmtMapping.BIT; + } + default @NonNull String getName() { // FIXME: YANGTOOLS-908: verifyNotNull() should not be needed here return verifyNotNull(argument()); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java index 6c0f2cc5e0..21445b02b7 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/AbstractBitStatementSupport.java @@ -7,15 +7,17 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; +import com.google.common.collect.ImmutableList; 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.BitEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -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.StmtContext; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; -abstract class AbstractBitStatementSupport - extends AbstractStatementSupport { +abstract class AbstractBitStatementSupport extends BaseStatementSupport { AbstractBitStatementSupport() { super(YangStmtMapping.BIT); } @@ -27,13 +29,26 @@ abstract class AbstractBitStatementSupport } @Override - public final BitStatement createDeclared(final StmtContext ctx) { - return new BitStatementImpl(ctx); + protected final BitStatement createDeclared(final StmtContext ctx, + final ImmutableList> substatements) { + return new RegularBitStatement(ctx, substatements); } @Override - public final BitEffectiveStatement createEffective( - final StmtContext ctx) { - return new BitEffectiveStatementImpl(ctx); + protected final BitStatement createEmptyDeclared(final StmtContext ctx) { + return new EmptyBitStatement(ctx); } -} \ No newline at end of file + + @Override + protected final BitEffectiveStatement createEffective( + final StmtContext ctx, final BitStatement declared, + final ImmutableList> substatements) { + return new RegularBitEffectiveStatement(declared, substatements); + } + + @Override + protected final BitEffectiveStatement createEmptyEffective( + final StmtContext ctx, final BitStatement declared) { + return new EmptyBitEffectiveStatement(declared); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java deleted file mode 100644 index 68cde84f4d..0000000000 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java +++ /dev/null @@ -1,26 +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.bit; - -import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; -import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractEffectiveDocumentedNodeWithStatus; -import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; - -final class BitEffectiveStatementImpl extends AbstractEffectiveDocumentedNodeWithStatus - implements BitEffectiveStatement { - BitEffectiveStatementImpl(final StmtContext ctx) { - super(ctx); - } - - @Override - public String toString() { - return BitEffectiveStatementImpl.class.getSimpleName() + "[name=" + argument() + ", position=" - + getDeclaredPosition().orElse(null) + "]"; - } -} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java new file mode 100644 index 0000000000..9bc73d0731 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitEffectiveStatement.java @@ -0,0 +1,34 @@ +/* + * 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.bit; + +import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus; +import org.opendaylight.yangtools.yang.model.api.Status; +import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.StatusEffectiveStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement.DefaultArgument; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.EffectiveStatementMixins.DocumentedNodeMixin; + +class EmptyBitEffectiveStatement extends DefaultArgument implements + BitEffectiveStatement, DocumentedNodeMixin, WithStatus { + EmptyBitEffectiveStatement(final BitStatement declared) { + super(declared); + } + + @Override + public final Status getStatus() { + return findFirstEffectiveSubstatementArgument(StatusEffectiveStatement.class).orElse(Status.CURRENT); + } + + @Override + public final String toString() { + return "BitEffectiveStatementImpl[name=" + argument() + ", position=" + getDeclaredPosition().orElse(null) + + "]"; + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitStatement.java similarity index 58% rename from yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java rename to yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitStatement.java index 2b9b0017b4..3bb0b02586 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/EmptyBitStatement.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,11 +8,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; -import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument; import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; -final class BitStatementImpl extends AbstractDeclaredStatement implements BitStatement { - BitStatementImpl(final StmtContext context) { +final class EmptyBitStatement extends WithArgument implements BitStatement { + EmptyBitStatement(final StmtContext context) { super(context); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java new file mode 100644 index 0000000000..5bb1139046 --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitEffectiveStatement.java @@ -0,0 +1,27 @@ +/* + * 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.bit; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; + +final class RegularBitEffectiveStatement extends EmptyBitEffectiveStatement { + private final Object substatements; + + RegularBitEffectiveStatement(final BitStatement declared, + final ImmutableList> substatements) { + super(declared); + this.substatements = maskList(substatements); + } + + @Override + public ImmutableList> effectiveSubstatements() { + return unmaskList(substatements); + } +} diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java new file mode 100644 index 0000000000..c26bf08c4b --- /dev/null +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/RegularBitStatement.java @@ -0,0 +1,21 @@ +/* + * 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.bit; + +import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.stmt.BitStatement; +import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.WithArgument.WithSubstatements; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext; + +final class RegularBitStatement extends WithSubstatements implements BitStatement { + RegularBitStatement(final StmtContext context, + final ImmutableList> substatements) { + super(context, substatements); + } +} -- 2.36.6