public override void Execute(GeneratorExecutionContext context) { var files = context.AdditionalFiles.Where(x => x.Path.Contains(Namespace)); var candidateClasses = ((SyntaxReceiver)context.SyntaxReceiver).CandidateClasses; foreach (var file in files) { var name = Path.GetFileNameWithoutExtension(file.Path); var sourceCode = GetSourceCodeFromFile(file, context); var sourceText = SourceText.From(sourceCode, Encoding); context.AddSource($"{name}Generated", sourceText); var compilation = context.CreateCompilation(sourceText); var attributeSymbol = compilation.GetTypeByMetadataName(FullAttributeName); foreach (var candidateClass in candidateClasses) { var semanticModel = compilation.GetSemanticModel(candidateClass.SyntaxTree); var declaredSymbol = semanticModel.GetDeclaredSymbol(candidateClass); if (declaredSymbol.HasAttribute(attributeSymbol)) { sourceCode = GenerateSourceCode(declaredSymbol); sourceText = SourceText.From(sourceCode, Encoding); context.AddSource($"{declaredSymbol.Name}Builder.cs", sourceText); } } } }
public override void Execute(GeneratorExecutionContext context) { var files = context.AdditionalFiles.Where(x => x.Path.Contains(Namespace)); foreach (var file in files) { var name = Path.GetFileNameWithoutExtension(file.Path); var sourceCode = GetSourceCodeFromFile(file, context); var sourceText = SourceText.From(sourceCode, Encoding); context.AddSource($"{name}Generated", sourceText); var compilation = context.CreateCompilation(sourceText); var matchings = compilation.FilterCompilation(AttributeName); if (matchings.Count > 0) { var diagnostic = BuildDiagnostic(); context.ReportDiagnostic(diagnostic); } } }