public MemberComposer(ITypeComposer type, MemberMetaInfo targetMember, ITypeSymbol composerSymbol, IReadOnlyList <MethodSignature> methods) { ParentType = type; TargetMember = targetMember; ComposerSymbol = composerSymbol; Methods = methods; }
public IMemberComposer CreateStruct(ITypeComposer typeComposer, IComponentProvider provider, Func <GeneratingTypeName, string, INamedTypeSymbol> symbolProvider) { var components = _componentCollection.Components.Select(x => provider.ProvideComponent(x)).ToList(); var builder = new CodeSourceFileBuilder(_typeName.Namespace); builder.Using("System"); builder.AttributeHideEditor().AttributeGenerated(typeof(MemberComposerSource).Assembly); builder.NestType(_typeName, $"internal readonly struct {_typeName.TypeName} {GetGenericArgs()}", node => { // Fields & Field Initialization AddComponents(builder, components).NewLine(); AddComponentInitializers(builder, provider.DiscoveryType, components).NewLine(); // Construtor AddConstructor(builder, provider.DiscoveryType, components).NewLine(); AddTryConstructor(builder, provider.DiscoveryType, components).NewLine(); // Entry Point builder.Comment("Dependency Member Entry Point"); builder.AddParsingMethods(new ParsingMethodWithTypeBuilder(_member)); // Data Condition Methods for (int i = 0; i < _conditions.Count; i++) { builder.AddFormatterMethods(_conditions[i], _member, i, GetDefaultNames).NewLine(); } // Data Format Method builder.AddFormatterFinalMethods(_format, _member, _conditions.Count, GetDefaultNames).NewLine(); // Data Resolve Method builder.Comment("Data Resolver").NewLine(); for (var i = 0; i < components.Count; i++) { builder.AddParsingBody(components[i], _member, _componentCollection.GetMethodNames(i)).NewLine(); } // Nested Throw Helpers builder.Comment("Throw Helpers (Avoid inlining throw action)"); _throwCollection.AddThrowClass(builder); }); return(new MemberComposer(typeComposer, _member, symbolProvider(_typeName, builder.ToString()), GetMethodSignatures(provider))); }
public IMemberComposer Build(ITypeComposer typeComposer, MemberMetaInfo meta, GeneratingTypeName typeName, IComponentProvider provider) => new MemberComposerSource(meta, typeName, _conditions, _formatters, _symbolProvider) .CreateStruct(typeComposer, provider, (name, source) => { _sourceAddition.AddSource($"{typeName}.generated.cs", source); return(_symbolProvider.GetSymbol(name.ToString())); });
/// <summary> /// Default constructor /// </summary> /// <param name="composer">Injected composer</param> /// <param name="linker">Injected linker</param> /// <param name="processLogger">Process logger instance</param> public PrinterMarkdown(ITypeComposer composer, ILinker linker, IIndefiniteProcess processLogger) { m_linker = linker; m_processLogger = processLogger; m_composer = composer; }
public TypeParserInfo(INamedTypeSymbol parser, ITypeComposer composer) { Parser = parser; Composer = composer; }