private void WriteEmittedFile(SyntaxNode formattedNode, ICompilationUnitEmittable emittable)
        {
            StringBuilder sb = new StringBuilder();

            using (TextWriter classFileWriter = new StringWriter(sb))
                formattedNode.WriteTo(classFileWriter);

            SerializationOutputStrategy.Output($"{emittable.UnitName}", sb.ToString());
            GeneratedTypeNames.Add(emittable.UnitName);
        }
Esempio n. 2
0
        private void WriteSerializerStrategyClass(INamedTypeSymbol typeSymbol)
        {
            try
            {
                ICompilationUnitEmittable implementationEmittable = CreateEmittableImplementationSerializerStrategy(typeSymbol);
                //This cased issues in Analyzer/Generator due to dependency loading
                SyntaxNode implementationFormattedNode = Formatter.Format(implementationEmittable.CreateUnit(), new AdhocWorkspace());

                WriteEmittedFile(implementationFormattedNode, implementationEmittable);

                RequiredGenericSerializers.AddRange(implementationEmittable.GetRequestedGenericTypes());
            }
            catch (Exception e)
            {
                //We should hint to end user what Type failed and where.
                throw new InvalidOperationException($"Type: {typeSymbol.Name} encountered compilation failure. Reason: {e}", e);
            }
        }