Пример #1
0
 public CSharpSyntaxNode Convert(TypeAliasDeclaration node)
 {
     if (IsDelegateDeclaration(node))
     {
         return(CreateDelegateDeclaration(node));
     }
     return(SyntaxFactory.UsingDirective(SyntaxFactory.NameEquals(node.Name.Text), node.Type.ToCsNode <NameSyntax>()));
 }
Пример #2
0
 public int VisitTypeAliasDeclaration(TypeAliasDeclaration declaration)
 {
     _Writer.Write("type ");
     _Writer.Write(declaration.Name);
     _Writer.Write(" = ");
     declaration.Type.WriteTypeReference(_Writer);
     _Writer.WriteLine(';');
     return(0);
 }
Пример #3
0
        private DelegateDeclarationSyntax CreateDelegateDeclaration(TypeAliasDeclaration node)
        {
            FunctionType fn = node.Type as FunctionType;

            DelegateDeclarationSyntax csDelegateDeclaration = SyntaxFactory
                                                              .DelegateDeclaration(fn.Type.ToCsNode <TypeSyntax>(), node.Name.Text)
                                                              .AddParameterListParameters(fn.Parameters.ToCsNodes <ParameterSyntax>())
                                                              .AddModifiers(node.Modifiers.ToCsNodes <SyntaxToken>());;

            if (node.TypeParameters.Count > 0)
            {
                csDelegateDeclaration = csDelegateDeclaration.AddTypeParameterListParameters(node.TypeParameters.ToCsNodes <TypeParameterSyntax>());
            }
            return(csDelegateDeclaration);
        }
        public void TestTypeAliasDeclaration()
        {
            TypeAliasDeclaration node = new TypeAliasDeclaration(GetSymbolAtom(), GetTypeParameterList(), PrimitiveType.NumberType, Declaration.DeclarationFlags.Export, DefaultLineInfo);

            CheckSerializationRoundTrip(node);
        }
Пример #5
0
 /// <nodoc />
 public virtual void Visit(TypeAliasDeclaration typeAliasDeclaration)
 {
 }
Пример #6
0
 public static TypeAliasDefinition Create(TypeAliasDeclaration node)
 {
     return(new TypeAliasDefinition(node));
 }
Пример #7
0
 public TypeAliasDefinition(TypeAliasDeclaration node)
 {
     Node = node;
 }
Пример #8
0
 private bool IsDelegateDeclaration(TypeAliasDeclaration node)
 {
     return(node.Type.Kind == NodeKind.FunctionType);
 }
Пример #9
0
        private void AddMember(Type type, bool isDataContract, InterfaceDeclaration declaration, MemberInfo member, List <Type> processingTypes, Dictionary <Type, TypeAliasDeclaration> stringUnionEnums)
        {
            if (member.GetCustomAttribute <JsonIgnoreAttribute>() != null &&
                member.GetCustomAttribute <IgnoreDataMemberAttribute>() != null)
            {
                return;
            }

            var dm = member.GetCustomAttribute <DataMemberAttribute>();

            if (isDataContract && dm == null)
            {
                return;
            }

            var jp = member.GetCustomAttribute <JsonPropertyAttribute>();

            var fd = new FieldDeclaration();

            fd.FieldName = jp.PropertyName ?? dm?.Name ?? member.Name;

            var ft = member is FieldInfo fld ? fld.FieldType : ((PropertyInfo)member).PropertyType;

            if (ft.IsConstructedGenericType && ft.GetGenericTypeDefinition() == typeof(Nullable <>))
            {
                ft            = ft.GenericTypeArguments[0];
                fd.IsOptional = true;
            }
            else
            {
                fd.IsOptional = !ft.GetTypeInfo().IsValueType &&
                                ((jp != null && jp.Required != Required.Default) ||
                                 member.GetCustomAttribute <RequiredAttribute>() != null);
            }

            if (ft.GetTypeInfo().IsEnum &&
                member.GetCustomAttribute <JsonConverterAttribute>()?.ConverterType == typeof(StringEnumConverter))
            {
                if (!stringUnionEnums.TryGetValue(ft, out var ta))
                {
                    ta      = new TypeAliasDeclaration();
                    ta.Name = GetTypeName(ft);

                    var ut = new UnionType();
                    foreach (var ftf in ft.GetTypeInfo().DeclaredFields)
                    {
                        var em = ftf.GetCustomAttribute <EnumMemberAttribute>();

                        if (isDataContract && em == null)
                        {
                            continue;
                        }

                        ut.ElementTypes.Add(new StringLiteralType()
                        {
                            Value = em?.Value ?? ftf.Name
                        });
                    }

                    ta.Type = ut;

                    stringUnionEnums[ft] = ta;
                }
                fd.FieldType = ta;
            }
            else
            {
                fd.FieldType = GetTypeReference(ft, processingTypes, stringUnionEnums);
            }

            declaration.Members.Add(fd);
        }