internal string[] GenerateClassModule()
        {
            string name = (ProxyInterface.Name.StartsWith("I") ? ProxyInterface.Name.Substring(1) : ProxyInterface.Name) + "Duck_" + AquireCounter().ToString();

            StringBuilder classBuilder = new StringBuilder();
            StringBuilder issueBuilder = new StringBuilder();

            using (DuckTypeIssueClassGenerator issueClassGenerator = new DuckTypeIssueClassGenerator(issueBuilder, ProxyInterface, name))
            {
                using (DuckTypeClassGenerator classGenerator = new DuckTypeClassGenerator(classBuilder, ProxyInterface, name, issueClassGenerator.ImplementationName))
                {
                    if (ProxyInterface.IsValidEventClass)
                    {
                        EventInfo[] events = ProxyInterface.Events;
                        using (DuckTypeEventsGenerator eventsBuilder = new DuckTypeEventsGenerator(classBuilder, events))
                        {

                        }
                    }

                    HasIndexPropertyAttribute indexAttribute = ProxyInterface.GetHasIndexPropertyAttribute();
                    PropertyInfo[] indexProperties = ProxyInterface.PropertiesIndexer;
                    using (DuckTypeIndexerGenerator indexGenerator = new DuckTypeIndexerGenerator(classBuilder, indexProperties, indexAttribute))
                    {

                    }

                    PropertyInfo[] properties = ProxyInterface.Properties;
                    using (DuckTypePropertiesGenerator propertiesGenerator = new DuckTypePropertiesGenerator(classBuilder, properties))
                    {

                    }

                    MethodInfo[] methods = ProxyInterface.Methods;
                    using (DuckTypeMethodsGenerator methodsGenerator = new DuckTypeMethodsGenerator(classBuilder, methods))
                    {

                    }

                    EnumeratorAttribute enumAttribute = ProxyInterface.GetEnumeratorAttribute();
                    MethodInfo[] enumeratorMethods = ProxyInterface.MethodsWithEnumerator;
                    using (DuckTypeEnumeratorGenerator enumeratorGenerator = new DuckTypeEnumeratorGenerator(classBuilder, enumeratorMethods, enumAttribute))
                    {

                    }

                    MethodInfo[] issueMethods = ProxyInterface.MethodsWithSyntaxIssue;
                    using (DuckTypeMethodsGenerator methodsGenerator = new DuckTypeMethodsGenerator(issueBuilder, issueMethods))
                    {

                    }
                }
            }

            return new string[] { classBuilder.ToString(), issueBuilder.ToString() };
        }
        internal DuckTypeIndexerGenerator(StringBuilder builder, PropertyInfo[] properties, HasIndexPropertyAttribute info)
        {
            HasProperties = null != properties && properties.Length > 0;
            if (!HasProperties)
            {
                return;
            }

            Builder = builder;
            Info    = info;
            Builder.AppendLine(Environment.NewLine + "\t\t#region Indexer" + Environment.NewLine);

            foreach (PropertyInfo item in properties)
            {
                bool   asMethod     = IsInvokeAsMethod(item);
                string nameInternal = InternalName(item);

                if (IsEnumTypeProperty(item))
                {
                    BuildEnumTypeProperty(item, nameInternal, asMethod);
                }
                if (IsSystemValueTypeProperty(item))
                {
                    BuildSystemValueTypeProperty(item, nameInternal, asMethod);
                }
                else if (IsNetOfficeReferenceTypeProperty(item))
                {
                    BuildNetOfficeReferenceTypeProperty(item, nameInternal, asMethod);
                }
                else if (IsObjectTypeProperty(item))
                {
                    BuildObjectTypeProperty(item, nameInternal, asMethod);
                }
                else
                {
                    throw new InvalidProgramException();
                }
            }
        }