From 303304a227ad9bf422ef9cd951b891ba3492d337 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 2 Sep 2019 10:34:32 +0200 Subject: [PATCH 1/1] Change mapping of uint{8,16,32,64} This changes the mapping of uint types to non-widening yang.common classes and deals with them being used by yang.{data,model}.api: YANG type Old Java type New Java Type uint8 java.lang.Short org.opendaylight.yangtools.yang.common.Uint8 uint16 java.lang.Integer org.opendaylight.yangtools.yang.common.Uint16 uint32 java.lang.Long org.opendaylight.yangtools.yang.common.Uint32 uint64 java.math.BigInteger org.opendaylight.yangtools.yang.common.Uint64 This affects all getters, setters and value wrapper classes. For setters, code generator emits a deprecated setter, which performs the conversion internally. JIRA: MDSAL-330 JIRA: YANGTOOLS-1018 Change-Id: Ic3913adc4a5d707b01671a982c58221cb028f6d9 Signed-off-by: Robert Varga --- .../BindingToNormalizedNodeCodecTest.java | 5 +- .../dom/codec/test/CachingCodecTest.java | 12 ++- .../codec/test/InstanceIdentifierTest.java | 5 +- .../test/LeafrefSerializeDeserializeTest.java | 3 +- .../test/UnionTypeWithIdentityrefTest.java | 3 +- .../yang/types/AbstractTypeProvider.java | 25 ++---- .../binding/yang/types/BaseYangTypes.java | 27 +++---- .../impl/BitAndUnionTOEnclosingTest.java | 10 +-- .../impl/ChoiceCaseGenTypesTest.java | 2 +- ...InnerClassForBitsAndUnionInLeavesTest.java | 2 +- .../generator/impl/GeneratedTypesTest.java | 4 +- .../impl/TypeProviderIntegrationTest.java | 18 +++-- .../binding/generator/impl/UsesTest.java | 10 +-- .../binding/yang/types/BaseYangTypesTest.java | 21 ++--- .../binding/yang/types/TypeProviderTest.java | 9 ++- .../AbstractPrimitiveRangeGenerator.java | 25 ++++-- .../api/generator/AbstractRangeGenerator.java | 14 +++- .../AbstractUnsignedRangeGenerator.java | 26 +++++++ .../java/api/generator/BuilderTemplate.xtend | 29 ++++++- .../java/api/generator/ClassTemplate.xtend | 12 +++ .../api/generator/Uint16RangeGenerator.java | 31 ++++++++ .../api/generator/Uint32RangeGenerator.java | 33 ++++++++ .../api/generator/Uint64RangeGenerator.java | 56 ++++++++++++++ .../api/generator/Uint8RangeGenerator.java | 30 ++++++++ .../java/api/generator/UnionTemplate.xtend | 6 +- .../api/generator/test/CompilationTest.java | 13 ++-- .../bug/_6006/rev160607/UnionTypeBuilder.java | 4 +- .../opendaylight-test-leafcachingcodec.yang | 6 +- .../yangtools/yang/binding/CodeHelpers.java | 77 +++++++++++++++++++ .../types/rev171204/MplsLabelBuilder.java | 3 +- .../TimerValueMillisecondsBuilder.java | 3 +- .../rev171204/TimerValueSeconds16Builder.java | 3 +- .../rev171204/TimerValueSeconds32Builder.java | 3 +- .../rev190304/EthertypeBuilder.java | 5 +- 34 files changed, 433 insertions(+), 102 deletions(-) create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractUnsignedRangeGenerator.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint16RangeGenerator.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint32RangeGenerator.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint64RangeGenerator.java create mode 100644 binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint8RangeGenerator.java diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java index 999c414c9b..6094b485f2 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java @@ -23,6 +23,7 @@ import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint16; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; @@ -50,7 +51,7 @@ public class BindingToNormalizedNodeCodecTest { @Test public void fromNormalizedNodeTest() throws Exception { final SchemaContext schemaCtx = YangParserTestUtils.parseYangResource("/test.yang"); - final NormalizedNode data = prepareData(schemaCtx, 42); + final NormalizedNode data = prepareData(schemaCtx, Uint16.valueOf(42)); final Entry, DataObject> fromNormalizedNode = fromNormalizedNode(data, schemaCtx); final DataObject value = fromNormalizedNode.getValue(); @@ -64,7 +65,7 @@ public class BindingToNormalizedNodeCodecTest { final Object id = declaredField.get(invoked); final Field val = id.getClass().getDeclaredField("_value"); val.setAccessible(true); - assertEquals(42, val.get(id)); + assertEquals(Uint16.valueOf(42), val.get(id)); } /** diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/CachingCodecTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/CachingCodecTest.java index 5e470fd16c..6768bef5b7 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/CachingCodecTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/CachingCodecTest.java @@ -56,13 +56,19 @@ public class CachingCodecTest extends AbstractBindingCodecTest { private static final NodeIdentifier LEAF_ARG = new NodeIdentifier(QName.create(Cont.QNAME, "caching")); private static final InstanceIdentifier CONT_PATH = InstanceIdentifier.create(Cont.class); - // Note: '400' is assumed to not be interned by the JVM here - private static final Cont CONT_DATA = new ContBuilder().setCaching(new MyType(400)).setNonCaching("test").build(); - private static final Cont CONT2_DATA = new ContBuilder().setCaching(new MyType(400)).setNonCaching("test2").build(); + private static final Cont CONT_DATA = new ContBuilder().setCaching(new MyType(dataValue())).setNonCaching("test") + .build(); + private static final Cont CONT2_DATA = new ContBuilder().setCaching(new MyType(dataValue())).setNonCaching("test2") + .build(); private BindingDataObjectCodecTreeNode topNode; private BindingDataObjectCodecTreeNode contNode; + private static String dataValue() { + // We are battling interning here + return new StringBuilder("foo").toString(); + } + @Override @Before public void before() { diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/InstanceIdentifierTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/InstanceIdentifierTest.java index b0c4d50fc4..0579e6dd7e 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/InstanceIdentifierTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/InstanceIdentifierTest.java @@ -23,6 +23,7 @@ import org.opendaylight.yangtools.yang.binding.Identifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; @@ -62,11 +63,11 @@ public class InstanceIdentifierTest extends AbstractBindingCodecTest { NodeIdentifier.create(OspfStatLsdbBrief.QNAME), NodeIdentifierWithPredicates.of(OspfStatLsdbBrief.QNAME, ImmutableMap.of( QName.create(OspfStatLsdbBrief.QNAME, "AreaIndex"), 1, - QName.create(OspfStatLsdbBrief.QNAME, "LsaType"), (short) 2, + QName.create(OspfStatLsdbBrief.QNAME, "LsaType"), Uint8.valueOf(2), QName.create(OspfStatLsdbBrief.QNAME, "LsId"), 3, QName.create(OspfStatLsdbBrief.QNAME, "AdvRtr"), "foo")))); assertTrue(result instanceof KeyedInstanceIdentifier); final Identifier key = ((KeyedInstanceIdentifier) result).getKey(); - assertEquals(new OspfStatLsdbBriefKey("foo", 1, 3, (short)2), key); + assertEquals(new OspfStatLsdbBriefKey("foo", 1, 3, Uint8.valueOf(2)), key); } } diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/LeafrefSerializeDeserializeTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/LeafrefSerializeDeserializeTest.java index 1e2c5f8a24..1e6588af90 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/LeafrefSerializeDeserializeTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/LeafrefSerializeDeserializeTest.java @@ -20,6 +20,7 @@ import org.opendaylight.yang.gen.v1.bug8449.rev170516.ContInt32.RefUnionInt32; import org.opendaylight.yang.gen.v1.bug8449.rev170516.ContInt32Builder; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -52,7 +53,7 @@ public class LeafrefSerializeDeserializeTest extends AbstractBindingCodecTest { assertNotNull(fromYangInstanceIdentifier); final InstanceIdentifier BA_II_CONT = InstanceIdentifier.builder(ContInt32.class).build(); - final RefUnionInt32 refVal = new RefUnionInt32(5L); + final RefUnionInt32 refVal = new RefUnionInt32(Uint32.valueOf(5)); final ContInt32 data = new ContInt32Builder().setRefUnionInt32(refVal).build(); final Entry> normalizedNode = this.registry.toNormalizedNode(BA_II_CONT, data); diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/UnionTypeWithIdentityrefTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/UnionTypeWithIdentityrefTest.java index b4f052eced..57c94ffbaa 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/UnionTypeWithIdentityrefTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/UnionTypeWithIdentityrefTest.java @@ -21,6 +21,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.te import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -56,7 +57,7 @@ public class UnionTypeWithIdentityrefTest extends AbstractBindingCodecTest { public void bug6112Test() { DataObject unionNodeObj = createValueNode("1"); UnionType unionTypeObj = ((UnionNode) unionNodeObj).getValue(); - assertEquals(Short.valueOf((short)1), unionTypeObj.getUint8()); + assertEquals(Uint8.valueOf(1), unionTypeObj.getUint8()); assertEquals(null, unionTypeObj.getIdentityref()); } } diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java index 10e838b4d4..0d33ef4236 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java @@ -18,7 +18,6 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import java.math.BigDecimal; -import java.math.BigInteger; import java.util.ArrayList; import java.util.Base64; import java.util.Collection; @@ -56,6 +55,10 @@ import org.opendaylight.mdsal.binding.model.util.generated.type.builder.Generate import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.Revision; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; import org.opendaylight.yangtools.yang.model.api.DataSchemaNode; import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode; @@ -1423,25 +1426,13 @@ public abstract class AbstractTypeProvider implements TypeProvider { } else if (base instanceof StringTypeDefinition) { result = "\"" + defaultValue + "\""; } else if (BaseTypes.isUint8(base)) { - result = typeToValueOfDef(Short.class, defaultValue); + result = typeToValueOfDef(Uint8.class, defaultValue); } else if (BaseTypes.isUint16(base)) { - result = typeToValueOfDef(Integer.class, defaultValue); + result = typeToValueOfDef(Uint16.class, defaultValue); } else if (BaseTypes.isUint32(base)) { - result = typeToValueOfDef(Long.class, defaultValue); + result = typeToValueOfDef(Uint32.class, defaultValue); } else if (BaseTypes.isUint64(base)) { - switch (defaultValue) { - case "0": - result = "java.math.BigInteger.ZERO"; - break; - case "1": - result = "java.math.BigInteger.ONE"; - break; - case "10": - result = "java.math.BigInteger.TEN"; - break; - default: - result = typeToDef(BigInteger.class, defaultValue); - } + result = typeToValueOfDef(Uint64.class, defaultValue); } else if (base instanceof UnionTypeDefinition) { result = unionToDef(node); } else { diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java index e2781c0c64..3698e674f2 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java @@ -10,7 +10,6 @@ package org.opendaylight.mdsal.binding.yang.types; import com.google.common.collect.ImmutableMap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.math.BigDecimal; -import java.math.BigInteger; import org.opendaylight.mdsal.binding.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.model.api.JavaTypeName; import org.opendaylight.mdsal.binding.model.api.Restrictions; @@ -19,6 +18,10 @@ import org.opendaylight.mdsal.binding.model.util.Types; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Empty; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; @@ -69,24 +72,22 @@ public final class BaseYangTypes { /** * Type representation of uint8 YANG type. */ - public static final Type UINT8_TYPE = Types.typeForClass(Short.class, singleRangeRestrictions((short)0, - (short)255)); + public static final Type UINT8_TYPE = Types.typeForClass(Uint8.class); /** * Type representation of uint16 YANG type. */ - public static final Type UINT16_TYPE = Types.typeForClass(Integer.class, singleRangeRestrictions(0, 65535)); + public static final Type UINT16_TYPE = Types.typeForClass(Uint16.class); /** * Type representation of uint32 YANG type. */ - public static final Type UINT32_TYPE = Types.typeForClass(Long.class, singleRangeRestrictions(0L, 4294967295L)); + public static final Type UINT32_TYPE = Types.typeForClass(Uint32.class); /** * Type representation of uint64 YANG type. */ - public static final Type UINT64_TYPE = Types.typeForClass(BigInteger.class, - singleRangeRestrictions(BigInteger.ZERO, new BigInteger("18446744073709551615"))); + public static final Type UINT64_TYPE = Types.typeForClass(Uint64.class); public static final Type UNION_TYPE = new UnionType(); @@ -183,13 +184,13 @@ public final class BaseYangTypes { case "string": return Types.typeForClass(String.class, restrictions); case "uint8": - return Types.typeForClass(Short.class, restrictions); + return Types.typeForClass(Uint8.class, restrictions); case "uint16": - return Types.typeForClass(Integer.class, restrictions); + return Types.typeForClass(Uint16.class, restrictions); case "uint32": - return Types.typeForClass(Long.class, restrictions); + return Types.typeForClass(Uint32.class, restrictions); case "uint64": - return Types.typeForClass(BigInteger.class, restrictions); + return Types.typeForClass(Uint64.class, restrictions); case "union" : return UNION_TYPE; default: @@ -213,10 +214,6 @@ public final class BaseYangTypes { } }; - private static > Restrictions singleRangeRestrictions(final T min, final T max) { - return Types.getDefaultRestrictions(min, max); - } - // FIXME: 5.0.0: remove this class @Deprecated public static final class UnionType implements Type { diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java index f31db1fa06..aa79a748bf 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java @@ -90,7 +90,7 @@ public class BitAndUnionTOEnclosingTest { lf1Leaf.getIdentifier().immediatelyEnclosingClass().get().toString()); assertEquals("Lf generated TO has incorrect number of properties", 4, lf1Leaf.getProperties().size()); - containsAttributes(lf1Leaf, true, true, true, new NameTypePattern("uint32", "Long")); + containsAttributes(lf1Leaf, true, true, true, new NameTypePattern("uint32", "Uint32")); containsAttributes(lf1Leaf, true, true, true, new NameTypePattern("int8", "Byte")); containsAttributes(lf1Leaf, true, true, true, new NameTypePattern("string", "String")); containsAttributes(lf1Leaf, true, false, true, new NameTypePattern("lf$2", "Lf$2")); @@ -104,7 +104,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("Lf generated TO has incorrect number of properties", 2, lf2Leaf.getProperties().size()); containsAttributes(lf2Leaf, true, true, true, new NameTypePattern("string", "String")); - containsAttributes(lf2Leaf, true, true, true, new NameTypePattern("uint64", "BigInteger")); + containsAttributes(lf2Leaf, true, true, true, new NameTypePattern("uint64", "Uint64")); } @Test @@ -164,7 +164,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("TypeUnion1 generated TO has incorrect number of properties", 4, typeUnion1.getProperties().size()); - containsAttributes(typeUnion1, true, true, true, new NameTypePattern("uint32", "Long")); + containsAttributes(typeUnion1, true, true, true, new NameTypePattern("uint32", "Uint32")); containsAttributes(typeUnion1, true, true, true, new NameTypePattern("int8", "Byte")); containsAttributes(typeUnion1, true, true, true, new NameTypePattern("string", "String")); containsAttributes(typeUnion1, true, false, true, new NameTypePattern("typeUnion$2", "TypeUnion$2")); @@ -178,7 +178,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("TypeUnion2 generated TO has incorrect number of properties", 2, typeUnion2.getProperties().size()); containsAttributes(typeUnion2, true, true, true, new NameTypePattern("string", "String")); - containsAttributes(typeUnion2, true, true, true, new NameTypePattern("uint64", "BigInteger")); + containsAttributes(typeUnion2, true, true, true, new NameTypePattern("uint64", "Uint64")); } @@ -254,7 +254,7 @@ public class BitAndUnionTOEnclosingTest { assertEquals("uint32 property has incorrect type", "Integer", uint32Property.getReturnType().getName()); assertEquals("string property has incorrect type", "String", stringProperty.getReturnType().getName()); - assertEquals("uint8 property has incorrect type", "Short", uint8Property.getReturnType().getName()); + assertEquals("uint8 property has incorrect type", "Uint8", uint8Property.getReturnType().getName()); } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java index b1fd5bc1b7..93a7e1dc5c 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java @@ -121,7 +121,7 @@ public class ChoiceCaseGenTypesTest extends AbstractTypesTest { genType = checkGeneratedType(genTypes, "AnonymousLock", pcgPref + ".netconf.state.datastores.datastore.locks.lock.type"); // choice - containsMethods(genType, new NameTypePattern("getLockTime", "Long")); + containsMethods(genType, new NameTypePattern("getLockTime", "Uint32")); containsInterface("LockType", genType); genType = checkGeneratedType(genTypes, "LeafAugCase", pcgPref diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenerateInnerClassForBitsAndUnionInLeavesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenerateInnerClassForBitsAndUnionInLeavesTest.java index d4f358579f..e00845356d 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenerateInnerClassForBitsAndUnionInLeavesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenerateInnerClassForBitsAndUnionInLeavesTest.java @@ -102,7 +102,7 @@ public class GenerateInnerClassForBitsAndUnionInLeavesTest { } } else if (unionLeafProperty.getName().equals("uint8")) { uint8UnionPropertyFound = true; - if (unionLeafPropertyType.equals("Short")) { + if (unionLeafPropertyType.equals("Uint8")) { uint8UnionPropertyTypeOK = true; } } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedTypesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedTypesTest.java index 0824dd4175..c45534dcff 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedTypesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedTypesTest.java @@ -116,7 +116,7 @@ public class GeneratedTypesTest { } assertEquals(1, getFooMethodCounter); - assertEquals("Short", getFooMethodReturnTypeName); + assertEquals("Uint8", getFooMethodReturnTypeName); assertEquals(1, getBarMethodCounter); assertEquals("String", getBarMethodReturnTypeName); @@ -202,7 +202,7 @@ public class GeneratedTypesTest { } assertEquals(1, getFooMethodCounter); - assertEquals("Short", getFooMethodReturnTypeName); + assertEquals("Uint8", getFooMethodReturnTypeName); assertEquals(1, getBarMethodCounter); assertEquals("List", getBarMethodReturnTypeName); diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/TypeProviderIntegrationTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/TypeProviderIntegrationTest.java index b7ff55345a..e728a99f28 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/TypeProviderIntegrationTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/TypeProviderIntegrationTest.java @@ -225,12 +225,12 @@ public class TypeProviderIntegrationTest { final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint8"); LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get(); String actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("java.lang.Short.valueOf(\"11\")", actual); + assertEquals("org.opendaylight.yangtools.yang.common.Uint8.valueOf(\"11\")", actual); final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint8"); leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get(); actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("new " + PKG + "MyUint8(java.lang.Short.valueOf(\"11\"))", actual); + assertEquals("new " + PKG + "MyUint8(org.opendaylight.yangtools.yang.common.Uint8.valueOf(\"11\"))", actual); } @Test @@ -238,12 +238,12 @@ public class TypeProviderIntegrationTest { final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint16"); LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get(); String actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("java.lang.Integer.valueOf(\"111\")", actual); + assertEquals("org.opendaylight.yangtools.yang.common.Uint16.valueOf(\"111\")", actual); final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint16"); leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get(); actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("new " + PKG + "MyUint16(java.lang.Integer.valueOf(\"111\"))", actual); + assertEquals("new " + PKG + "MyUint16(org.opendaylight.yangtools.yang.common.Uint16.valueOf(\"111\"))", actual); } @Test @@ -251,12 +251,13 @@ public class TypeProviderIntegrationTest { final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint32"); LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get(); String actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("java.lang.Long.valueOf(\"1111\")", actual); + assertEquals("org.opendaylight.yangtools.yang.common.Uint32.valueOf(\"1111\")", actual); final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint32"); leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get(); actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("new " + PKG + "MyUint32(java.lang.Long.valueOf(\"1111\"))", actual); + assertEquals("new " + PKG + "MyUint32(org.opendaylight.yangtools.yang.common.Uint32.valueOf(\"1111\"))", + actual); } @Test @@ -264,12 +265,13 @@ public class TypeProviderIntegrationTest { final QName leafNode1 = QName.create(module.getQNameModule(), "leaf-uint64"); LeafSchemaNode leaf = (LeafSchemaNode) module.findDataChildByName(leafNode1).get(); String actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("new java.math.BigInteger(\"11111\")", actual); + assertEquals("org.opendaylight.yangtools.yang.common.Uint64.valueOf(\"11111\")", actual); final QName leafNode2 = QName.create(module.getQNameModule(), "ext-uint64"); leaf = (LeafSchemaNode) module.findDataChildByName(leafNode2).get(); actual = provider.getTypeDefaultConstruction(leaf); - assertEquals("new " + PKG + "MyUint64(new java.math.BigInteger(\"11111\"))", actual); + assertEquals("new " + PKG + "MyUint64(org.opendaylight.yangtools.yang.common.Uint64.valueOf(\"11111\"))", + actual); } @Test diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java index 60a57c08b2..f72334e9d1 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java @@ -171,7 +171,7 @@ public class UsesTest { containsMethods(groupingContainerTest.getMethodDefinitions(), new NameTypePattern( "getLeafGroupingContainerTest1", "String"), new NameTypePattern("getLeafGroupingContainerTest2", - "Short")); + "Uint8")); containsMethods(containerTest.getMethodDefinitions(), new NameTypePattern("getContainerLeafTest", "String")); } @@ -302,7 +302,7 @@ public class UsesTest { "getListGroupingListTest", "List")); containsMethods(listTest.getMethodDefinitions(), new NameTypePattern("getListLeafTest", "String")); containsMethods(containerGroupingListTest.getMethodDefinitions(), new NameTypePattern( - "getLeafContainerGroupingListTest", "Short")); + "getLeafContainerGroupingListTest", "Uint8")); containsMethods(listGroupingListTest.getMethodDefinitions(), new NameTypePattern("getLeafListGroupingListTest", "Integer")); } @@ -354,7 +354,7 @@ public class UsesTest { .size()); containsMethods(groupingModulTest.getMethodDefinitions(), new NameTypePattern("getLeafGroupingModulTest", - "String"), new NameTypePattern("getLeafGroupingModulTest2", "Short")); + "String"), new NameTypePattern("getLeafGroupingModulTest2", "Uint8")); } @Test @@ -442,7 +442,7 @@ public class UsesTest { containsMethods(groupingRpcInputTest.getMethodDefinitions(), new NameTypePattern( "getContainerGroupingRpcInputTest", "ContainerGroupingRpcInputTest"), new NameTypePattern( - "getLeaflistGroupingRpcInputTest", "List")); + "getLeaflistGroupingRpcInputTest", "List")); containsMethods(groupingRpcOutputTest.getMethodDefinitions(), new NameTypePattern( "getLeafGroupingRpcOutputTest", "Byte")); containsMethods(containerGroupingRpcInputTest.getMethodDefinitions(), new NameTypePattern( @@ -569,7 +569,7 @@ public class UsesTest { "getContainerGroupingNotificationTest", "ContainerGroupingNotificationTest"), new NameTypePattern( "getLeaffllistGroupingNotificationTest", "List")); containsMethods(containerGroupingNotificationTest.getMethodDefinitions(), new NameTypePattern( - "getLeafContainerGroupingNotificationTest", "Long")); + "getLeafContainerGroupingNotificationTest", "Uint32")); } } diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypesTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypesTest.java index 066d07392f..9f79e4a34b 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypesTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypesTest.java @@ -12,7 +12,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.math.BigDecimal; -import java.math.BigInteger; import java.util.Set; import org.junit.BeforeClass; import org.junit.Test; @@ -20,6 +19,10 @@ import org.opendaylight.mdsal.binding.generator.spi.TypeProvider; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil; import org.opendaylight.yangtools.yang.common.Empty; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.TypeDefinition; import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition; @@ -166,19 +169,19 @@ public class BaseYangTypesTest { javaType = typeProvider.javaTypeForSchemaDefinitionType(uint8, uint8); assertNotNull(javaType); - assertEquals(Short.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint8.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint16, uint16); assertNotNull(javaType); - assertEquals(Integer.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint16.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint32, uint32); assertNotNull(javaType); - assertEquals(Long.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint32.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint64, uint64); assertNotNull(javaType); - assertEquals(BigInteger.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint64.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(union, union); assertNotNull(javaType); @@ -239,22 +242,22 @@ public class BaseYangTypesTest { javaType = typeProvider.javaTypeForSchemaDefinitionType(uint8, uint8, BindingGeneratorUtil.getRestrictions(uint8)); assertNotNull(javaType); - assertEquals(Short.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint8.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint16, uint16, BindingGeneratorUtil.getRestrictions(uint16)); assertNotNull(javaType); - assertEquals(Integer.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint16.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint32, uint32, BindingGeneratorUtil.getRestrictions(uint32)); assertNotNull(javaType); - assertEquals(Long.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint32.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(uint64, uint64, BindingGeneratorUtil.getRestrictions(uint64)); assertNotNull(javaType); - assertEquals(BigInteger.class.getCanonicalName(), javaType.getFullyQualifiedName()); + assertEquals(Uint64.class.getCanonicalName(), javaType.getFullyQualifiedName()); javaType = typeProvider.javaTypeForSchemaDefinitionType(union, union, BindingGeneratorUtil.getRestrictions(union)); diff --git a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java index 82baa20bf4..fcfbc1f4a7 100644 --- a/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java +++ b/binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java @@ -803,28 +803,29 @@ public class TypeProviderTest { assertNotNull(result); assertTrue(!result.isEmpty()); assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914." - + "YangUint8(java.lang.Short.valueOf(\"128\"))", result); + + "YangUint8(org.opendaylight.yangtools.yang.common.Uint8.valueOf(\"128\"))", result); leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint16"); result = provider.getTypeDefaultConstruction(leaf, "1048576"); assertNotNull(result); assertTrue(!result.isEmpty()); assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914." - + "YangUint16(java.lang.Integer.valueOf(\"1048576\"))", result); + + "YangUint16(org.opendaylight.yangtools.yang.common.Uint16.valueOf(\"1048576\"))", result); leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint32"); result = provider.getTypeDefaultConstruction(leaf, "1099511627776"); assertNotNull(result); assertTrue(!result.isEmpty()); assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914." - + "YangUint32(java.lang.Long.valueOf(\"1099511627776\"))", result); + + "YangUint32(org.opendaylight.yangtools.yang.common.Uint32.valueOf(\"1099511627776\"))", result); leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint64"); result = provider.getTypeDefaultConstruction(leaf, "1208925819614629174706176"); assertNotNull(result); assertTrue(!result.isEmpty()); assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914." - + "YangUint64(new java.math.BigInteger(\"1208925819614629174706176\"))", result); + + "YangUint64(org.opendaylight.yangtools.yang.common.Uint64.valueOf(\"1208925819614629174706176\"))", + result); //FIXME: Is this correct scenario and correct result? leaf = provideLeafForGetDefaultConstructionTestCase("complex-union"); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractPrimitiveRangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractPrimitiveRangeGenerator.java index 4ba4ff1205..c435044ace 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractPrimitiveRangeGenerator.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractPrimitiveRangeGenerator.java @@ -52,7 +52,8 @@ abstract class AbstractPrimitiveRangeGenerator> return minValue.compareTo(minToEnforce) < 0; } - private Collection createExpressions(final RangeConstraint constraint) { + private Collection createExpressions(final RangeConstraint constraint, + final Function, String> classImporter) { final Set> constraints = constraint.getAllowedRanges().asRanges(); final Collection ret = new ArrayList<>(constraints.size()); @@ -70,13 +71,13 @@ abstract class AbstractPrimitiveRangeGenerator> final StringBuilder sb = new StringBuilder(); if (needMin) { - sb.append("value >= ").append(format(min)); + appendMinCheck(sb, min, classImporter); } if (needMax) { if (needMin) { sb.append(" && "); } - sb.append("value <= ").append(format(max)); + appendMaxCheck(sb, max, classImporter); } ret.add(sb.toString()); @@ -85,6 +86,18 @@ abstract class AbstractPrimitiveRangeGenerator> return ret; } + void appendMaxCheck(final StringBuilder sb, final T max, final Function, String> classImporter) { + sb.append("value <= ").append(format(max)); + } + + void appendMinCheck(final StringBuilder sb, final T min, final Function, String> classImporter) { + sb.append("value >= ").append(format(min)); + } + + String codeHelpersThrow() { + return "throwInvalidRange"; + } + private String createRangeString(final RangeConstraint constraint) { final Set> constraints = constraint.getAllowedRanges().asRanges(); final List> ranges = new ArrayList<>(constraints.size()); @@ -100,7 +113,7 @@ abstract class AbstractPrimitiveRangeGenerator> protected final String generateRangeCheckerImplementation(final String checkerName, final RangeConstraint constraints, final Function, String> classImporter) { final StringBuilder sb = new StringBuilder(); - final Collection expressions = createExpressions(constraints); + final Collection expressions = createExpressions(constraints, classImporter); sb.append("private static void ").append(checkerName).append("(final ").append(primitiveName) .append(" value) {\n"); @@ -112,8 +125,8 @@ abstract class AbstractPrimitiveRangeGenerator> sb.append(" }\n"); } - sb.append(" ").append(classImporter.apply(CodeHelpers.class)).append(".throwInvalidRange(\"") - .append(createRangeString(constraints)).append("\", value);\n"); + sb.append(" ").append(classImporter.apply(CodeHelpers.class)).append('.').append(codeHelpersThrow()) + .append("(\"").append(createRangeString(constraints)).append("\", value);\n"); } return sb.append("}\n").toString(); diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractRangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractRangeGenerator.java index 600219c321..a51dcf2ed5 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractRangeGenerator.java +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractRangeGenerator.java @@ -37,10 +37,14 @@ abstract class AbstractRangeGenerator> { addGenerator(b, new LongRangeGenerator()); addGenerator(b, new BigDecimalRangeGenerator()); addGenerator(b, new BigIntegerRangeGenerator()); + addGenerator(b, new Uint8RangeGenerator()); + addGenerator(b, new Uint16RangeGenerator()); + addGenerator(b, new Uint32RangeGenerator()); + addGenerator(b, new Uint64RangeGenerator()); GENERATORS = b.build(); } - private final Class type; + private final @NonNull Class type; protected AbstractRangeGenerator(final Class typeClass) { this.type = requireNonNull(typeClass); @@ -120,7 +124,7 @@ abstract class AbstractRangeGenerator> { protected abstract @NonNull String generateRangeCheckerImplementation(@NonNull String checkerName, @NonNull RangeConstraint constraints, Function, String> classImporter); - private static String rangeCheckerName(final String member) { + private static @NonNull String rangeCheckerName(final String member) { return "check" + member + "Range"; } @@ -130,6 +134,10 @@ abstract class AbstractRangeGenerator> { } String generateRangeCheckerCall(final @NonNull String member, final @NonNull String valueReference) { - return rangeCheckerName(member) + '(' + valueReference + ");\n"; + return rangeCheckerName(member) + '(' + valueReference + primitiveRef() + ");\n"; + } + + String primitiveRef() { + return ""; } } diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractUnsignedRangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractUnsignedRangeGenerator.java new file mode 100644 index 0000000000..f8ef15af4c --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractUnsignedRangeGenerator.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2019 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.mdsal.binding.java.api.generator; + +import org.eclipse.jdt.annotation.NonNull; + +abstract class AbstractUnsignedRangeGenerator> + extends AbstractPrimitiveRangeGenerator { + private final @NonNull String primitiveRef; + + AbstractUnsignedRangeGenerator(final Class typeClass, final String primitiveName, final T minValue, + final T maxValue) { + super(typeClass, primitiveName, minValue, maxValue); + primitiveRef = "." + primitiveName + "Value()"; + } + + @Override + final String primitiveRef() { + return primitiveRef; + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index 240a6515d7..5fbb7e26e7 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -12,6 +12,8 @@ import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTA import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD import com.google.common.collect.ImmutableList +import com.google.common.collect.ImmutableMap +import java.math.BigInteger import java.util.ArrayList import java.util.Collection import java.util.HashMap @@ -33,6 +35,10 @@ import org.opendaylight.yangtools.concepts.Builder import org.opendaylight.yangtools.yang.binding.AugmentationHolder import org.opendaylight.yangtools.yang.binding.CodeHelpers import org.opendaylight.yangtools.yang.binding.DataObject +import org.opendaylight.yangtools.yang.common.Uint8 +import org.opendaylight.yangtools.yang.common.Uint16 +import org.opendaylight.yangtools.yang.common.Uint64 +import org.opendaylight.yangtools.yang.common.Uint32 /** * Template for generating JAVA builder classes. @@ -43,6 +49,13 @@ class BuilderTemplate extends AbstractBuilderTemplate { */ public static val BUILDER = "Builder"; + static val UINT_TYPES = ImmutableMap.of( + Types.typeForClass(Uint8), Types.typeForClass(Short), + Types.typeForClass(Uint16), Types.typeForClass(Integer), + Types.typeForClass(Uint32), Types.typeForClass(Long), + Types.typeForClass(Uint64), Types.typeForClass(BigInteger) + ); + /** * Constructs new instance of this class. * @throws IllegalArgumentException if genType equals null @@ -284,7 +297,8 @@ class BuilderTemplate extends AbstractBuilderTemplate { «generateCheckers(field, restrictions, actualType)» «ENDIF» - public «type.getName» set«field.getName.toFirstUpper»(final «field.returnType.importedName» value) { + «val setterName = "set" + field.getName.toFirstUpper» + public «type.getName» «setterName»(final «field.returnType.importedName» value) { «IF restrictions !== null» if (value != null) { «checkArgument(field, restrictions, actualType, "value")» @@ -293,6 +307,19 @@ class BuilderTemplate extends AbstractBuilderTemplate { this.«field.fieldName.toString» = value; return this; } + «val uintType = UINT_TYPES.get(field.returnType)» + «IF uintType !== null» + + /** + * Utility migration setter. + * + * @deprecated Use {#link «setterName»(«field.returnType.importedName»)} instead. + */ + @Deprecated(forRemoval = true) + public «type.getName» «setterName»(final «uintType.importedName» value) { + return «setterName»(«CodeHelpers.importedName».compatUint(value)); + } + «ENDIF» ''' private def Type getActualType(ParameterizedType ptype) { diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend index 7c424cc6d3..658c341ee2 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend @@ -35,6 +35,10 @@ import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.util.TypeConstants import org.opendaylight.yangtools.yang.binding.CodeHelpers import org.opendaylight.yangtools.yang.common.Empty +import org.opendaylight.yangtools.yang.common.Uint16 +import org.opendaylight.yangtools.yang.common.Uint32 +import org.opendaylight.yangtools.yang.common.Uint64 +import org.opendaylight.yangtools.yang.common.Uint8 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition /** @@ -356,6 +360,14 @@ class ClassTemplate extends BaseTemplate { return new «genTO.name»(«Integer.importedName».valueOf(defaultValue)); «ELSEIF "java.lang.Long".equals(prop.returnType.fullyQualifiedName)» return new «genTO.name»(«Long.importedName».valueOf(defaultValue)); + «ELSEIF "org.opendaylight.yangtools.yang.common.Uint8".equals(prop.returnType.fullyQualifiedName)» + return new «genTO.name»(«Uint8.importedName».valueOf(defaultValue)); + «ELSEIF "org.opendaylight.yangtools.yang.common.Uint16".equals(prop.returnType.fullyQualifiedName)» + return new «genTO.name»(«Uint16.importedName».valueOf(defaultValue)); + «ELSEIF "org.opendaylight.yangtools.yang.common.Uint32".equals(prop.returnType.fullyQualifiedName)» + return new «genTO.name»(«Uint32.importedName».valueOf(defaultValue)); + «ELSEIF "org.opendaylight.yangtools.yang.common.Uint64".equals(prop.returnType.fullyQualifiedName)» + return new «genTO.name»(«Uint64.importedName».valueOf(defaultValue)); «ELSE» return new «genTO.name»(new «prop.returnType.importedName»(defaultValue)); «ENDIF» diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint16RangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint16RangeGenerator.java new file mode 100644 index 0000000000..fe6c5ffe32 --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint16RangeGenerator.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2019 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.mdsal.binding.java.api.generator; + +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint8; + +final class Uint16RangeGenerator extends AbstractUnsignedRangeGenerator { + Uint16RangeGenerator() { + super(Uint16.class, int.class.getName(), Uint16.ZERO, Uint16.MAX_VALUE); + } + + @Override + @Deprecated + protected Uint16 convert(final Number value) { + if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Uint8) { + return Uint16.valueOf(value.intValue()); + } + return Uint16.valueOf(value.toString()); + } + + @Override + protected String format(final Uint16 value) { + return value.toCanonicalString(); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint32RangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint32RangeGenerator.java new file mode 100644 index 0000000000..e5c4fc717d --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint32RangeGenerator.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2019 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.mdsal.binding.java.api.generator; + +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint8; + +final class Uint32RangeGenerator extends AbstractUnsignedRangeGenerator { + Uint32RangeGenerator() { + super(Uint32.class, long.class.getName(), Uint32.ZERO, Uint32.MAX_VALUE); + } + + @Override + @Deprecated + protected Uint32 convert(final Number value) { + if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long + || value instanceof Uint8 || value instanceof Uint16) { + return Uint32.valueOf(value.longValue()); + } + return Uint32.valueOf(value.toString()); + } + + @Override + protected String format(final Uint32 value) { + return value.toCanonicalString() + 'L'; + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint64RangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint64RangeGenerator.java new file mode 100644 index 0000000000..7bd8ba5caf --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint64RangeGenerator.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2019 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.mdsal.binding.java.api.generator; + +import java.util.function.Function; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; + +final class Uint64RangeGenerator extends AbstractUnsignedRangeGenerator { + Uint64RangeGenerator() { + super(Uint64.class, long.class.getName(), Uint64.ZERO, Uint64.MAX_VALUE); + } + + @Override + @Deprecated + protected Uint64 convert(final Number value) { + if (value instanceof Byte || value instanceof Short || value instanceof Integer || value instanceof Long + || value instanceof Uint8 || value instanceof Uint16 || value instanceof Uint32) { + return Uint64.valueOf(value.longValue()); + } + return Uint64.valueOf(value.toString()); + } + + @Override + protected String format(final Uint64 value) { + throw new UnsupportedOperationException(); + } + + @Override + String codeHelpersThrow() { + return "throwInvalidRangeUnsigned"; + } + + @Override + void appendMaxCheck(final StringBuilder sb, final Uint64 max, final Function, String> classImporter) { + appendCompare(sb, classImporter, max, "<="); + } + + @Override + void appendMinCheck(final StringBuilder sb, final Uint64 min, final Function, String> classImporter) { + appendCompare(sb, classImporter, min, ">="); + } + + private static StringBuilder appendCompare(final StringBuilder sb, final Function, String> classImporter, + final Uint64 val, final String operator) { + return sb.append(classImporter.apply(Long.class)).append(".compareUnsigned(value, ").append(val.longValue()) + .append("L) ").append(operator).append(" 0"); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint8RangeGenerator.java b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint8RangeGenerator.java new file mode 100644 index 0000000000..159fc152c3 --- /dev/null +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint8RangeGenerator.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019 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.mdsal.binding.java.api.generator; + +import org.opendaylight.yangtools.yang.common.Uint8; + +final class Uint8RangeGenerator extends AbstractUnsignedRangeGenerator { + Uint8RangeGenerator() { + super(Uint8.class, short.class.getName(), Uint8.ZERO, Uint8.MAX_VALUE); + } + + @Override + @Deprecated + protected Uint8 convert(final Number value) { + if (value instanceof Byte) { + return Uint8.valueOf(value.byteValue()); + } + return Uint8.valueOf(value.toString()); + } + + @Override + protected String format(final Uint8 value) { + return "(short)" + value.toCanonicalString(); + } +} diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend index 23b0e6b14c..f87327d4af 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend @@ -118,8 +118,12 @@ class UnionTemplate extends ClassTemplate { return new «String.importedName»(«field»); «ELSEIF propRet.fullyQualifiedName.startsWith("java.lang") || propRet instanceof Enumeration || propRet.fullyQualifiedName.startsWith("java.math")» - ««« type int*, uint, decimal64 or enumeration* + ««« type int*, decimal64 or enumeration* return «field».toString(); + «ELSEIF "org.opendaylight.yangtools.yang.common".equals(propRet.packageName) + && propRet.name.startsWith("Uint")» + ««« type uint* + return «field».toCanonicalString(); «ELSEIF propRet instanceof GeneratedTransferObject && (propRet as GeneratedTransferObject).unionType» ««« union type return «field».stringValue(); diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java index a50ac877b3..96c12484b5 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java @@ -24,7 +24,6 @@ import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.WildcardType; import java.math.BigDecimal; -import java.math.BigInteger; import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; @@ -37,6 +36,10 @@ import org.junit.Test; import org.opendaylight.yangtools.yang.binding.ChildOf; import org.opendaylight.yangtools.yang.binding.annotations.RoutingContext; import org.opendaylight.yangtools.yang.common.Empty; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; /** * Test correct code generation. @@ -402,10 +405,10 @@ public class CompilationTest extends BaseCompilationTest { CompilationTestUtils.assertContainsMethod(nodesClass, Long.class, "getId64"); CompilationTestUtils.assertContainsMethod(nodesClass, Long.class, "getIdLeafref"); CompilationTestUtils.assertContainsMethod(nodesClass, String.class, "getIdString"); - CompilationTestUtils.assertContainsMethod(nodesClass, Short.class, "getIdU8"); - CompilationTestUtils.assertContainsMethod(nodesClass, Integer.class, "getIdU16"); - CompilationTestUtils.assertContainsMethod(nodesClass, Long.class, "getIdU32"); - CompilationTestUtils.assertContainsMethod(nodesClass, BigInteger.class, "getIdU64"); + CompilationTestUtils.assertContainsMethod(nodesClass, Uint8.class, "getIdU8"); + CompilationTestUtils.assertContainsMethod(nodesClass, Uint16.class, "getIdU16"); + CompilationTestUtils.assertContainsMethod(nodesClass, Uint32.class, "getIdU32"); + CompilationTestUtils.assertContainsMethod(nodesClass, Uint64.class, "getIdU64"); CompilationTestUtils.assertContainsMethod(nodesClass, pkg + ".Nodes$IdUnion", "getIdUnion", loader); final Object builderObj = builderClass.getDeclaredConstructor().newInstance(); diff --git a/binding/mdsal-binding-test-model/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/mdsal/test/bug/_6006/rev160607/UnionTypeBuilder.java b/binding/mdsal-binding-test-model/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/mdsal/test/bug/_6006/rev160607/UnionTypeBuilder.java index cf2bce2dc6..bfde6691ff 100644 --- a/binding/mdsal-binding-test-model/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/mdsal/test/bug/_6006/rev160607/UnionTypeBuilder.java +++ b/binding/mdsal-binding-test-model/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/mdsal/test/bug/_6006/rev160607/UnionTypeBuilder.java @@ -1,5 +1,7 @@ package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsal.test.bug._6006.rev160607; +import org.opendaylight.yangtools.yang.common.Uint8; + /** * The purpose of generated class in src/main/java for Union types is to create new instances of unions from a string representation. * In some cases it is very difficult to automate it since there can be unions such as (uint32 - uint16), or (string - uint32). @@ -20,7 +22,7 @@ public class UnionTypeBuilder { } try { - return new UnionType(Short.valueOf(defaultValue)); + return new UnionType(Uint8.valueOf(defaultValue)); } catch (NumberFormatException e) { /* do nothing */ } diff --git a/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-leafcachingcodec.yang b/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-leafcachingcodec.yang index 748f1eb90b..2923c9e3b0 100644 --- a/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-leafcachingcodec.yang +++ b/binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-leafcachingcodec.yang @@ -5,12 +5,12 @@ module test-leaf-caching-codec { revision 2019-02-01; typedef my-type { - type uint16 { - range "1..4094"; + type string { + length 2..5; } } - container cont{ + container cont { leaf caching { type my-type; } diff --git a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java index a3fde03a2f..091f478222 100644 --- a/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java +++ b/binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java @@ -14,12 +14,17 @@ import static java.util.Objects.requireNonNull; import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.VerifyException; import com.google.common.collect.ImmutableList; +import java.math.BigInteger; import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; /** * Helper methods for generated binding code. This class concentrates useful primitives generated code may call @@ -230,6 +235,18 @@ public final class CodeHelpers { throwInvalidRange(Arrays.toString(expected), actual); } + /** + * Throw an IllegalArgument exception describing a range violation of an Uint64 type. + * + * @param expected String describing expected ranges + * @param actual Actual observed value + * @throws IllegalArgumentException always + */ + public static void throwInvalidRangeUnsigned(final String expected, final long actual) { + throw new IllegalArgumentException("Invalid range: " + Long.toUnsignedString(actual) + ", expected: " + expected + + "."); + } + /** * Check whether specified List is null and if so return an immutable list instead. This method supports * non-null default getter methods. @@ -265,6 +282,66 @@ public final class CodeHelpers { return wrapHashCode(Arrays.hashCode(obj)); } + /** + * Compatibility utility for converting a legacy {@link Short} {@code uint8} value to its {@link Uint8} + * counterpart. + * + * @param value Legacy value + * @return Converted value + * @throws IllegalArgumentException if the value does not fit an Uint8 + * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated + * compatibility methods. + */ + @Deprecated + public static @Nullable Uint8 compatUint(final @Nullable Short value) { + return value == null ? null : Uint8.valueOf(value.shortValue()); + } + + /** + * Compatibility utility for converting a legacy {@link Integer} {@code uint16} value to its {@link Uint16} + * counterpart. + * + * @param value Legacy value + * @return Converted value + * @throws IllegalArgumentException if the value does not fit an Uint16 + * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated + * compatibility methods. + */ + @Deprecated + public static @Nullable Uint16 compatUint(final @Nullable Integer value) { + return value == null ? null : Uint16.valueOf(value.intValue()); + } + + /** + * Compatibility utility for converting a legacy {@link Long} {@code uint32} value to its {@link Uint32} + * counterpart. + * + * @param value Legacy value + * @return Converted value + * @throws IllegalArgumentException if the value does not fit an Uint32 + * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated + * compatibility methods. + */ + @Deprecated + public static @Nullable Uint32 compatUint(final @Nullable Long value) { + return value == null ? null : Uint32.valueOf(value.longValue()); + } + + /** + * Compatibility utility for converting a legacy {@link BigInteger} {@code uint64} value to its {@link Uint64} + * counterpart. + * + * @param value Legacy value + * @return Converted value + * @throws IllegalArgumentException if the value does not fit an Uint64 + * @deprecated This method is provided for migration purposes only, do not use it outside of deprecated + * compatibility methods. + */ + @Deprecated + public static @Nullable Uint64 compatUint(final @Nullable BigInteger value) { + return value == null ? null : Uint64.valueOf(value); + } + /** * The constant '31' is the result of folding this code: *
diff --git a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/MplsLabelBuilder.java b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/MplsLabelBuilder.java
index ba69650bc7..4543a086bd 100644
--- a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/MplsLabelBuilder.java
+++ b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/MplsLabelBuilder.java
@@ -16,6 +16,7 @@ import java.util.Map.Entry;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yangtools.util.ClassLoaderUtils;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -61,7 +62,7 @@ public final class MplsLabelBuilder {
             }
         }
 
-        return new MplsLabel(new MplsLabelGeneralUse(Long.valueOf(defaultValue)));
+        return new MplsLabel(new MplsLabelGeneralUse(Uint32.valueOf(defaultValue)));
     }
 
     static Optional loadClass(final ClassLoader loader, final String key) {
diff --git a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueMillisecondsBuilder.java b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueMillisecondsBuilder.java
index 0d172a53ae..0fd7472847 100644
--- a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueMillisecondsBuilder.java
+++ b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueMillisecondsBuilder.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import java.util.Arrays;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev171204.TimerValueMilliseconds.Enumeration;
+import org.opendaylight.yangtools.yang.common.Uint32;
 
 /**
  * Builder for {@link TimerValueMilliseconds} instances.
@@ -36,7 +37,7 @@ public final class TimerValueMillisecondsBuilder {
 
     public static TimerValueMilliseconds getDefaultInstance(final String defaultValue) {
         return Enumeration.forName(defaultValue).map(ENUMERATED::get)
-                .orElse(new TimerValueMilliseconds(Long.valueOf(defaultValue)));
+                .orElse(new TimerValueMilliseconds(Uint32.valueOf(defaultValue)));
     }
 
     public static TimerValueMilliseconds forEnumeration(final Enumeration enumeration) {
diff --git a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds16Builder.java b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds16Builder.java
index ad4645ca7e..fd63f6fdd7 100644
--- a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds16Builder.java
+++ b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds16Builder.java
@@ -16,6 +16,7 @@ import com.google.common.collect.Maps;
 import java.util.Arrays;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev171204.TimerValueSeconds16.Enumeration;
+import org.opendaylight.yangtools.yang.common.Uint16;
 
 /**
   * Builder for {@link TimerValueSeconds16} instances.
@@ -35,7 +36,7 @@ public final class TimerValueSeconds16Builder {
 
      public static TimerValueSeconds16 getDefaultInstance(final String defaultValue) {
          return Enumeration.forName(defaultValue).map(ENUMERATED::get)
-                 .orElse(new TimerValueSeconds16(Integer.valueOf(defaultValue)));
+                 .orElse(new TimerValueSeconds16(Uint16.valueOf(defaultValue)));
      }
 
      public static TimerValueSeconds16 forEnumeration(final Enumeration enumeration) {
diff --git a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds32Builder.java b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds32Builder.java
index 2e7a32a527..3675368d97 100644
--- a/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds32Builder.java
+++ b/model/ietf/rfc8294-ietf-routing-types/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/routing/types/rev171204/TimerValueSeconds32Builder.java
@@ -17,6 +17,7 @@ import com.google.common.collect.Maps;
 import java.util.Arrays;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.types.rev171204.TimerValueSeconds32.Enumeration;
+import org.opendaylight.yangtools.yang.common.Uint32;
 
 /**
  * Builder for {@link TimerValueSeconds32} instances.
@@ -35,7 +36,7 @@ public final class TimerValueSeconds32Builder {
 
     public static TimerValueSeconds32 getDefaultInstance(final String defaultValue) {
         return Enumeration.forName(defaultValue).map(ENUMERATED::get)
-                .orElse(new TimerValueSeconds32(Long.valueOf(defaultValue)));
+                .orElse(new TimerValueSeconds32(Uint32.valueOf(defaultValue)));
     }
 
     public static TimerValueSeconds32 forEnumeration(final Enumeration enumeration) {
diff --git a/model/ietf/rfc8519-ietf-ethertypes/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/ethertypes/rev190304/EthertypeBuilder.java b/model/ietf/rfc8519-ietf-ethertypes/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/ethertypes/rev190304/EthertypeBuilder.java
index e7ebe72307..2655791e96 100644
--- a/model/ietf/rfc8519-ietf-ethertypes/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/ethertypes/rev190304/EthertypeBuilder.java
+++ b/model/ietf/rfc8519-ietf-ethertypes/src/main/java/org/opendaylight/yang/gen/v1/urn/ietf/params/xml/ns/yang/ietf/ethertypes/rev190304/EthertypeBuilder.java
@@ -17,6 +17,7 @@ import java.util.EnumMap;
 import java.util.Objects;
 import java.util.Optional;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ethertypes.rev190304.Ethertype.Enumeration;
 
 public final class EthertypeBuilder {
@@ -42,7 +43,7 @@ public final class EthertypeBuilder {
         if (length > 0 && length < 6 && DIGITS.matchesAllOf(defaultValue)) {
             final int value = Integer.parseInt(defaultValue);
             if (value < 65536) {
-                return new Ethertype(value);
+                return new Ethertype(Uint16.valueOf(value));
             }
 
             // Fall through and interpret as a string
@@ -95,6 +96,6 @@ public final class EthertypeBuilder {
 
     private static int extractValue(final Ethertype type) {
         final Enumeration known = type.getEnumeration();
-        return known != null ? known.getIntValue() : verifyNotNull(type.getUint16());
+        return known != null ? known.getIntValue() : verifyNotNull(type.getUint16()).intValue();
     }
 }
-- 
2.36.6