in src/PublicToInternalGenerator/PublicToInternalGenerator.cs [99:150]
private static TMemberDeclarationSyntax WithExtraAttributes<TMemberDeclarationSyntax>(TMemberDeclarationSyntax node)
where TMemberDeclarationSyntax : MemberDeclarationSyntax
{
var lists = node.AttributeLists;
var hasAttributeLists = lists.Any();
var embeddedAttributeSyntax = SyntaxFactory.Attribute(
SyntaxFactory.AliasQualifiedName(
SyntaxFactory.IdentifierName("global"),
SyntaxFactory.IdentifierName("Microsoft.CodeAnalysis.EmbeddedAttribute")));
var generatedCodeAttributeSyntax = SyntaxFactory.Attribute(
SyntaxFactory.AliasQualifiedName(
SyntaxFactory.IdentifierName("global"),
SyntaxFactory.IdentifierName("System.CodeDom.Compiler.GeneratedCodeAttribute")))
.WithArgumentList(
SyntaxFactory.AttributeArgumentList(
SyntaxFactory.SeparatedList<AttributeArgumentSyntax>([
SyntaxFactory.AttributeArgument(
SyntaxFactory.LiteralExpression(
SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal("JetBrains.Annotations"))),
SyntaxFactory.AttributeArgument(
SyntaxFactory.LiteralExpression(
SyntaxKind.StringLiteralExpression, SyntaxFactory.Literal("42.42.42.42")))
])));
var embeddedAttributeList = SyntaxFactory
.AttributeList(SyntaxFactory.SeparatedList([embeddedAttributeSyntax]))
.WithLeadingTrivia(SyntaxFactory.Space, SyntaxFactory.Space)
.WithTrailingTrivia(SyntaxFactory.ElasticCarriageReturnLineFeed);
var generatedCodeAttributeList = SyntaxFactory
.AttributeList(SyntaxFactory.SeparatedList([generatedCodeAttributeSyntax]))
.WithLeadingTrivia(SyntaxFactory.Space, SyntaxFactory.Space)
.WithTrailingTrivia(SyntaxFactory.ElasticCarriageReturnLineFeed);
lists = lists.Add(embeddedAttributeList).Add(generatedCodeAttributeList);
if (!hasAttributeLists)
{
var leadingTrivia = node.GetLeadingTrivia();
var leadingWhitespace = leadingTrivia.LastOrDefault(x => x.IsKind(SyntaxKind.WhitespaceTrivia));
return (TMemberDeclarationSyntax)
node.WithoutLeadingTrivia()
.WithLeadingTrivia(leadingWhitespace)
.WithAttributeLists(lists)
.WithLeadingTrivia(leadingTrivia);
}
return (TMemberDeclarationSyntax)node.WithAttributeLists(lists);
}