Integrate JavaTypeName as Identifier
[mdsal.git] / binding / mdsal-binding-generator-impl / src / test / java / org / opendaylight / mdsal / binding / yang / types / TypeProviderTest.java
index c3cf202bbc0158cc11f650ee70f6e5827189d263..757c867b1e71d4f83aa378123ef68ed6adb65c92 100644 (file)
@@ -13,7 +13,9 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
 
+import com.google.common.collect.Range;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import org.junit.Before;
 import org.junit.Ignore;
@@ -23,16 +25,18 @@ import org.junit.runners.JUnit4;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.opendaylight.mdsal.binding.generator.spi.TypeProvider;
-import org.opendaylight.mdsal.binding.generator.util.BindingGeneratorUtil;
-import org.opendaylight.mdsal.binding.generator.util.ReferencedTypeImpl;
-import org.opendaylight.mdsal.binding.generator.util.generated.type.builder.GeneratedTOBuilderImpl;
 import org.opendaylight.mdsal.binding.model.api.ConcreteType;
 import org.opendaylight.mdsal.binding.model.api.Enumeration;
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
 import org.opendaylight.mdsal.binding.model.api.ParameterizedType;
 import org.opendaylight.mdsal.binding.model.api.Restrictions;
 import org.opendaylight.mdsal.binding.model.api.Type;
 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTOBuilder;
+import org.opendaylight.mdsal.binding.model.util.BindingGeneratorUtil;
+import org.opendaylight.mdsal.binding.model.util.ReferencedTypeImpl;
+import org.opendaylight.mdsal.binding.model.util.generated.type.builder.CodegenGeneratedTOBuilder;
+import org.opendaylight.yangtools.yang.binding.BindingMapping;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -93,41 +97,41 @@ public class TypeProviderTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void typeProviderInstanceWithNullSchemaContextTest() {
-        final TypeProvider provider = new TypeProviderImpl(null);
+        new RuntimeTypeProvider(null);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void putReferencedTypeWithNullSchemaPathParamTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
-        ((TypeProviderImpl) provider).putReferencedType(null, null);
-        ((TypeProviderImpl) provider).putReferencedType(this.schemaPath, null);
+        provider.putReferencedType(null, null);
+        provider.putReferencedType(this.schemaPath, null);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void putReferencedTypeWithNullRefTypeParamTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
-        ((TypeProviderImpl) provider).putReferencedType(this.schemaPath, null);
+        provider.putReferencedType(this.schemaPath, null);
     }
 
     @Test
     public void getAdditionalTypesTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
-        assertNotNull(((TypeProviderImpl) provider).getAdditionalTypes());
+        assertNotNull(provider.getAdditionalTypes());
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void javaTypeForSchemaDefinitionTypeNullTypedefTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         provider.javaTypeForSchemaDefinitionType(null, null, null);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void javaTypeForSchemaDefinitionTypeTypedefNullQNameTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final TestIntegerTypeDefinition testTypedef = new TestIntegerTypeDefinition();
         provider.javaTypeForSchemaDefinitionType(testTypedef, null, null);
@@ -163,7 +167,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionExtTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
 
         final TypeDefinition<?> leafType = leaf.getType();
@@ -175,12 +179,12 @@ public class TypeProviderTest {
         assertEquals("base-yang-types", genTO.getModuleName());
         assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914", genTO.getPackageName());
         assertEquals("YangInt8", genTO.getName());
-        assertTrue(genTO.getProperties().size() == 1);
+        assertEquals(1, genTO.getProperties().size());
     }
 
     @Test
     public void javaTypeForSchemaDefinitionRestrictedExtTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "restricted-int8-type");
 
         final TypeDefinition<?> leafType = leaf.getType();
@@ -193,18 +197,18 @@ public class TypeProviderTest {
         final GeneratedTransferObject genTO = (GeneratedTransferObject) result;
         assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914", genTO.getPackageName());
         assertEquals("YangInt8Restricted", genTO.getName());
-        assertTrue(genTO.getProperties().size() == 1);
-        final List<RangeConstraint> rangeConstraints = genTO.getRestrictions().getRangeConstraints();
+        assertEquals(1, genTO.getProperties().size());
+        final Optional<? extends RangeConstraint<?>> rangeConstraints = genTO.getRestrictions().getRangeConstraint();
 
-        assertTrue(!rangeConstraints.isEmpty());
-        final RangeConstraint constraint = rangeConstraints.get(0);
-        assertEquals(1, constraint.getMin().intValue());
-        assertEquals(100, constraint.getMax().intValue());
+        assertTrue(rangeConstraints.isPresent());
+        final Range<?> constraint = rangeConstraints.get().getAllowedRanges().asRanges().iterator().next();
+        assertEquals((byte) 1, constraint.lowerEndpoint());
+        assertEquals((byte) 100, constraint.upperEndpoint());
     }
 
     @Test
     public void javaTypeForSchemaDefinitionEmptyStringPatternTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module testTypeProvider = resolveModule("test-type-provider");
         final TypeDefinition<?> emptyPatternString = resolveTypeDefinitionFromModule(testTypeProvider, "empty-pattern-string");
