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)); }
public override ITypeNode Handle(TypeSyntax type) { if (type is NullableTypeSyntax nullable) { return(new Nullable(of: _converter.Handle(nullable.ElementType))); } return(base.Handle(type)); }
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)); }
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);