Improve binding type instantiation 40/49440/4
authorRobert Varga <rovarga@cisco.com>
Thu, 15 Dec 2016 15:53:48 +0000 (16:53 +0100)
committerMartin Ciglan <mciglan@cisco.com>
Fri, 16 Dec 2016 15:30:15 +0000 (15:30 +0000)
This patch causes binding generator to emit valueOf()
constructors instead of explicit 'new' for well-known
types, allowing better reuse of instances.

Change-Id: I66f7cbc0b8362d82759d2276c81aed1fd5296101
Signed-off-by: Robert Varga <rovarga@cisco.com>
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/TypeProviderIntegrationTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImplTest.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderTest.java

index 397557611591c7132ce56f4ab5b342f750716b5a..18a10f111a4d1d4de6adcb51bc36ad94c907c8d6 100644 (file)
@@ -1449,11 +1449,11 @@ public final class TypeProviderImpl implements TypeProvider {
             }
             result = bitsToDef((BitsTypeDefinition) base, className, defaultValue, type.getBaseType() != null);
         } else if (base instanceof BooleanTypeDefinition) {
-            result = typeToDef(Boolean.class, defaultValue);
+            result = typeToBooleanDef(defaultValue);
         } else if (base instanceof DecimalTypeDefinition) {
             result = typeToDef(BigDecimal.class, defaultValue);
         } else if (base instanceof EmptyTypeDefinition) {
-            result = typeToDef(Boolean.class, defaultValue);
+            result = typeToBooleanDef(defaultValue);
         } else if (base instanceof EnumTypeDefinition) {
             char[] defValArray = defaultValue.toCharArray();
             char first = Character.toUpperCase(defaultValue.charAt(0));
@@ -1477,25 +1477,37 @@ public final class TypeProviderImpl implements TypeProvider {
         } else if (base instanceof InstanceIdentifierTypeDefinition) {
             throw new UnsupportedOperationException("Cannot get default construction for instance-identifier type");
         } else if (BaseTypes.isInt8(base)) {
-            result = typeToDef(Byte.class, defaultValue);
+            result = typeToValueOfDef(Byte.class, defaultValue);
         } else if (BaseTypes.isInt16(base)) {
-            result = typeToDef(Short.class, defaultValue);
+            result = typeToValueOfDef(Short.class, defaultValue);
         } else if (BaseTypes.isInt32(base)) {
-            result = typeToDef(Integer.class, defaultValue);
+            result = typeToValueOfDef(Integer.class, defaultValue);
         } else if (BaseTypes.isInt64(base)) {
-            result = typeToDef(Long.class, defaultValue);
+            result = typeToValueOfDef(Long.class, defaultValue);
         } else if (base instanceof LeafrefTypeDefinition) {
             result = leafrefToDef(node, (LeafrefTypeDefinition) base, defaultValue);
         } else if (base instanceof StringTypeDefinition) {
             result = "\"" + defaultValue + "\"";
         } else if (BaseTypes.isUint8(base)) {
-            result = typeToDef(Short.class, defaultValue);
+            result = typeToValueOfDef(Short.class, defaultValue);
         } else if (BaseTypes.isUint16(base)) {
-            result = typeToDef(Integer.class, defaultValue);
+            result = typeToValueOfDef(Integer.class, defaultValue);
         } else if (BaseTypes.isUint32(base)) {
-            result = typeToDef(Long.class, defaultValue);
+            result = typeToValueOfDef(Long.class, defaultValue);
         } else if (BaseTypes.isUint64(base)) {
-            result = typeToDef(BigInteger.class, defaultValue);
+            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);
+            }
         } else if (base instanceof UnionTypeDefinition) {
             result = unionToDef(node);
         } else {
@@ -1520,6 +1532,21 @@ public final class TypeProviderImpl implements TypeProvider {
         return "new " + clazz.getName() + "(\"" + defaultValue + "\")";
     }
 
+    private static String typeToValueOfDef(final Class<?> clazz, final String defaultValue) {
+        return clazz.getName() + ".valueOf(\"" + defaultValue + "\")";
+    }
+
+    private static String typeToBooleanDef(final String defaultValue) {
+        switch (defaultValue) {
+            case "false":
+                return "java.lang.Boolean.FALSE";
+            case "true":
+                return "java.lang.Boolean.TRUE";
+            default:
+                return typeToValueOfDef(Boolean.class, defaultValue);
+        }
+    }
+
     private static String binaryToDef(final String defaultValue) {
         StringBuilder sb = new StringBuilder();
         BaseEncoding en = BaseEncoding.base64();
index 45bd2132fd013590b7cd41613f6c15565b439050..e118309a52efd2d33ebd1ad5a1f0b01325f88a09 100644 (file)
@@ -79,12 +79,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-boolean");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Boolean(\"true\")", actual);
+        assertEquals("java.lang.Boolean.TRUE", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-boolean");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyBoolean(new java.lang.Boolean(\"true\"))", actual);
+        assertEquals("new " + PKG + "MyBoolean(java.lang.Boolean.TRUE)", actual);
     }
 
     @Test
