public static TypeDeclaration add_Type(this NamespaceDeclaration namespaceDeclaration, IClass iClass)
        {
            // move to method IClass.typeDeclaration();
            var typeName = iClass.Name;

            var newType = namespaceDeclaration.type(typeName);          // check if already exists and if it does return it

            if (newType != null)
            {
                return(newType);
            }

            const Modifiers modifiers = Modifiers.None | Modifiers.Public;

            newType = new TypeDeclaration(modifiers, new List <AttributeSection>())
            {
                Name = typeName
            };

            foreach (var baseType in iClass.BaseTypes)
            {
                if (baseType.FullyQualifiedName != "System.Object")  // no need to include this one
                {
                    newType.BaseTypes.Add(new TypeReference(baseType.FullyQualifiedName));
                }
            }

            namespaceDeclaration.AddChild(newType);

            return(newType);

            //return namespaceDeclaration.add_Type(iClass.Name);
        }
        // should be merged with the one using CompilationUnit
        public static TypeDeclaration add_Type(this NamespaceDeclaration namespaceDeclaration, string typeName)
        {
            var newType = namespaceDeclaration.type(typeName);          // check if already exists and if it does return it

            if (newType != null)
            {
                return(newType);
            }

            const Modifiers modifiers = Modifiers.None | Modifiers.Public;

            newType      = new TypeDeclaration(modifiers, new List <AttributeSection>());
            newType.Name = typeName;
            namespaceDeclaration.AddChild(newType);
            return(newType);
        }