From b9e3aee8b1c387b280f678d6c7038c66e800af80 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 28 Jan 2020 02:08:18 +0100 Subject: [PATCH] Switch position statement to use Uint32 Position is restricted to 32bit unsigned, there is just no point to say it is a Long. JIRA: YANGTOOLS-1065 Change-Id: I3922e90feddab0b8da7bb3fdb42cc8d46953c5de Signed-off-by: Robert Varga --- .../api/stmt/PositionEffectiveStatement.java | 3 ++- .../yang/model/api/stmt/PositionStatement.java | 10 +++++++--- .../stmt/bit/BitEffectiveStatementImpl.java | 7 ++++--- .../AbstractPositionEffectiveStatement.java | 3 ++- .../stmt/position/AbstractPositionStatement.java | 5 +++-- .../stmt/position/EmptyPositionStatement.java | 4 +++- .../stmt/position/PositionStatementSupport.java | 15 ++++++++------- .../stmt/position/RegularPositionStatement.java | 3 ++- .../type/BitsSpecificationEffectiveStatement.java | 2 +- .../stmt/type/BitsTypeEffectiveStatementImpl.java | 2 +- 10 files changed, 33 insertions(+), 21 deletions(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionEffectiveStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionEffectiveStatement.java index 56e41465c5..e9d9741279 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionEffectiveStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionEffectiveStatement.java @@ -8,9 +8,10 @@ package org.opendaylight.yangtools.yang.model.api.stmt; import com.google.common.annotations.Beta; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; @Beta -public interface PositionEffectiveStatement extends EffectiveStatement { +public interface PositionEffectiveStatement extends EffectiveStatement { } diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionStatement.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionStatement.java index e5a732cef4..42ebf342ca 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionStatement.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/stmt/PositionStatement.java @@ -7,10 +7,14 @@ */ package org.opendaylight.yangtools.yang.model.api.stmt; +import static com.google.common.base.Verify.verifyNotNull; + +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; -public interface PositionStatement extends DeclaredStatement { - default long getValue() { - return argument().longValue(); +public interface PositionStatement extends DeclaredStatement { + default Uint32 getValue() { + // 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/BitEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/bit/BitEffectiveStatementImpl.java index 1e62d37c68..bdfae0e704 100644 --- 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 @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.bit; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.BitEffectiveStatement; @@ -22,7 +23,7 @@ public final class BitEffectiveStatementImpl extends AbstractEffectiveDocumented private final QName qname; private final SchemaPath schemaPath; - private final Long declaredPosition; + private final Uint32 declaredPosition; BitEffectiveStatementImpl(final StmtContext ctx) { super(ctx); @@ -30,7 +31,7 @@ public final class BitEffectiveStatementImpl extends AbstractEffectiveDocumented qname = ctx.getStatementArgument(); schemaPath = ctx.getSchemaPath().get(); - Long declaredPositionInit = null; + Uint32 declaredPositionInit = null; for (final EffectiveStatement effectiveStatement : effectiveSubstatements()) { if (effectiveStatement instanceof PositionEffectiveStatement) { declaredPositionInit = ((PositionEffectiveStatement) effectiveStatement).argument(); @@ -40,7 +41,7 @@ public final class BitEffectiveStatementImpl extends AbstractEffectiveDocumented declaredPosition = declaredPositionInit; } - public Long getDeclaredPosition() { + public Uint32 getDeclaredPosition() { return declaredPosition; } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionEffectiveStatement.java index 6330443083..542bc2fd24 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionEffectiveStatement.java @@ -7,12 +7,13 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.stmt.PositionEffectiveStatement; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredEffectiveStatement; abstract class AbstractPositionEffectiveStatement - extends AbstractDeclaredEffectiveStatement.DefaultArgument + extends AbstractDeclaredEffectiveStatement.DefaultArgument implements PositionEffectiveStatement { AbstractPositionEffectiveStatement(final PositionStatement declared) { super(declared); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionStatement.java index d9c0b19b9b..46dd7db10c 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/AbstractPositionStatement.java @@ -7,13 +7,14 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; import org.opendaylight.yangtools.yang.model.api.stmt.PositionStatement; import org.opendaylight.yangtools.yang.parser.rfc7950.stmt.AbstractDeclaredStatement.ArgumentToString; -abstract class AbstractPositionStatement extends ArgumentToString implements PositionStatement { - AbstractPositionStatement(final Long argument) { +abstract class AbstractPositionStatement extends ArgumentToString implements PositionStatement { + AbstractPositionStatement(final Uint32 argument) { super(argument); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/EmptyPositionStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/EmptyPositionStatement.java index 9c494cb38c..71423ae8c5 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/EmptyPositionStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/EmptyPositionStatement.java @@ -7,8 +7,10 @@ */ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; +import org.opendaylight.yangtools.yang.common.Uint32; + final class EmptyPositionStatement extends AbstractPositionStatement { - EmptyPositionStatement(final Long argument) { + EmptyPositionStatement(final Uint32 argument) { super(argument); } } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java index 8e01336854..bd0a57179d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/PositionStatementSupport.java @@ -8,6 +8,7 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; import com.google.common.collect.ImmutableList; +import org.opendaylight.yangtools.yang.common.Uint32; 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; @@ -19,7 +20,7 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; public final class PositionStatementSupport - extends BaseInternedStatementSupport { + extends BaseInternedStatementSupport { private static final SubstatementValidator SUBSTATEMENT_VALIDATOR = SubstatementValidator.builder( YangStmtMapping.POSITION).build(); private static final PositionStatementSupport INSTANCE = new PositionStatementSupport(); @@ -33,10 +34,10 @@ public final class PositionStatementSupport } @Override - public Long parseArgumentValue(final StmtContext ctx, final String value) { + public Uint32 parseArgumentValue(final StmtContext ctx, final String value) { try { - return Long.parseLong(value); - } catch (NumberFormatException e) { + return Uint32.valueOf(value).intern(); + } catch (IllegalArgumentException e) { throw new SourceException(String.format("Bit position value %s is not valid integer", value), ctx.getStatementSourceReference(), e); } @@ -48,13 +49,13 @@ public final class PositionStatementSupport } @Override - protected PositionStatement createDeclared(final Long argument, + protected PositionStatement createDeclared(final Uint32 argument, final ImmutableList> substatements) { return new RegularPositionStatement(argument, substatements); } @Override - protected PositionStatement createEmptyDeclared(final Long argument) { + protected PositionStatement createEmptyDeclared(final Uint32 argument) { return new EmptyPositionStatement(argument); } @@ -65,7 +66,7 @@ public final class PositionStatementSupport @Override protected PositionEffectiveStatement createEffective( - final StmtContext ctx, + final StmtContext ctx, final PositionStatement declared, final ImmutableList> substatements) { return new RegularPositionEffectiveStatement(declared, substatements); } diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/RegularPositionStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/RegularPositionStatement.java index 84a82c2e14..fe14dcf69d 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/RegularPositionStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/position/RegularPositionStatement.java @@ -10,12 +10,13 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.position; import com.google.common.collect.ImmutableList; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; final class RegularPositionStatement extends AbstractPositionStatement { private final @NonNull Object substatements; - RegularPositionStatement(final Long argument, + RegularPositionStatement(final Uint32 argument, final ImmutableList> substatements) { super(argument); this.substatements = maskList(substatements); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java index 0d1b49a2a3..25aefb4a3e 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsSpecificationEffectiveStatement.java @@ -49,7 +49,7 @@ public final class BitsSpecificationEffectiveStatement extends effectivePos = 0L; } } else { - effectivePos = bitSubStmt.getDeclaredPosition(); + effectivePos = bitSubStmt.getDeclaredPosition().toJava(); } final Bit bit = EffectiveTypeUtil.buildBit(bitSubStmt, effectivePos); diff --git a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java index b331ab6115..35f82ba354 100644 --- a/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java +++ b/yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/BitsTypeEffectiveStatementImpl.java @@ -46,7 +46,7 @@ final class BitsTypeEffectiveStatementImpl extends DeclaredEffectiveStatementBas if (bitSubStmt.getDeclaredPosition() == null) { effectivePos = getBaseTypeBitPosition(bitSubStmt.getName(), baseType, ctx); } else { - effectivePos = bitSubStmt.getDeclaredPosition(); + effectivePos = bitSubStmt.getDeclaredPosition().toJava(); } builder.addBit(EffectiveTypeUtil.buildBit(bitSubStmt, effectivePos)); -- 2.36.6