Change mapping of uint{8,16,32,64} 55/83955/25
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 2 Sep 2019 08:34:32 +0000 (10:34 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 3 Sep 2019 23:05:33 +0000 (01:05 +0200)
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 <robert.varga@pantheon.tech>
34 files changed:
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingToNormalizedNodeCodecTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/CachingCodecTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/InstanceIdentifierTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/LeafrefSerializeDeserializeTest.java
binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/test/UnionTypeWithIdentityrefTest.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/AbstractTypeProvider.java
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypes.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/BitAndUnionTOEnclosingTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/ChoiceCaseGenTypesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GenerateInnerClassForBitsAndUnionInLeavesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedTypesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/TypeProviderIntegrationTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/generator/impl/UsesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/BaseYangTypesTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderTest.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractPrimitiveRangeGenerator.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractRangeGenerator.java
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractUnsignedRangeGenerator.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint16RangeGenerator.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint32RangeGenerator.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint64RangeGenerator.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/Uint8RangeGenerator.java [new file with mode: 0644]
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/UnionTemplate.xtend
binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/test/CompilationTest.java
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
binding/mdsal-binding-test-model/src/main/yang/opendaylight-test-leafcachingcodec.yang
binding/yang-binding/src/main/java/org/opendaylight/yangtools/yang/binding/CodeHelpers.java
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
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
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
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
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 999c414c9ba79d73283a545044dd92aa441b4e10..6094b485f28b763a4cb8af69c667b81efb4c6dfe 100644 (file)
@@ -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<InstanceIdentifier<?>, 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));
     }
 
     /**
index 5e470fd16c76e74df19f98225374e83aa18bb1b0..6768bef5b70a6862e7139cc294c15806772c98c6 100644 (file)
@@ -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> 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<Top> topNode;
     private BindingDataObjectCodecTreeNode<Cont> contNode;
 
+    private static String dataValue() {
+        // We are battling interning here
+        return new StringBuilder("foo").toString();
+    }
+
     @Override
     @Before
     public void before() {
index b0c4d50fc4defdc5274e4f60225310f7694029b6..0579e6dd7eb637d0d146ecad4fcbc50f2a4a1d65 100644 (file)
@@ -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);
     }
 }
index 1e2c5f8a24a26b1928f784a518f04868d817d524..1e6588af901465dd17cb22f810dc503cd87f7a3b 100644 (file)
@@ -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<ContInt32> 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<YangInstanceIdentifier, NormalizedNode<?, ?>> normalizedNode =
                 this.registry.toNormalizedNode(BA_II_CONT, data);
index b4f052eced7a6c25a418769add39707c34e63219..57c94ffbaaaca68359c6d442f7aa8984f70c8ebf 100644 (file)
@@ -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());
     }
 }
index 10e838b4d4eef67ac8a73f2c565ecb2fb7835269..0d33ef4236717c026968c285ce02e47553dad3e1 100644 (file)
@@ -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 {
index e2781c0c64aadb8f4ec7b84a0ffd3b75d25b5c91..3698e674f2213408ac1d3ee6a758a640cb50f948 100644 (file)
@@ -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 {
     /**
      * <code>Type</code> representation of <code>uint8</code> 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);
 
     /**
      * <code>Type</code> representation of <code>uint16</code> 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);
 
     /**
      * <code>Type</code> representation of <code>uint32</code> 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);
 
     /**
      * <code>Type</code> representation of <code>uint64</code> 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 <T extends Number & Comparable<T>> 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 {
index f31db1fa067c0ff191e6162ce45f99b04ef8966c..aa79a748bf1a73580ffbf2bb04b01ddff10c98f2 100644 (file)
@@ -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());
 
     }
 
index b1fd5bc1b7a71150ffa1e632ac3c62f4816e9b25..93a7e1dc5c74bce30715cbee097a26500d3df3cb 100644 (file)
@@ -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
index d4f358579f53fe191fa7b846e5d6a30208e11a56..e00845356d7b972b1d27419ccb7b31120507fb2f 100644 (file)
@@ -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;
                                         }
                                     }
index 0824dd41750043c9ae7ef310c58ea9727bccd761..c45534dcffcdc87ab0c9d3a4b1d004b6cf8fc3be 100644 (file)
@@ -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);
index b7ff55345aa0a2c662eacf318d3374d3809ad711..e728a99f2898c00f0db8dd5c405baad34726bd6b 100644 (file)
@@ -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
index 60a57c08b20755b8a01660977a2593206c0234eb..f72334e9d18d77ef0153765296c5f289afbfb1ae 100644 (file)
@@ -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<ListGroupingListTest>"));
         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<Short>"));
+                "getLeaflistGroupingRpcInputTest", "List<Uint8>"));
         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<String>"));
         containsMethods(containerGroupingNotificationTest.getMethodDefinitions(), new NameTypePattern(
-                "getLeafContainerGroupingNotificationTest", "Long"));
+                "getLeafContainerGroupingNotificationTest", "Uint32"));
     }
 
 }
index 066d07392fcdb9d4c3a8fe6432dc5d1aa5ca60fc..9f79e4a34b4afddd073754ec8e5acb899e7f03af 100644 (file)
@@ -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));
index 82baa20bf453c60f686e3a488648a35107500bcb..fcfbc1f4a7a8f8a0c187952c1aa98f08f7da0c96 100644 (file)
@@ -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");
index 4ba4ff1205b51d37cdc0f4a11f11385cfb5dffaa..c435044aced3d906dac83bf20f9dea85af749f86 100644 (file)
@@ -52,7 +52,8 @@ abstract class AbstractPrimitiveRangeGenerator<T extends Number & Comparable<T>>
         return minValue.compareTo(minToEnforce) < 0;
     }
 
-    private Collection<String> createExpressions(final RangeConstraint<?> constraint) {
+    private Collection<String> createExpressions(final RangeConstraint<?> constraint,
+            final Function<Class<?>, String> classImporter) {
         final Set<? extends Range<? extends Number>> constraints = constraint.getAllowedRanges().asRanges();
         final Collection<String> ret = new ArrayList<>(constraints.size());
 
@@ -70,13 +71,13 @@ abstract class AbstractPrimitiveRangeGenerator<T extends Number & Comparable<T>>
 
             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<T extends Number & Comparable<T>>
         return ret;
     }
 
+    void appendMaxCheck(final StringBuilder sb, final T max, final Function<Class<?>, String> classImporter) {
+        sb.append("value <= ").append(format(max));
+    }
+
+    void appendMinCheck(final StringBuilder sb, final T min, final Function<Class<?>, String> classImporter) {
+        sb.append("value >= ").append(format(min));
+    }
+
+    String codeHelpersThrow() {
+        return "throwInvalidRange";
+    }
+
     private String createRangeString(final RangeConstraint<?> constraint) {
         final Set<? extends Range<? extends Number>> constraints = constraint.getAllowedRanges().asRanges();
         final List<Range<T>> ranges = new ArrayList<>(constraints.size());
@@ -100,7 +113,7 @@ abstract class AbstractPrimitiveRangeGenerator<T extends Number & Comparable<T>>
     protected final String generateRangeCheckerImplementation(final String checkerName,
             final RangeConstraint<?> constraints, final Function<Class<?>, String> classImporter) {
         final StringBuilder sb = new StringBuilder();
-        final Collection<String> expressions = createExpressions(constraints);
+        final Collection<String> 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<T extends Number & Comparable<T>>
                 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();
index 600219c32128ef23595f5012ee31c7307cdc1021..a51dcf2ed587fa93c8b2d0b3cd0934375bb070f7 100644 (file)
@@ -37,10 +37,14 @@ abstract class AbstractRangeGenerator<T extends Number & Comparable<T>> {
         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<T> type;
+    private final @NonNull Class<T> type;
 
     protected AbstractRangeGenerator(final Class<T> typeClass) {
         this.type = requireNonNull(typeClass);
@@ -120,7 +124,7 @@ abstract class AbstractRangeGenerator<T extends Number & Comparable<T>> {
     protected abstract @NonNull String generateRangeCheckerImplementation(@NonNull String checkerName,
             @NonNull RangeConstraint<?> constraints, Function<Class<?>, 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<T extends Number & Comparable<T>> {
     }
 
     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 (file)
index 0000000..f8ef15a
--- /dev/null
@@ -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<T extends Number & Comparable<T>>
+        extends AbstractPrimitiveRangeGenerator<T> {
+    private final @NonNull String primitiveRef;
+
+    AbstractUnsignedRangeGenerator(final Class<T> typeClass, final String primitiveName, final T minValue,
+            final T maxValue) {
+        super(typeClass, primitiveName, minValue, maxValue);
+        primitiveRef = "." + primitiveName + "Value()";
+    }
+
+    @Override
+    final String primitiveRef() {
+        return primitiveRef;
+    }
+}
index 240a6515d7e3a25daf85e8916e91f6586b95481c..5fbb7e26e76992d2392c8d7c94da3c113cb89a8e 100644 (file)
@@ -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 <code>genType</code> equals <code>null</code>
@@ -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) {
index 7c424cc6d305eb0ebe9185f0942d424c59219315..658c341ee2cddd9277854cf4ea024c4c04a0cc35 100644 (file)
@@ -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 (file)
index 0000000..fe6c5ff
--- /dev/null
@@ -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<Uint16> {
+    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 (file)
index 0000000..e5c4fc7
--- /dev/null
@@ -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<Uint32> {
+    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 (file)
index 0000000..7bd8ba5
--- /dev/null
@@ -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<Uint64> {
+    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<Class<?>, String> classImporter) {
+        appendCompare(sb, classImporter, max, "<=");
+    }
+
+    @Override
+    void appendMinCheck(final StringBuilder sb, final Uint64 min, final Function<Class<?>, String> classImporter) {
+        appendCompare(sb, classImporter, min, ">=");
+    }
+
+    private static StringBuilder appendCompare(final StringBuilder sb, final Function<Class<?>, 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 (file)
index 0000000..159fc15
--- /dev/null
@@ -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<Uint8> {
+    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();
+    }
+}
index 23b0e6b14c939b87a9e73880121fc245f2f8e0f9..f87327d4afa0ad025b25d4097ef29c8c4858f3a2 100644 (file)
@@ -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();
index a50ac877b388de80f78c611e6607dfbdb4051418..96c12484b555b065459bcbb5042e248db492e8f9 100644 (file)
@@ -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();
index cf2bce2dc6bed89ca00d0f06303b09381645266f..bfde6691ff175e8f570c2b9897aeb0255cf6d32e 100644 (file)
@@ -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 */
         }
