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); }
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); } }