Example #1
0
        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
                       ));
        }
Example #2
0
        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));
                }
            }
        }