Пример #1
0
        /// <summary>
        /// Namespace.ParentType[T].NestedType[TT] -> NestedType[TT] <br/>
        /// Namespace.ParentType[T] -> global::Namespace.ParentType[T]
        /// </summary>
        private NameSyntax GetQualifiedName(ITypeInfo type)
        {
            ReferenceCollector?.AddType(type);

            string[] parts = type.Name.Split(Type.Delimiter);

            NameSyntax[] names = new NameSyntax[parts.Length];

            if (type.IsNested)
            {
                names[0] = CreateTypeName(parts.Single() !);
            }
            else
            {
                for (int i = 0; i < parts.Length - 1; i++)
                {
                    names[i] = IdentifierName(parts[i]);
                }

                names[names.Length - 1] = CreateTypeName(parts[parts.Length - 1]);

                //
                // Ez jol kezeli azt az esetet is ha a tipus nincs nevter alatt
                //

                if (!type.IsVoid && !type.IsGenericParameter)
                {
                    names[0] = AliasQualifiedName
                               (
                        IdentifierName(Token(SyntaxKind.GlobalKeyword)),
                        (SimpleNameSyntax)names[0]
                               );
                }
            }

            return(names.Qualify());

            NameSyntax CreateTypeName(string name) => type is not IGenericTypeInfo genericType?IdentifierName(name) : GenericName(name).WithTypeArgumentList
                (
                    typeArgumentList: TypeArgumentList
                    (
                        arguments: genericType.GenericArguments.ToSyntaxList(ResolveType)
                    )
                );
        }