@@ -238,8 +242,9 @@ public class TypeProviderTest {
     @Ignore
     @Test
     public void bug1862RestrictedTypedefTransformationTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "bug-1862-restricted-typedef");
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
+        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
+            "bug-1862-restricted-typedef");
 
         final TypeDefinition<?> leafType = leaf.getType();
         final Restrictions restrictions = BindingGeneratorUtil.getRestrictions(leafType);
@@ -251,8 +256,9 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionEnumExtTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
-        LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "resolve-enum-leaf");
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
+        LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
+            "resolve-enum-leaf");
         TypeDefinition<?> leafType = leaf.getType();
         Type result = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
         assertNotNull(result);
@@ -278,7 +284,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionLeafrefExtTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
         LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "bar", "leafref-value");
         TypeDefinition<?> leafType = leaf.getType();
         final Type leafrefResolvedType1 = provider.javaTypeForSchemaDefinitionType(leafType, leaf);
@@ -300,7 +306,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionLeafrefToEnumTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new CodegenTypeProvider(this.schemaContext);
 
         setReferencedTypeForTypeProvider(provider);
 
@@ -319,7 +325,7 @@ public class TypeProviderTest {
 
         final QName leafListNode = QName.create(module.getQNameModule(), "enums");
         final DataSchemaNode enumListNode = module.getDataChildByName(leafListNode);
-        assertNotNull("leaf-list enums is not present in root of module "+ module.getName(), enumNode);
+        assertNotNull("leaf-list enums is not present in root of module " + module.getName(), enumNode);
         assertTrue(enumListNode instanceof LeafListSchemaNode);
         final LeafListSchemaNode leafList = (LeafListSchemaNode) enumListNode;
         final TypeDefinition<?> leafListType = leafList.getType();
@@ -329,27 +335,27 @@ public class TypeProviderTest {
         assertTrue(leafrefResolvedType2 instanceof ParameterizedType);
     }
 
-    private void setReferencedTypeForTypeProvider(final TypeProvider provider) {
+    private void setReferencedTypeForTypeProvider(final AbstractTypeProvider provider) {
         final LeafSchemaNode enumLeafNode = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
             "resolve-direct-use-of-enum");
         final TypeDefinition<?> enumLeafTypedef = enumLeafNode.getType();
         Type enumType = provider.javaTypeForSchemaDefinitionType(enumLeafTypedef, enumLeafNode);
 
-        Type refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getName());
-        ((TypeProviderImpl) provider).putReferencedType(enumLeafNode.getPath(), refType);
+        Type refType = new ReferencedTypeImpl(enumType.getIdentifier());
+        provider.putReferencedType(enumLeafNode.getPath(), refType);
 
-        final LeafListSchemaNode enumListNode = provideLeafListNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
-                "list-of-enums");
+        final LeafListSchemaNode enumListNode = provideLeafListNodeFromTopLevelContainer(this.testTypeProviderModule,
+            "foo", "list-of-enums");
         final TypeDefinition<?> enumLeafListTypedef = enumListNode.getType();
         enumType = provider.javaTypeForSchemaDefinitionType(enumLeafListTypedef, enumListNode);
 
-        refType = new ReferencedTypeImpl(enumType.getPackageName(), enumType.getPackageName());
-        ((TypeProviderImpl) provider).putReferencedType(enumListNode.getPath(), refType);
+        refType = new ReferencedTypeImpl(enumType.getIdentifier());
+        provider.putReferencedType(enumListNode.getPath(), refType);
     }
 
     @Test
     public void javaTypeForSchemaDefinitionConditionalLeafrefTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
         final Module module = resolveModule("test-type-provider-b");
 
         final QName leafrefNode = QName.create(module.getQNameModule(), "conditional-leafref");
