protected static StatementSyntax GetConstructorAssignmentStatement( SourceProperty p, TypeSyntax constructorType, SimpleNameSyntax sourceObjectVariableName ) => p.GetAssignmentStatement( ObjectCreationExpression(constructorType) .AddArgumentListArguments( Argument(p.GetAccessExpression(sourceObjectVariableName))));
protected static StatementSyntax GetSourceMethodCallAssignmentStatement( SourceProperty p, SimpleNameSyntax sourceObjectVariableName, string methodName ) => p.GetAssignmentStatement( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, p.GetAccessExpression(sourceObjectVariableName), IdentifierName(methodName))));
protected static StatementSyntax GetTargetMethodCallAssignmentStatement( SourceProperty p, SimpleNameSyntax sourceObjectVariableName, string methodName ) => ExpressionStatement( InvocationExpression( MemberAccessExpression( SyntaxKind.SimpleMemberAccessExpression, p.Name, IdentifierName(methodName))) .AddArgumentListArguments(Argument(p.GetAccessExpression(sourceObjectVariableName))));
protected SimpleNameSyntax GetArrayTypeName(SourceProperty p) { if (p.TypeSymbol is IArrayTypeSymbol arrayType) { if (arrayType.ElementType is INamedTypeSymbol n && n.TypeArguments.Any()) { return(GenericName(n.Name) .AddTypeArgumentListArguments( n.TypeArguments.Select(arg => IdentifierName(arg.Name)).ToArray())); } else { return(IdentifierName(arrayType.ElementType.Name)); } }
internal static PropertyRule GetRule(SourceProperty p) => Rules.First(r => r.CanHandle(p));
public abstract StatementSyntax GetAssignmentStatement( AssignmentTarget target, SourceProperty p, IdentifierNameSyntax sourceObjectVariableName);
protected PropertyDeclarationSyntax GetReadonlyPropertyDeclaration(SourceProperty p, ExpressionSyntax initializer) => p.GeneratePropertyDeclarationBase(GetBuilderPropertyType(p)) .WithInitializer(EqualsValueClause(initializer)) .WithSemicolonToken(Token(SyntaxKind.SemicolonToken));
protected virtual PropertyDeclarationSyntax GenerateBuilderPropertyDeclaration(SourceProperty p) => p.GeneratePropertyDeclarationBase(GetBuilderPropertyType(p)) .AddAccessorListAccessors( AccessorDeclaration(SyntaxKind.SetAccessorDeclaration).WithSemicolonToken(Token(SyntaxKind.SemicolonToken)));
public virtual IEnumerable <PropertyDeclarationSyntax> GenerateBuilderPropertyDeclarations(SourceProperty p) => new[] { GenerateBuilderPropertyDeclaration(p) };
public abstract TypeSyntax GetBuilderPropertyType(SourceProperty p);
public abstract bool CanHandle(SourceProperty p);