Inheritance: TypeDefinition
        /// <summary>
        /// Generates an array type
        /// </summary>
        /// <param name="emitter">The emitter to write to</param>
        /// <param name="typeName">The name of the type</param>
        /// <param name="def">The array definition</param>
        /// <param name="root">True if this is the root type, false otherwise</param>
        private void _generateArrayType(CSharpEmitter emitter, string typeName, string fieldName, ArrayDefinition def, bool root)
        {
            if(root)
            {
                typeName = _getDefinitionName(typeName, fieldName, def);
                var elementTypeName = _getDefinitionName(null, "element", def);
                using (var wrapper = _generateWrapperType(emitter, typeName, elementTypeName))
                {
                    if(root)
                    {
                        _generateDefinition(wrapper, null, "element", def.ElementType);
                    }
                }
            }

            if (!root)
                _generateDefinition(emitter, null, fieldName, def.ElementType);
        }