@@ -105,12 +105,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-empty");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Boolean(\"false\")", actual);
+        assertEquals("java.lang.Boolean.FALSE", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-empty");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyEmpty(new java.lang.Boolean(\"false\"))", actual);
+        assertEquals("new " + PKG + "MyEmpty(java.lang.Boolean.FALSE)", actual);
     }
 
     @Test
@@ -131,12 +131,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int8");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Byte(\"11\")", actual);
+        assertEquals("java.lang.Byte.valueOf(\"11\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int8");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyInt8(new java.lang.Byte(\"11\"))", actual);
+        assertEquals("new " + PKG + "MyInt8(java.lang.Byte.valueOf(\"11\"))", actual);
     }
 
     @Test
@@ -144,12 +144,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int16");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Short(\"111\")", actual);
+        assertEquals("java.lang.Short.valueOf(\"111\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int16");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyInt16(new java.lang.Short(\"111\"))", actual);
+        assertEquals("new " + PKG + "MyInt16(java.lang.Short.valueOf(\"111\"))", actual);
     }
 
     @Test
@@ -157,12 +157,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int32");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Integer(\"1111\")", actual);
+        assertEquals("java.lang.Integer.valueOf(\"1111\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int32");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyInt32(new java.lang.Integer(\"1111\"))", actual);
+        assertEquals("new " + PKG + "MyInt32(java.lang.Integer.valueOf(\"1111\"))", actual);
     }
 
     @Test
@@ -170,12 +170,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-int64");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Long(\"11111\")", actual);
+        assertEquals("java.lang.Long.valueOf(\"11111\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-int64");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyInt64(new java.lang.Long(\"11111\"))", actual);
+        assertEquals("new " + PKG + "MyInt64(java.lang.Long.valueOf(\"11111\"))", actual);
     }
 
     @Test
@@ -222,12 +222,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint8");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Short(\"11\")", actual);
+        assertEquals("java.lang.Short.valueOf(\"11\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint8");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyUint8(new java.lang.Short(\"11\"))", actual);
+        assertEquals("new " + PKG + "MyUint8(java.lang.Short.valueOf(\"11\"))", actual);
     }
 
     @Test
@@ -235,12 +235,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint16");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Integer(\"111\")", actual);
+        assertEquals("java.lang.Integer.valueOf(\"111\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint16");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyUint16(new java.lang.Integer(\"111\"))", actual);
+        assertEquals("new " + PKG + "MyUint16(java.lang.Integer.valueOf(\"111\"))", actual);
     }
 
     @Test
