public static string GenerateSerializationPartialClass( this Compilation compilation, INamedTypeSymbol classSymbol, AttributeData serializableAttr, string?migrationPath, bool embedded, JsonSerializerOptions?jsonSerializerOptions, ImmutableArray <ISymbol> fieldsAndProperties, ImmutableArray <INamedTypeSymbol> serializableTypes, ImmutableArray <INamedTypeSymbol> embeddedSerializableTypes ) { var version = (int)serializableAttr.ConstructorArguments[0].Value !; var migrations = SerializableMigrationSchema.GetMigrations( classSymbol, version, migrationPath, jsonSerializerOptions ); return(compilation.GenerateSerializationPartialClass( classSymbol, serializableAttr, migrationPath, embedded, jsonSerializerOptions, migrations.ToImmutableArray(), fieldsAndProperties, serializableTypes, embeddedSerializableTypes )); }
public void Execute(GeneratorExecutionContext context) { if (context.SyntaxContextReceiver is not SerializerSyntaxReceiver receiver) { return; } var jsonOptions = SerializableMigrationSchema.GetJsonSerializerOptions(); // List of types that _will_ become ISerializable var serializableList = receiver.SerializableList; var embeddedSerializableList = receiver.EmbeddedSerializableList; foreach (var(classSymbol, (serializableAttr, fieldsList)) in receiver.ClassAndFields) { if (serializableAttr == null) { continue; } string classSource = context.GenerateSerializationPartialClass( classSymbol, serializableAttr, false, fieldsList.ToImmutableArray(), jsonOptions, serializableList, embeddedSerializableList ); if (classSource != null) { context.AddSource($"{classSymbol.ToDisplayString()}.Serialization.cs", SourceText.From(classSource, Encoding.UTF8)); } } foreach (var(classSymbol, (embeddedSerializableAttr, fieldsList)) in receiver.EmbeddedClassAndFields) { if (embeddedSerializableAttr == null) { continue; } string classSource = context.GenerateSerializationPartialClass( classSymbol, embeddedSerializableAttr, true, fieldsList.ToImmutableArray(), jsonOptions, serializableList, embeddedSerializableList ); if (classSource != null) { context.AddSource($"{classSymbol.ToDisplayString()}.Serialization.cs", SourceText.From(classSource, Encoding.UTF8)); } } }