我有一个简单的源生成器定义为
[Generator]
public class NestedObjectGenerator : ISourceGenerator
{
public void Initialize(GeneratorInitializationContext context)
{
context.RegisterForSyntaxNotifications(() => new MySyntaxReceiver());
}
public void Execute(GeneratorExecutionContext context)
{
var recv = (MySyntaxReceiver)context.SyntaxReceiver;
ClassDeclarationSyntax cds = recv?.Class;
if (cds is null) return;
// use cds here
}
private class MySyntaxReceiver : ISyntaxReceiver
{
public ClassDeclarationSyntax Class { get; private set; }
public void OnVisitSyntaxNode(SyntaxNode node)
{
if (node is ClassDeclarationSyntax cds &&
cds.Modifiers.Any(SyntaxKind.PartialKeyword))
Class = cds;
}
}
}
我在一个包含几个部分类的文件上运行这个生成器。但是,它似乎Execute()
只被调用一次,并且Class
包含的是具有该Main()
方法的类,即使我在文件中有其他类。
所以,我的问题是:如何让Execute()
每个受影响的语法节点运行一次,即,让它在每个部分类中运行一次?