@@ -248,12 +248,12 @@ public class TypeProviderIntegrationTest {
         final QName leafNode1 = QName.create(m.getQNameModule(), "leaf-uint32");
         LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName(leafNode1);
         String actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Long(\"1111\")", actual);
+        assertEquals("java.lang.Long.valueOf(\"1111\")", actual);
 
         final QName leafNode2 = QName.create(m.getQNameModule(), "ext-uint32");
         leaf = (LeafSchemaNode) m.getDataChildByName(leafNode2);
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyUint32(new java.lang.Long(\"1111\"))", actual);
+        assertEquals("new " + PKG + "MyUint32(java.lang.Long.valueOf(\"1111\"))", actual);
     }
 
     @Test
index 700964de859ec663e523dae5f6824326a6f0814f..18806f501f4b35b134a8b2616d61a0c23580da4f 100644 (file)
@@ -159,7 +159,7 @@ public class TypeProviderImplTest {
         doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
         doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
-        assertEquals("new java.lang.Boolean(\"false\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "false"));
+        assertEquals("java.lang.Boolean.FALSE", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "false"));
 
         // decimal type
         final DecimalTypeDefinition decimalType = BaseTypes.decimalTypeBuilder(refTypePath).setFractionDigits(4).build();
@@ -179,7 +179,7 @@ public class TypeProviderImplTest {
         doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
         doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
-        assertEquals("new java.lang.Boolean(\"default value\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
+        assertEquals("java.lang.Boolean.valueOf(\"default value\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
 
         // enum type
         final EnumTypeDefinition enumType =  BaseTypes.enumerationTypeBuilder(refTypePath).build();
index 02269bbecdf8730649147621cff39772a30b82bc..0298debbabe8c23b66d3b1837a349046cb6b40d0 100644 (file)
@@ -761,14 +761,14 @@ public class TypeProviderTest {
         String result = provider.getTypeDefaultConstruction(leaf, "true");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBoolean(new java.lang.Boolean(\"true\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBoolean(java.lang.Boolean.TRUE)",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-empty");
         result = provider.getTypeDefaultConstruction(leaf, "true");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangEmpty(new java.lang.Boolean(\"true\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangEmpty(java.lang.Boolean.TRUE)",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-enumeration");
@@ -789,35 +789,35 @@ public class TypeProviderTest {
         result = provider.getTypeDefaultConstruction(leaf, "17");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(new java.lang.Byte(\"17\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(java.lang.Byte.valueOf(\"17\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-int8-restricted");
         result = provider.getTypeDefaultConstruction(leaf, "99");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8Restricted(new java.lang.Byte(\"99\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8Restricted(java.lang.Byte.valueOf(\"99\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-int16");
         result = provider.getTypeDefaultConstruction(leaf, "1024");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(new java.lang.Short(\"1024\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(java.lang.Short.valueOf(\"1024\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-int32");
         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.YangInt32(new java.lang.Integer(\"1048576\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt32(java.lang.Integer.valueOf(\"1048576\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-int64");
         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.YangInt64(new java.lang.Long(\"1099511627776\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt64(java.lang.Long.valueOf(\"1099511627776\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-string");
@@ -838,21 +838,21 @@ public class TypeProviderTest {
         result = provider.getTypeDefaultConstruction(leaf, "128");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint8(new java.lang.Short(\"128\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint8(java.lang.Short.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(new java.lang.Integer(\"1048576\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint16(java.lang.Integer.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(new java.lang.Long(\"1099511627776\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangUint32(java.lang.Long.valueOf(\"1099511627776\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-uint64");
@@ -934,14 +934,14 @@ public class TypeProviderTest {
         result = provider.getTypeDefaultConstruction(leaf, "128");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(new java.lang.Short(\"128\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt16(java.lang.Short.valueOf(\"128\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("foo-leafref-value");
         result = provider.getTypeDefaultConstruction(leaf, "32");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(new java.lang.Byte(\"32\"))",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangInt8(java.lang.Byte.valueOf(\"32\"))",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("foo-cond-bar-item");