/// <summary>
        /// Visits a <see cref="CodeNamespaceImportCollection"/>.
        /// </summary>
        /// <param name="codeNamespaceImportCollection">The <see cref="CodeNamespaceImportCollection"/> to visit.</param>
        protected override void VisitCodeNamespaceImportCollection(CodeNamespaceImportCollection codeNamespaceImportCollection)
        {
            CodeNamespaceImport[] sortedImports = codeNamespaceImportCollection.Cast <CodeNamespaceImport>().OrderBy(i => i.Namespace, new NamespaceImportComparer()).Distinct().ToArray();

            codeNamespaceImportCollection.Clear();
            codeNamespaceImportCollection.AddRange(sortedImports);

            base.VisitCodeNamespaceImportCollection(codeNamespaceImportCollection);
        }
Example #2
0
        /// <summary>
        ///     Shortifies the specified type reference.
        /// </summary>
        /// <param name="typeReference">The type reference.</param>
        /// <param name="type">The type.</param>
        /// <param name="imports">The imports.</param>
        public static void Shortify(CodeTypeReference typeReference, Type type, CodeNamespaceImportCollection imports)
        {
            if (typeReference.ArrayRank > 0)
            {
                Shortify(typeReference.ArrayElementType, type, imports);
                return;
            }

            if (type.Namespace != null && imports.Cast <CodeNamespaceImport>()
                .Any(cni => cni.Namespace == type.Namespace))
            {
                var prefix = type.Namespace + '.';

                if (prefix != null)
                {
                    var pos = typeReference.BaseType.IndexOf(prefix);
                    if (pos == 0)
                    {
                        typeReference.BaseType = typeReference.BaseType.Substring(prefix.Length);
                    }
                }
            }
        }