From 34e469f2599a814d20e34650abe4b50ecdc2ba80 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 12 Sep 2021 18:48:44 +0200 Subject: [PATCH] Use yang.common.Decimal64 for decimal64 We now have a dedicated class for carrying decimal64 values, use that instead of BigInteger. JIRA: YANGTOOLS-556 Change-Id: Ifdb672383f73c5845499b55e307c60b1c30ddbd5 Signed-off-by: Robert Varga --- .../data/codec/gson/AbstractYT1027Test.java | 4 ++-- .../yang/data/api/codec/DecimalCodec.java | 4 ++-- .../data/impl/codec/DecimalStringCodec.java | 12 ++++++------ .../data/impl/codec/DecimalCodecStringTest.java | 6 +++--- .../TypeDefinitionAwareCodecTestHelper.java | 9 ++------- .../model/api/type/DecimalTypeDefinition.java | 4 ++-- .../yang/model/ri/type/BaseDecimalType.java | 14 +++++++------- .../yang/model/ri/type/DecimalTypeBuilder.java | 4 ++-- .../yang/model/ri/type/DerivedDecimalType.java | 4 ++-- .../yang/model/ri/type/NumberUtil.java | 14 +++++++------- .../model/ri/type/RestrictedDecimalType.java | 6 +++--- .../yang/model/ri/type/RestrictedTypes.java | 6 +++--- .../yang/model/ri/type/NumberUtilTest.java | 17 +++++++++-------- .../stmt/meta/RangeStatementSupport.java | 5 ++--- .../stmt/type/AbstractTypeStatementSupport.java | 4 ++-- .../yang/stmt/TypedefConstraintsTest.java | 7 +++---- 16 files changed, 57 insertions(+), 63 deletions(-) diff --git a/codec/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java b/codec/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java index 3b7655c1d3..b50fdf2a74 100644 --- a/codec/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java +++ b/codec/yang-data-codec-gson/src/test/java/org/opendaylight/yangtools/yang/data/codec/gson/AbstractYT1027Test.java @@ -17,10 +17,10 @@ import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; -import java.math.BigDecimal; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Uint64; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; @@ -45,7 +45,7 @@ public abstract class AbstractYT1027Test { private static final QName INT64 = QName.create(DECIMAL, "int64"); private static final QName UINT64 = QName.create(DECIMAL, "uint64"); - static final LeafNode DECIMAL_DATA = ImmutableNodes.leafNode(DECIMAL, new BigDecimal("1.1")); + static final LeafNode DECIMAL_DATA = ImmutableNodes.leafNode(DECIMAL, Decimal64.valueOf("1.1")); static final LeafNode INT64_DATA = ImmutableNodes.leafNode(INT64, 2L); static final LeafNode UINT64_DATA = ImmutableNodes.leafNode(UINT64, Uint64.ONE); diff --git a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java index b42a6d93a2..b112e58fe3 100644 --- a/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java +++ b/data/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/codec/DecimalCodec.java @@ -7,9 +7,9 @@ */ package org.opendaylight.yangtools.yang.data.api.codec; -import java.math.BigDecimal; import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; +import org.opendaylight.yangtools.yang.common.Decimal64; -public interface DecimalCodec extends IllegalArgumentCodec { +public interface DecimalCodec extends IllegalArgumentCodec { } diff --git a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DecimalStringCodec.java b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DecimalStringCodec.java index 946e333455..35a5c87f8d 100644 --- a/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DecimalStringCodec.java +++ b/data/yang-data-impl/src/main/java/org/opendaylight/yangtools/yang/data/impl/codec/DecimalStringCodec.java @@ -10,8 +10,8 @@ package org.opendaylight.yangtools.yang.data.impl.codec; import static java.util.Objects.requireNonNull; import com.google.common.annotations.Beta; -import java.math.BigDecimal; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.data.api.codec.DecimalCodec; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; @@ -19,10 +19,10 @@ import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; * Do not use this class outside of yangtools, its presence does not fall into the API stability contract. */ @Beta -public final class DecimalStringCodec extends TypeDefinitionAwareCodec +public final class DecimalStringCodec extends TypeDefinitionAwareCodec implements DecimalCodec { private DecimalStringCodec(final DecimalTypeDefinition typeDef) { - super(typeDef, BigDecimal.class); + super(typeDef, Decimal64.class); } public static @NonNull DecimalStringCodec from(final DecimalTypeDefinition type) { @@ -30,13 +30,13 @@ public final class DecimalStringCodec extends TypeDefinitionAwareCodec codec = TypeDefinitionAwareCodecTestHelper.getCodec(getType(), DecimalCodec.class); - assertEquals("serialize", "123.456", codec.serialize(new BigDecimal("123.456"))); + assertEquals("123.456", codec.serialize(Decimal64.valueOf("123.456"))); } @SuppressWarnings("unchecked") @@ -34,7 +34,7 @@ public class DecimalCodecStringTest { public void testDeserialize() { DecimalCodec codec = TypeDefinitionAwareCodecTestHelper.getCodec(getType(), DecimalCodec.class); - assertEquals("deserialize", new BigDecimal("123.456"), codec.deserialize("123.456")); + assertEquals(Decimal64.valueOf("123.456"), codec.deserialize("123.456")); TypeDefinitionAwareCodecTestHelper.deserializeWithExpectedIllegalArgEx(codec, "12o.3"); TypeDefinitionAwareCodecTestHelper.deserializeWithExpectedIllegalArgEx(codec, ""); diff --git a/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodecTestHelper.java b/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodecTestHelper.java index df048cff08..4b0b330f43 100644 --- a/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodecTestHelper.java +++ b/data/yang-data-impl/src/test/java/org/opendaylight/yangtools/yang/data/impl/codec/TypeDefinitionAwareCodecTestHelper.java @@ -9,7 +9,7 @@ package org.opendaylight.yangtools.yang.data.impl.codec; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.fail; +import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; @@ -35,12 +35,7 @@ public final class TypeDefinitionAwareCodecTestHelper { public static void deserializeWithExpectedIllegalArgEx(final Codec codec, final @NonNull String param) { - try { - codec.deserialize(param); - fail("Expected IllegalArgumentException"); - } catch (IllegalArgumentException e) { - // Expected ... - } + assertThrows(IllegalArgumentException.class, () -> codec.deserialize(param)); } public static EnumTypeDefinition toEnumTypeDefinition(final String... enums) { diff --git a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java index e548f4eeeb..ddafa0ffe2 100644 --- a/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java +++ b/model/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/DecimalTypeDefinition.java @@ -7,14 +7,14 @@ */ package org.opendaylight.yangtools.yang.model.api.type; -import java.math.BigDecimal; import java.util.Objects; +import org.opendaylight.yangtools.yang.common.Decimal64; /** * Contains methods for getting data from the YANG type substatement for decimal64 built-in * type. */ -public interface DecimalTypeDefinition extends RangeRestrictedTypeDefinition { +public interface DecimalTypeDefinition extends RangeRestrictedTypeDefinition { /** * Returns integer between 1 and 18 inclusively. * diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/BaseDecimalType.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/BaseDecimalType.java index 04e8a0449d..798f5ac616 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/BaseDecimalType.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/BaseDecimalType.java @@ -12,16 +12,16 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableRangeSet; import com.google.common.collect.Range; -import java.math.BigDecimal; import java.util.Collection; import java.util.Optional; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.ConstraintMetaDefinition; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; -final class BaseDecimalType extends AbstractRangeRestrictedBaseType +final class BaseDecimalType extends AbstractRangeRestrictedBaseType implements DecimalTypeDefinition { private static final ConstraintMetaDefinition BUILTIN_CONSTRAINT = new ConstraintMetaDefinition() { @@ -46,7 +46,7 @@ final class BaseDecimalType extends AbstractRangeRestrictedBaseType> IMPLICIT_RANGE_STATEMENTS = ImmutableList.of( + private static final ImmutableList> IMPLICIT_RANGE_STATEMENTS = ImmutableList.of( createRangeConstraint("-922337203685477580.8", "922337203685477580.7"), createRangeConstraint("-92233720368547758.08", "92233720368547758.07"), createRangeConstraint("-9223372036854775.808", "9223372036854775.807"), @@ -66,19 +66,19 @@ final class BaseDecimalType extends AbstractRangeRestrictedBaseType createRangeConstraint(final String min, final String max) { + private static RangeConstraint createRangeConstraint(final String min, final String max) { return new ResolvedRangeConstraint<>(BUILTIN_CONSTRAINT, ImmutableRangeSet.of( - Range.closed(new BigDecimal(min), new BigDecimal(max)))); + Range.closed(Decimal64.valueOf(min), Decimal64.valueOf(max)))); } - static RangeConstraint constraintsForDigits(final int fractionDigits) { + static RangeConstraint constraintsForDigits(final int fractionDigits) { return verifyNotNull(IMPLICIT_RANGE_STATEMENTS.get(fractionDigits - 1)); } private final int fractionDigits; BaseDecimalType(final QName qname, final Collection unknownSchemaNodes, - final int fractionDigits, final RangeConstraint rangeConstraint) { + final int fractionDigits, final RangeConstraint rangeConstraint) { super(qname, unknownSchemaNodes, rangeConstraint); this.fractionDigits = fractionDigits; } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DecimalTypeBuilder.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DecimalTypeBuilder.java index d95b7f0df9..8e83e45f03 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DecimalTypeBuilder.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DecimalTypeBuilder.java @@ -10,11 +10,11 @@ package org.opendaylight.yangtools.yang.model.ri.type; import static com.google.common.base.Preconditions.checkState; import com.google.common.base.Preconditions; -import java.math.BigDecimal; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; -public final class DecimalTypeBuilder extends RangeRestrictedTypeBuilder { +public final class DecimalTypeBuilder extends RangeRestrictedTypeBuilder { private Integer fractionDigits; DecimalTypeBuilder(final QName qname) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DerivedDecimalType.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DerivedDecimalType.java index 7bc202b480..7050d24af2 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DerivedDecimalType.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/DerivedDecimalType.java @@ -7,14 +7,14 @@ */ package org.opendaylight.yangtools.yang.model.ri.type; -import java.math.BigDecimal; import java.util.Collection; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.Status; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; -final class DerivedDecimalType extends AbstractRangeRestrictedDerivedType +final class DerivedDecimalType extends AbstractRangeRestrictedDerivedType implements DecimalTypeDefinition { DerivedDecimalType(final DecimalTypeDefinition baseType, final QName qname, final Object defaultValue, final String description, final String reference, final Status status, final String units, diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtil.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtil.java index 9bebead5b6..a96815fa0b 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtil.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtil.java @@ -10,9 +10,9 @@ package org.opendaylight.yangtools.yang.model.ri.type; import static com.google.common.base.Preconditions.checkArgument; import com.google.common.collect.ImmutableMap; -import java.math.BigDecimal; import java.util.Comparator; import java.util.function.Function; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; @@ -39,8 +39,8 @@ final class NumberUtil { return ((Uint32)o1).compareTo((Uint32) o2); } else if (o1 instanceof Uint64) { return ((Uint64)o1).compareTo((Uint64) o2); - } else if (o1 instanceof BigDecimal) { - return ((BigDecimal)o1).compareTo((BigDecimal) o2); + } else if (o1 instanceof Decimal64) { + return ((Decimal64)o1).compareTo((Decimal64) o2); } else { throw new IllegalArgumentException("Unsupported Number class " + o1.getClass()); } @@ -87,15 +87,15 @@ final class NumberUtil { return Long.valueOf(input.toString()); }); - b.put(BigDecimal.class, input -> { - if (input instanceof BigDecimal) { + b.put(Decimal64.class, input -> { + if (input instanceof Decimal64) { return input; } if (input instanceof Byte || input instanceof Short || input instanceof Integer || input instanceof Long) { - return BigDecimal.valueOf(input.longValue()); + return Decimal64.valueOf(input.longValue()); } - return new BigDecimal(input.toString()); + return Decimal64.valueOf(input.toString()); }); b.put(Uint8.class, input -> { if (input instanceof Uint8) { diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedDecimalType.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedDecimalType.java index 870b8749d1..0a4f2502c2 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedDecimalType.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedDecimalType.java @@ -7,19 +7,19 @@ */ package org.opendaylight.yangtools.yang.model.ri.type; -import java.math.BigDecimal; import java.util.Collection; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode; import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint; -final class RestrictedDecimalType extends AbstractRangeRestrictedType +final class RestrictedDecimalType extends AbstractRangeRestrictedType implements DecimalTypeDefinition { RestrictedDecimalType(final DecimalTypeDefinition baseType, final QName qname, final Collection unknownSchemaNodes, - final @Nullable RangeConstraint rangeConstraint) { + final @Nullable RangeConstraint rangeConstraint) { super(baseType, qname, unknownSchemaNodes, rangeConstraint); } diff --git a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedTypes.java b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedTypes.java index d5fbe61d6a..58b54db468 100644 --- a/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedTypes.java +++ b/model/yang-model-ri/src/main/java/org/opendaylight/yangtools/yang/model/ri/type/RestrictedTypes.java @@ -8,9 +8,9 @@ package org.opendaylight.yangtools.yang.model.ri.type; import com.google.common.annotations.Beta; -import java.math.BigDecimal; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; @@ -111,11 +111,11 @@ public final class RestrictedTypes { }; } - public static @NonNull RangeRestrictedTypeBuilder newDecima64Builder( + public static @NonNull RangeRestrictedTypeBuilder newDecima64Builder( final DecimalTypeDefinition baseType, final QName qname) { return new RangeRestrictedTypeBuilderWithBase<>(baseType, qname) { @Override - DecimalTypeDefinition buildType(final RangeConstraint rangeConstraint) { + DecimalTypeDefinition buildType(final RangeConstraint<@NonNull Decimal64> rangeConstraint) { return new RestrictedDecimalType(getBaseType(), getQName(), getUnknownSchemaNodes(), rangeConstraint); } }; diff --git a/model/yang-model-ri/src/test/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtilTest.java b/model/yang-model-ri/src/test/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtilTest.java index 2c5cf8b9c6..787c8c7c19 100644 --- a/model/yang-model-ri/src/test/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtilTest.java +++ b/model/yang-model-ri/src/test/java/org/opendaylight/yangtools/yang/model/ri/type/NumberUtilTest.java @@ -15,6 +15,7 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.util.function.Function; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint64; @@ -42,11 +43,11 @@ public class NumberUtilTest { } @Test - public void testRangeCoveredForBigDecimal() { - final BigDecimal min = new BigDecimal(100.0); - final BigDecimal superMin = new BigDecimal(50.0); - final BigDecimal max = new BigDecimal(200.0); - final BigDecimal superMax = new BigDecimal(300.0); + public void testRangeCoveredForDecimal64() { + final Decimal64 min = Decimal64.valueOf(100.0); + final Decimal64 superMin = Decimal64.valueOf(50.0); + final Decimal64 max = Decimal64.valueOf(200.0); + final Decimal64 superMax = Decimal64.valueOf(300.0); assertTrue(NumberUtil.isRangeCovered(min, max, superMin, superMax)); } @@ -137,15 +138,15 @@ public class NumberUtilTest { @Test public void testConverterToBigDecimal() { - BigDecimal bigDecNum = new BigDecimal(20.0); - final Function numberFunction = NumberUtil.converterTo(BigDecimal.class); + Decimal64 bigDecNum = Decimal64.valueOf(20.0); + final Function numberFunction = NumberUtil.converterTo(Decimal64.class); assertEquals(bigDecNum, numberFunction.apply(bigDecNum)); int intNum = 20; assertEquals(bigDecNum, numberFunction.apply(intNum)); double doubleNum = 20.0; - bigDecNum = new BigDecimal("20.0"); + bigDecNum = Decimal64.valueOf("20.0"); assertEquals(bigDecNum, numberFunction.apply(doubleNum)); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java index a839d34a54..1deed17aac 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/meta/RangeStatementSupport.java @@ -9,11 +9,11 @@ package org.opendaylight.yangtools.yang.parser.rfc7950.stmt.meta; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; -import java.math.BigDecimal; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint64; import org.opendaylight.yangtools.yang.model.api.YangStmtMapping; import org.opendaylight.yangtools.yang.model.api.meta.DeclarationReference; @@ -109,8 +109,7 @@ public final class RangeStatementSupport // Deal with decimal64, i.e. 'decimal-value' production of the RFC6020 ABNF if (value.indexOf('.') != -1) { try { - // FIXME: YANGTOOLS-556: Use Decimal64 here - return new BigDecimal(value); + return Decimal64.valueOf(value); } catch (NumberFormatException e) { throw new SourceException(ctx, e, "Value %s is not a valid decimal number", value); } diff --git a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java index 44cad1f9e0..32978a7fe6 100644 --- a/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java +++ b/parser/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/stmt/type/AbstractTypeStatementSupport.java @@ -11,9 +11,9 @@ import static com.google.common.base.Verify.verifyNotNull; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import java.math.BigDecimal; import java.util.Collection; import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Empty; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -331,7 +331,7 @@ abstract class AbstractTypeStatementSupport extends AbstractTypeSupport createDecimal(final Current ctx, final DecimalTypeDefinition baseType, final TypeStatement declared, final ImmutableList> substatements) { - final RangeRestrictedTypeBuilder builder = + final RangeRestrictedTypeBuilder builder = RestrictedTypes.newDecima64Builder(baseType, typeEffectiveQName(ctx)); for (EffectiveStatement stmt : substatements) { diff --git a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TypedefConstraintsTest.java b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TypedefConstraintsTest.java index 6b7bf818a0..33406be696 100644 --- a/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TypedefConstraintsTest.java +++ b/parser/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/TypedefConstraintsTest.java @@ -13,10 +13,10 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.google.common.collect.Range; -import java.math.BigDecimal; import java.util.Collection; import java.util.Set; import org.junit.Test; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; @@ -26,7 +26,6 @@ import org.opendaylight.yangtools.yang.model.api.type.DecimalTypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.TypeDefinitions; public class TypedefConstraintsTest { - @Test public void decimalRangeConstraintsTest() throws Exception { final SchemaContext context = StmtTestUtils.parseYangSources("/stmt-test/constraints"); @@ -65,8 +64,8 @@ public class TypedefConstraintsTest { assertEquals(1, decRangeConstraints.size()); final Range range = decRangeConstraints.iterator().next(); - assertEquals(new BigDecimal(1.5), range.lowerEndpoint()); - assertEquals(new BigDecimal(5.5), range.upperEndpoint()); + assertEquals(Decimal64.valueOf(1.5), range.lowerEndpoint()); + assertEquals(Decimal64.valueOf(5.5), range.upperEndpoint()); assertEquals(TypeDefinitions.DECIMAL64.bindTo(leafDecimal.getQName().getModule()), decType.getQName()); assertNull(decType.getBaseType()); -- 2.36.6