public override void Visit(SyntaxNode?node) { if (node == null) { return; } _syntaxReceiver.OnVisitSyntaxNode(node); base.Visit(node); }
public static async Task <Project> RunSourceGenerator <TGenerator>(this Project project, TGenerator generator, ISyntaxReceiver syntaxReceiver) where TGenerator : ISourceGenerator { if (syntaxReceiver != null) { var nodes = project.Documents .Select(o => o.GetSyntaxTreeAsync().Result) .SelectMany(o => o.GetRoot().DescendantNodes()); foreach (var syntaxNode in nodes) { syntaxReceiver.OnVisitSyntaxNode(syntaxNode); } } var nonPublic = BindingFlags.Instance | BindingFlags.NonPublic; var compilation = await project.GetCompilationAsync(); var context = (GeneratorExecutionContext)Activator.CreateInstance( type: typeof(GeneratorExecutionContext), nonPublic | BindingFlags.CreateInstance, null, new object[] { compilation, project.ParseOptions, ImmutableArray.Create <AdditionalText>(), null, syntaxReceiver, CancellationToken.None }, null) !; generator.Execute(context); var files = context .ReflectionGetValue("_additionalSources") .ReflectionGetValue("_sourcesAdded") as IEnumerable; foreach (var file in files) { project = project.AddDocument((string)file.ReflectionGetValue("HintName"), (SourceText)file.ReflectionGetValue("Text")).Project; } return(project); }
public override void Visit(SyntaxNode node) { _syntaxReceiver.OnVisitSyntaxNode(node); base.Visit(node); }