@@ -368,7 +374,7 @@ public class TypeProviderTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void javaTypeForSchemaDefinitionInvalidLeafrefPathTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new CodegenTypeProvider(this.schemaContext);
         final Module module = resolveModule("test-type-provider-b");
 
         final QName leafrefNode = QName.create(module.getQNameModule(), "unreslovable-leafref");
@@ -383,14 +389,14 @@ public class TypeProviderTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void provideTypeForLeafrefWithNullLeafrefTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         provider.provideTypeForLeafref(null, null);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void provideTypeForLeafrefWithNullLeafrefTypePathStatementTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final LeafrefTypeWithNullXpath leafrePath = new LeafrefTypeWithNullXpath();
         provider.provideTypeForLeafref(leafrePath, this.schemaNode);
@@ -398,8 +404,9 @@ public class TypeProviderTest {
 
     @Test(expected = IllegalStateException.class)
     public void provideTypeForLeafrefWithNullParentModuleTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "bar", "leafref-value");
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
+        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "bar",
+            "leafref-value");
         final TypeDefinition<?> leafType = leaf.getType();
         assertTrue(leafType instanceof LeafrefTypeDefinition);
         doReturn(null).when(this.schemaNode).getPath();
@@ -408,7 +415,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionIdentityrefExtTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "crypto");
         final TypeDefinition<?> leafType = leaf.getType();
 
@@ -419,7 +426,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionForExtUnionWithSimpleTypesTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "simple-int-types-union");
         final TypeDefinition<?> leafType = leaf.getType();
 
@@ -432,7 +439,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionForExtComplexUnionWithInnerUnionTypesTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "complex-union");
         final TypeDefinition<?> leafType = leaf.getType();
 
@@ -445,7 +452,7 @@ public class TypeProviderTest {
 
     @Test
     public void javaTypeForSchemaDefinitionForExtUnionWithInnerUnionAndSimpleTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "use-of-unions", "complex-string-int-union");
         final TypeDefinition<?> leafType = leaf.getType();
 
@@ -458,59 +465,46 @@ public class TypeProviderTest {
 
     @Test
     public void provideGeneratedTOBuilderForUnionTypeDefWithInnerUnionTypesTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module testTypeProvider = resolveModule("test-type-provider");
         final TypeDefinition<?> unionTypeDef = resolveTypeDefinitionFromModule(testTypeProvider, "complex-union");
 
         assertNotNull(unionTypeDef);
         assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition);
-        GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
-            (UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexUnionType", unionTypeDef);
+        GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef(
+            JavaTypeName.create("test.package.name", BindingMapping.getClassName(unionTypeDef.getQName())),
+            (UnionTypeDefinition)unionTypeDef.getBaseType(), unionTypeDef);
 
         assertNotNull(unionTypeBuilder);
 
-        GeneratedTransferObject unionType = unionTypeBuilder.toInstance();
-        assertEquals("ComplexUnionType", unionType.getName());
-
-        unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
-            (UnionTypeDefinition)unionTypeDef.getBaseType(), "", unionTypeDef);
-
-        assertNotNull(unionTypeBuilder);
-
-        unionType = unionTypeBuilder.toInstance();
-        assertEquals("Union", unionType.getName());
-
-        unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
-            (UnionTypeDefinition)unionTypeDef.getBaseType(), null, unionTypeDef);
-
-        assertNotNull(unionTypeBuilder);
-
-        unionType = unionTypeBuilder.toInstance();
-        assertEquals("Union", unionType.getName());
+        GeneratedTransferObject unionType = unionTypeBuilder.build();
+        assertEquals("ComplexUnion", unionType.getName());
     }
 
     @Test
     public void provideGeneratedTOBuilderForUnionTypeDefWithInnerUnionAndSimpleTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module testTypeProvider = resolveModule("test-type-provider");
-        final TypeDefinition<?> unionTypeDef = resolveTypeDefinitionFromModule(testTypeProvider, "complex-string-int-union");
+        final TypeDefinition<?> unionTypeDef = resolveTypeDefinitionFromModule(testTypeProvider,
+            "complex-string-int-union");
 
         assertNotNull(unionTypeDef);
         assertTrue(unionTypeDef.getBaseType() instanceof UnionTypeDefinition);
-        final GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef("test.package.name",
-            (UnionTypeDefinition)unionTypeDef.getBaseType(), "ComplexStringIntUnionType", unionTypeDef);
+        final GeneratedTOBuilder unionTypeBuilder = provider.provideGeneratedTOBuilderForUnionTypeDef(
+            JavaTypeName.create("test.package.name", BindingMapping.getClassName(unionTypeDef.getQName())),
+            (UnionTypeDefinition)unionTypeDef.getBaseType(), unionTypeDef);
 
         assertNotNull(unionTypeBuilder);
 
