static MemberDeclarationSyntax IConvertibleConvertToSyntax(this PrimitiveDescriptor descriptor, TypeSyntax returnType, string name) => MethodDeclaration(returnType, Identifier(name)) .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword))) .WithParameterList( ParameterList( SingletonSeparatedList( Parameter(Identifier("provider")) .WithType(descriptor.TryWrapInNullableTypeSyntax(IdentifierName("IFormatProvider")))))) .WithExpressionBody( ArrowExpressionClause( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("Convert"), IdentifierName(name))) .WithArgumentList( ArgumentList( SeparatedList <ArgumentSyntax>( new SyntaxNodeOrToken[] { Argument( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, ThisExpression(), IdentifierName(descriptor.InnerName))), Token(SyntaxKind.CommaToken), Argument(IdentifierName("provider")) }))))) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken));
public static MemberDeclarationSyntax EqualsSyntax(this PrimitiveDescriptor descriptor) => MethodDeclaration(PredefinedType(Token(SyntaxKind.BoolKeyword)), Identifier("Equals")) .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.OverrideKeyword))) .WithParameterList( ParameterList( SingletonSeparatedList( Parameter(Identifier("obj")) .WithType(descriptor.TryWrapInNullableTypeSyntax(PredefinedType(Token(SyntaxKind.ObjectKeyword))))))) .WithExpressionBody( ArrowExpressionClause( BinaryExpression( SyntaxKind.LogicalAndExpression, IsPatternExpression( IdentifierName("obj"), DeclarationPattern( IdentifierName(descriptor.Name), SingleVariableDesignation(Identifier("value")))), InvocationExpression(IdentifierName("Equals")) .WithArgumentList(ArgumentList(SingletonSeparatedList(Argument(IdentifierName("value")))))))) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken));
public static MemberDeclarationSyntax IConvertibleToTypeSyntax(this PrimitiveDescriptor descriptor) => MethodDeclaration(PredefinedType(Token(SyntaxKind.ObjectKeyword)), Identifier("ToType")) .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword))) .WithParameterList( ParameterList( SeparatedList <ParameterSyntax>( new SyntaxNodeOrToken[] { Parameter(Identifier("conversionType")) .WithType(IdentifierName("Type")), Token(SyntaxKind.CommaToken), Parameter(Identifier("provider")) .WithType(descriptor.TryWrapInNullableTypeSyntax(IdentifierName("IFormatProvider"))) }))) .WithExpressionBody( ArrowExpressionClause( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, IdentifierName("Convert"), IdentifierName("ChangeType"))) .WithArgumentList( ArgumentList( SeparatedList <ArgumentSyntax>( new SyntaxNodeOrToken[] { Argument( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, ThisExpression(), IdentifierName(descriptor.InnerName))), Token(SyntaxKind.CommaToken), Argument(IdentifierName("conversionType")), Token(SyntaxKind.CommaToken), Argument(IdentifierName("provider")) }))))) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken));