public void Execute(GeneratorExecutionContext context) { try { var diagnosticReporter = new DiagnosticReporter( context ); var needToStoreGeneratedSources = context.AnalyzerConfigOptions.GlobalOptions.TryGetValue( $"build_property.Dpdt_Generator_GeneratedSourceFolder", out var generatedSourceFolder ); var generatedSourceFolderFullPath = Path.GetFullPath( generatedSourceFolder ?? "Dpdt.Pregenerated" ); var typeInfoContainer = new GeneratorTypeInfoContainer( ref context, needToStoreGeneratedSources, generatedSourceFolderFullPath ); var internalGenerator = new DpdtInternalGenerator( diagnosticReporter ); if (needToStoreGeneratedSources) { if (Directory.Exists(generatedSourceFolderFullPath)) { Directory.Delete(generatedSourceFolderFullPath, true); } Directory.CreateDirectory(generatedSourceFolderFullPath); } internalGenerator.Execute( typeInfoContainer, null ); diagnosticReporter.ReportWarning( "Dpdt generator successfully finished its work", $"Dpdt generator successfully finished its work, {typeInfoContainer.UnitsGenerated} compilation unit(s) generated." ); } catch (Exception excp) { context.ReportDiagnostic( Diagnostic.Create( new DiagnosticDescriptor( id: "DPDTINJECT100", title: "Couldn't generate a binding boilerplate code", messageFormat: "Couldn't generate a binding boilerplate code '{0}' {1}", category: "DpDtInject", DiagnosticSeverity.Error, isEnabledByDefault: true ), Location.None, excp.Message, excp.StackTrace ) ); } }
public void Execute(GeneratorExecutionContext context) { try { if (!(context.SyntaxReceiver is ClusterCandidateSyntaxReceiver receiver)) { return; } var doBeautify = true; var beautifyExists = context.AnalyzerConfigOptions.GlobalOptions.TryGetValue( $"build_property.Dpdt_Generator_Beautify", out var beautify ); if (beautifyExists) { if (bool.TryParse(beautify?.ToLower() ?? "false", out var parsed)) { doBeautify = parsed; } } var diagnosticReporter = new DiagnosticReporter( context ); var sw = Stopwatch.StartNew(); var typeInfoContainer = new GeneratorTypeInfoContainer( ref context, receiver.CandidateClasses ); var internalGenerator = new DpdtInternalGenerator( diagnosticReporter, doBeautify ); internalGenerator.Execute( typeInfoContainer ); diagnosticReporter.ReportWarning( "Dpdt generator successfully finished its work", $"Dpdt generator successfully finished its work, {typeInfoContainer.UnitsGenerated} compilation unit(s) generated, taken {sw.Elapsed}." ); } catch (Exception excp) { Logging.LogGen(excp); context.ReportDiagnostic( Diagnostic.Create( new DiagnosticDescriptor( id: "DPDTINJECT100", title: "Couldn't generate a binding boilerplate code", messageFormat: "Couldn't generate a binding boilerplate code '{0}' {1}", category: "DpDtInject", DiagnosticSeverity.Error, isEnabledByDefault: true ), Location.None, excp.Message, excp.StackTrace ) ); } }