Example #1
0
        public override TypeNode Handle(TypeSyntax type)
        {
            if (type is NullableTypeSyntax nullable)
            {
                return(new Nullable(of: _converter.Handle(nullable.ElementType)));
            }
            else if (type is GenericNameSyntax generic && generic.Identifier.Text == "Nullable" &&
                     generic.TypeArgumentList.Arguments.Count == 1)
            {
                return(new Nullable(of: _converter.Handle(generic.TypeArgumentList.Arguments.Single())));
            }

            return(base.Handle(type));
        }
        public override ITypeNode Handle(TypeSyntax type)
        {
            if (type is GenericNameSyntax generic && ConvertibleFrom.Contains(generic.Identifier.Text) &&
                generic.TypeArgumentList.Arguments.Count == 2)
            {
                var key = _converter.Handle(generic.TypeArgumentList.Arguments[0]);

                if (key is String || key is Number)
                {
                    return(new Dictionary(
                               key: key,
                               value: _converter.Handle(generic.TypeArgumentList.Arguments[1])));
                }
            }

            return(base.Handle(type));
        }
Example #3
0
        public override ITypeNode Handle(TypeSyntax type)
        {
            if (type is NullableTypeSyntax nullable)
            {
                return(new Nullable(of: _converter.Handle(nullable.ElementType)));
            }

            return(base.Handle(type));
        }
Example #4
0
 public override TypeNode Handle(TypeSyntax type)
 {
     if (type is ArrayTypeSyntax array)
     {
         return(new Array(
                    of: _converter.Handle(array.ElementType),
                    rank: array.RankSpecifiers.Aggregate(0, (total, specifier) => total + specifier.Rank)));
     }
     else if (type is IdentifierNameSyntax identified && ConvertibleFrom.Contains(identified.Identifier.Text))
     {
         return(new Array(
                    of: new Any(),
                    rank: 1));
     }
Example #5
0
        public override ITypeNode Handle(TypeSyntax type)
        {
            string Name(int index) => $"Item{index + 1}";

            if (type is TupleTypeSyntax tuple)
            {
                return(new Tuple(
                           elements: tuple.Elements.Select((element, index) => new Tuple.Element(
                                                               name: !string.IsNullOrEmpty(element.Identifier.Text) ? element.Identifier.Text : Name(index),
                                                               type: _converter.Handle(element.Type)))));
            }
            else if (type is GenericNameSyntax generic && generic.Identifier.Text == "Tuple")
            {
                return(new Tuple(
                           elements: generic.TypeArgumentList.Arguments.Select((argument, index) => new Tuple.Element(
                                                                                   name: Name(index),
                                                                                   type: _converter.Handle(argument)))));
            }

            return(base.Handle(type));
        }
 public virtual ITypeNode Handle(TypeSyntax type)
 => _nextHandler is null ? new Any() : _nextHandler.Handle(type);