-        final GeneratedTransferObject unionType = unionTypeBuilder.toInstance();
-        assertEquals("ComplexStringIntUnionType", unionType.getName());
+        final GeneratedTransferObject unionType = unionTypeBuilder.build();
+        assertEquals("ComplexStringIntUnion", unionType.getName());
     }
 
     @Test
     public void generatedTypeForExtendedDefinitionTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new CodegenTypeProvider(this.schemaContext);
 
         final Module baseYangTypes = resolveModule("base-yang-types");
         final Set<TypeDefinition<?>> typeDefs = baseYangTypes.getTypeDefinitions();
@@ -601,23 +595,24 @@ public class TypeProviderTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void generatedTypeForExtendedDefinitionTypeWithTypedefNullTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         provider.generatedTypeForExtendedDefinitionType(null, null);
     }
 
     @Test(expected = IllegalArgumentException.class)
     public void generatedTypeForExtendedDefinitionTypeWithTypedefQNameNullTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final TestIntegerTypeDefinition testInt = new TestIntegerTypeDefinition();
         provider.generatedTypeForExtendedDefinitionType(testInt, testInt);
     }
 
     @Test
     public void generatedTypeForExtendedDefinitionTypeWithInnerExtendedTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module baseYangTypes = resolveModule("test-type-provider");
-        final TypeDefinition<?> extYangInt8Typedef = resolveTypeDefinitionFromModule(baseYangTypes, "extended-yang-int8");
+        final TypeDefinition<?> extYangInt8Typedef = resolveTypeDefinitionFromModule(baseYangTypes,
+            "extended-yang-int8");
         assertNotNull(extYangInt8Typedef);
         final Type extType = provider.generatedTypeForExtendedDefinitionType(extYangInt8Typedef, extYangInt8Typedef);
         assertNotNull(extType);
@@ -626,7 +621,7 @@ public class TypeProviderTest {
 
     @Test
     public void generatedTypeForExtendedDefinitionTypeWithLeafrefBaseTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module baseYangTypes = resolveModule("test-type-provider");
         final TypeDefinition<?> barItemLeafrefId = resolveTypeDefinitionFromModule(baseYangTypes, "bar-item-leafref-id");
@@ -637,47 +632,30 @@ public class TypeProviderTest {
 
     @Test
     public void generatedTypeForExtendedDefinitionTypeWithIdentityrefBaseTypeTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         final Module baseYangTypes = resolveModule("test-type-provider");
 
-        final TypeDefinition<?> aesIdentityrefType = resolveTypeDefinitionFromModule(baseYangTypes, "aes-identityref-type");
+        final TypeDefinition<?> aesIdentityrefType = resolveTypeDefinitionFromModule(baseYangTypes,
+            "aes-identityref-type");
 
         assertNotNull(aesIdentityrefType);
         final Type extType = provider.generatedTypeForExtendedDefinitionType(aesIdentityrefType, aesIdentityrefType);
         assertEquals(null, extType);
     }
 
-    @Test(expected = IllegalArgumentException.class)
+    @Test(expected = NullPointerException.class)
     public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNullTypedefTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
-        provider.provideGeneratedTOBuilderForBitsTypeDefinition("", null, "", "");
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void provideGeneratedTOBuilderForBitsTypeDefinitionWithBasePackageNullTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
-        final TypeDefinition<?> leafType = leaf.getType();
-        provider.provideGeneratedTOBuilderForBitsTypeDefinition(null, leafType, "", "");
-    }
-
-    @Test
-    public void provideGeneratedTOBuilderForBitsTypeDefinitionWithNonBitsTypedefTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
-
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
-        final TypeDefinition<?> leafType = leaf.getType();
-        final Type type = provider.provideGeneratedTOBuilderForBitsTypeDefinition("", leafType, "", "");
-
-        assertEquals(null, type);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
+        provider.provideGeneratedTOBuilderForBitsTypeDefinition(JavaTypeName.create("foo", "foo"), null, "foo");
     }
 
     @Test
     public void getConstructorPropertyNameTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
+        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
+            "yang-int8-type");
         final TypeDefinition<?> leafType = leaf.getType();
 
         final String ctorPropertyName = provider.getConstructorPropertyName(leafType);