index 748f1eb90b7927b107b4eec80e10834115c31b7a..2923c9e3b010e1f35ae8e98c699228277aa38652 100644 (file)
@@ -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;
        }
index a3fde03a2fe6632458e64ebc3e51ac96b71e69d3..091f4782224b1712807391bba50635e84dcc21e3 100644 (file)
@@ -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:
      * <pre>
index ba69650bc7d9b3dd9b85e570937799cb2a62a45e..4543a086bdffab661ed1c912ae01c03f9f8fe9b5 100644 (file)
@@ -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<MplsLabel> loadClass(final ClassLoader loader, final String key) {
index 0d172a53aeaa65aaa80b8d3942cc32d1245449e4..0fd747284710bf8d47dc7d2bca2e4d1c4740bc9d 100644 (file)
@@ -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) {
index ad4645ca7e17e46ebe38c3a0bb46ad67a31f27ea..fd63f6fdd7602223ddfeb959dc83bb16b8e3fe47 100644 (file)
@@ -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) {
index 2e7a32a5278b7f96b32dac67b8d35d06f4ced5fa..3675368d9702413d6480ccc321c8b34594f25893 100644 (file)
@@ -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) {
index e7ebe723076e5b552876b8e2a9c851bc1be9793f..2655791e96e71e061d2c9c166f172006808ccf9a 100644 (file)
@@ -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();
     }
 }