/// <summary> /// Generates source code to optimize serialization and deserialization with JsonSerializer. /// </summary> /// <param name="executionContext"></param> public void Execute(GeneratorExecutionContext executionContext) { #if LAUNCH_DEBUGGER if (!Diagnostics.Debugger.IsAttached) { Diagnostics.Debugger.Launch(); } #endif if (executionContext.SyntaxContextReceiver is not SyntaxContextReceiver receiver || receiver.ClassDeclarationSyntaxList == null) { // nothing to do yet return; } JsonSourceGenerationContext context = new JsonSourceGenerationContext(executionContext); Parser parser = new(executionContext.Compilation, context); SourceGenerationSpec?spec = parser.GetGenerationSpec(receiver.ClassDeclarationSyntaxList); if (spec != null) { _rootTypes = spec.ContextGenerationSpecList[0].RootSerializableTypes; Emitter emitter = new(context, spec); emitter.Emit(); } }
private void Execute(Compilation compilation, ImmutableArray <ClassDeclarationSyntax> contextClasses, SourceProductionContext sourceProductionContext) { #if LAUNCH_DEBUGGER if (!Diagnostics.Debugger.IsAttached) { Diagnostics.Debugger.Launch(); } #endif if (contextClasses.IsDefaultOrEmpty) { return; } JsonSourceGenerationContext context = new JsonSourceGenerationContext(sourceProductionContext); Parser parser = new(compilation, context); SourceGenerationSpec?spec = parser.GetGenerationSpec(contextClasses, sourceProductionContext.CancellationToken); if (spec != null) { _rootTypes = spec.ContextGenerationSpecList[0].RootSerializableTypes; Emitter emitter = new(context, spec); emitter.Emit(); } }