private CodeNodeBuilder AddTryConstructor(CodeNodeBuilder builder, INamedTypeSymbol discoveryType, IReadOnlyList <IComponentTypeInfo> components) { // Arguments const string parser = "parser"; const string isSuccess = "isSuccess"; // Create Constructor with try pattern builder.AddNode($"public {_typeName.TypeName}({discoveryType} {parser}, out bool {isSuccess}) : this()", node => { for (var i = 0; i < components.Count; ++i) { // Initialize every component node.State($"{Field.Component(i)} = {MemberMethod.InitializeComponent(i)} ( {parser}, out {isSuccess} )"); // If any fails, we bail out node.If($"!{isSuccess}", node => { node.State($"{isSuccess} = false"); node.Return(); }); } // Finally we state that we success node.State($"{isSuccess} = true"); }); return(builder); }
private CodeNodeBuilder AddConstructor(CodeNodeBuilder builder, INamedTypeSymbol discoveryType, IReadOnlyList <IComponentTypeInfo> components) { // Create Constructor const string parser = "parser"; return(builder.AddNode($"public {_typeName.TypeName}({discoveryType} {parser}) : this()", node => { for (var i = 0; i < components.Count; ++i) { node.State($"{Field.Component(i)} = {MemberMethod.InitializeComponent(i)} ( {parser} )"); } })); }
private CodeNodeBuilder AddComponentInitializers(CodeNodeBuilder builder, INamedTypeSymbol discoveryType, IReadOnlyList <IComponentTypeInfo> components) { for (var i = 0; i < components.Count; ++i) { const string parserName = "parser"; const string isSuccess = "isSuccess"; builder.AddNode($"private {components[i].Type} {MemberMethod.InitializeComponent(i)}({discoveryType} {parserName})", node => { components[i].ProvideInitialize(node, parserName); }); builder.AddNode($"private {components[i].Type} {MemberMethod.TryInitializeComponent(i)}({discoveryType} {parserName}, out bool {isSuccess})", node => { components[i].ProvideTryInitialize(node, parserName, isSuccess); }); } return(builder); }