public static SourceGeneratorContext <T> Create(GeneratorExecutionContext context) { var sourceGenContext = new SourceGeneratorContext <T>(context); if (sourceGenContext.Options.EnableDebug) { if (!Debugger.IsAttached) { Debugger.Launch(); } } return(sourceGenContext); }
public void Execute(GeneratorExecutionContext context) { using var sourceGenContext = SourceGeneratorContext <ActorProxySourceGenerator> .Create(context); if (context.SyntaxReceiver is ActorSyntaxReceiver actorSyntaxReciver) { foreach (var proxy in actorSyntaxReciver.CandidateProxies) { var source = GenearteProxy(proxy, sourceGenContext); context.AddSource(source.FileName, SourceText.From(source.SourceCode, Encoding.UTF8)); } } }
private GeneratedSource GenearteProxy(ClassDeclarationSyntax proxy, SourceGeneratorContext <ActorProxySourceGenerator> context) { try { var proxyModel = GetModel(proxy, context.GeneratorExecutionContext.Compilation); var templateString = ResourceReader.GetResource("ActorProxy.scriban"); var result = TemplateGenerator.Execute(templateString, proxyModel); context.TryLogSourceCode(proxy, result); return(new GeneratedSource(result, proxyModel.ClassName)); } catch (Exception ex) { context.TryLogException(proxy, ex); return(context.GenerateErrorSourceCode(ex, proxy)); } }