public static SourceGeneratorContext <T> Create(GeneratorExecutionContext context)
        {
            var sourceGenContext = new SourceGeneratorContext <T>(context);

            if (sourceGenContext.Options.EnableDebug)
            {
                if (!Debugger.IsAttached)
                {
                    Debugger.Launch();
                }
            }
            return(sourceGenContext);
        }
Beispiel #2
0
        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));
                }
            }
        }
Beispiel #3
0
        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));
            }
        }