@@ -689,9 +667,10 @@ public class TypeProviderTest {
 
     @Test
     public void getParamNameFromTypeTest() {
-        final TypeProvider provider = new TypeProviderImpl(this.schemaContext);
+        final TypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
-        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo", "yang-int8-type");
+        final LeafSchemaNode leaf = provideLeafNodeFromTopLevelContainer(this.testTypeProviderModule, "foo",
+            "yang-int8-type");
         final TypeDefinition<?> leafType = leaf.getType();
 
         final String paramName = provider.getParamNameFromType(leafType);
@@ -700,20 +679,19 @@ public class TypeProviderTest {
 
     @Test
     public void addUnitsToGenTOTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
-
-        final GeneratedTOBuilder builder = new GeneratedTOBuilderImpl("test.package", "TestBuilder");
+        final GeneratedTOBuilder builder = new CodegenGeneratedTOBuilder(
+            JavaTypeName.create("test.package", "TestBuilder"));
 
-        TypeProviderImpl.addUnitsToGenTO(builder, null);
-        GeneratedTransferObject genTO = builder.toInstance();
+        CodegenTypeProvider.addUnitsToGenTO(builder, null);
+        GeneratedTransferObject genTO = builder.build();
         assertTrue(genTO.getConstantDefinitions().isEmpty());
 
-        TypeProviderImpl.addUnitsToGenTO(builder, "");
-        genTO = builder.toInstance();
+        CodegenTypeProvider.addUnitsToGenTO(builder, "");
+        genTO = builder.build();
         assertTrue(genTO.getConstantDefinitions().isEmpty());
 
-        TypeProviderImpl.addUnitsToGenTO(builder, "125");
-        genTO = builder.toInstance();
+        CodegenTypeProvider.addUnitsToGenTO(builder, "125");
+        genTO = builder.build();
         assertTrue(!genTO.getConstantDefinitions().isEmpty());
         assertEquals(1, genTO.getConstantDefinitions().size());
         assertEquals("_UNITS", genTO.getConstantDefinitions().get(0).getName());
@@ -722,14 +700,14 @@ public class TypeProviderTest {
 
     @Test(expected = NullPointerException.class)
     public void getTypeDefaultConstructionLeafTypeNullTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final TestLeafSchemaNode leafSchemaNode = new TestLeafSchemaNode();
         provider.getTypeDefaultConstruction(leafSchemaNode, null);
     }
 
     @Test(expected = NullPointerException.class)
     public void getTypeDefaultConstructionDefaultValueNullTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("yang-boolean");
         provider.getTypeDefaultConstruction(leaf, null);
     }
@@ -741,21 +719,21 @@ public class TypeProviderTest {
 
     @Test(expected = UnsupportedOperationException.class)
     public void getTypeDefaultConstructionDefaultValueForInstanceIdentifierTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("foo-container-id");
         provider.getTypeDefaultConstruction(leaf, "NAN");
     }
 
     @Test(expected = UnsupportedOperationException.class)
     public void getTypeDefaultConstructionDefaultValueForIdentityrefTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
         final LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("aes-identityref-type");
         provider.getTypeDefaultConstruction(leaf, "NAN");
     }
 
     @Test
     public void getTypeDefaultConstructionDefaultValueTest() {
-        final TypeProviderImpl provider = new TypeProviderImpl(this.schemaContext);
+        final AbstractTypeProvider provider = new RuntimeTypeProvider(this.schemaContext);
 
         LeafSchemaNode leaf = provideLeafForGetDefaultConstructionTestCase("yang-boolean");
         String result = provider.getTypeDefaultConstruction(leaf, "true");
@@ -920,14 +898,14 @@ public class TypeProviderTest {
         result = provider.getTypeDefaultConstruction(leaf);
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.TestTypeProviderData.RootBitsLeaf(false, true, false)",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.type.provider.model.rev140912.TestTypeProviderData.RootBitsLeaf(true, false, false)",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("yang-bits");
-        result = provider.getTypeDefaultConstruction(leaf, "10-Mb-only");
+        result = provider.getTypeDefaultConstruction(leaf, "only-10-Mb");
         assertNotNull(result);
         assertTrue(!result.isEmpty());
-        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBits(true, false, false)",
+        assertEquals("new org.opendaylight.yang.gen.v1.urn.opendaylight.org.test.base.yang.types.rev140914.YangBits(false, false, true)",
             result);
 
         leaf = provideLeafForGetDefaultConstructionTestCase("bar-id");