// TODO [3]: less naming? -> value private static void WriteMethods(DataClassWriter writer, Property property) { if (property.CustomImpl) { return; } writer.WriteLine($"#region {property.Name}"); if (!property.IsList() && !property.IsDictionary() && !property.IsLookupTable()) { writer .WriteSummaryExtension($"Sets {property.GetCrefTag()}", property) .WriteMethod( $"Set{property.Name}", property, $"toolSettings.{property.Name} = {property.Name.ToInstance().EscapeParameter()};") .WriteSummaryExtension($"Resets {property.GetCrefTag()}", property) .WriteMethod( $"Reset{property.Name}", $"toolSettings.{property.Name} = null;"); } if (property.IsBoolean()) { WriteBooleanExtensions(writer, property); } else if (property.IsList()) { WriteListExtensions(writer, property); } else if (property.IsDictionary()) { WriteDictionaryExtensions(writer, property); } else if (property.IsLookupTable()) { WriteLookupExtensions(writer, property); } writer.WriteLine("#endregion"); }
private static DataClassWriter WriteLogger(this DataClassWriter writer) { if (!writer.DataClass.IsToolSettingsClass) { return(writer); } var tool = writer.DataClass.Tool; var logger = $"{tool.GetClassName()}.{tool.Name}Logger"; return(writer.WriteLine($"public override Action<OutputType, string> CustomLogger => {logger};")); }
public static void Run(DataClass dataClass, ToolWriter toolWriter) { var writer = new DataClassWriter(dataClass, toolWriter); writer .WriteLine($"#region {dataClass.Name}Extensions") .WriteSummary(dataClass) .WriteLine("[PublicAPI]") .WriteLine("[ExcludeFromCodeCoverage]") .WriteLine($"public static partial class {dataClass.Name}Extensions") .WriteBlock(w => w.ForEach(dataClass.Properties, WriteMethods)) .WriteLine("#endregion"); }
private static DataClassWriter WriteLogLevelParser(this DataClassWriter writer) { var tool = writer.DataClass.Tool; if (!tool.LogLevelParsing) { return(writer); } var logLevelParser = $"{tool.GetClassName()}.ParseLogLevel"; return(writer.WriteLine($"protected override Func<string, LogLevel> LogLevelParser => {logLevelParser};")); }
private static DataClassWriter WriteMethod( this DataClassWriter writer, string name, IEnumerable<string> additionalParameters, params string[] modifications) { // NOTE: methods cannot be generic because constraints are not taken into account for overload resolution var parameters = new[] { $"this {writer.DataClass.Name} toolSettings" }.Concat(additionalParameters); return writer .WriteLine("[Pure]") .WriteLine($"public static {writer.DataClass.Name} {name}({parameters.JoinComma()})") .WriteBlock(w => w .WriteLine("toolSettings = toolSettings.NewInstance();") .ForEachWriteLine(modifications) .WriteLine("return toolSettings;")); }
private static DataClassWriter WriteMethod( this DataClassWriter writer, string name, IEnumerable <string> additionalParameters, params string[] modifications) { var parameters = new[] { $"this {writer.DataClass.Name} toolSettings" }.Concat(additionalParameters); return(writer .WriteLine("[Pure]") .WriteLine($"public static {writer.DataClass.Name} {name}({parameters.Join()})") .WriteBlock(w => w .WriteLine("toolSettings = toolSettings.NewInstance();") .ForEachWriteLine(modifications) .WriteLine("return toolSettings;"))); }
private static DataClassWriter WriteAssertValid(this DataClassWriter writer) { var validatedProperties = writer.DataClass.Properties.Where(x => x.Assertion != null).ToList(); if (validatedProperties.Count == 0) { return(writer); } return(writer .WriteLine("protected override void AssertValid()") .WriteBlock(w => w .WriteLine("base.AssertValid();") .ForEach( validatedProperties.Select(GetAssertion), assertion => w.WriteLine($"ControlFlow.Assert({assertion}, {assertion.DoubleQuote()});")) )); }
public static void Run(DataClass dataClass, ToolWriter toolWriter) { if (dataClass.ArgumentConstruction) { foreach (var property in dataClass.Properties) { if (property.NoArgument) { continue; } if (new[] { "int", "bool" }.Contains(property.Type)) { continue; } if (property.Format != null && property.Format.Contains("{value}")) { continue; } Console.WriteLine($"Format for '{dataClass.Name}.{property.Name}' doesn't contain '{{value}}'."); } } var writer = new DataClassWriter(dataClass, toolWriter); var baseType = dataClass.BaseClass ?? (dataClass.Name.EndsWith("Settings") ? "ToolSettings" : "ISettingsEntity"); writer .WriteLine($"#region {dataClass.Name}") .WriteSummary(dataClass) .WriteLine("[PublicAPI]") .WriteObsoleteAttributeWhenObsolete(dataClass) .WriteLine("[ExcludeFromCodeCoverage]") .WriteLine("[Serializable]") .WriteLine($"public partial class {dataClass.Name} : {baseType}") .WriteBlock(w => w .WriteToolPath() .WriteLogLevelParser() .ForEach(dataClass.Properties, WritePropertyDeclaration) .WriteAssertValid() .WriteConfigureArguments()) .WriteLine("#endregion"); }
private static void WriteDictionaryDelegateExtensions(DataClassWriter writer, Property property, Property delegateProperty) { writer.WriteLine($"#region {delegateProperty.Name}"); var propertyAccess = $"toolSettings.{property.Name}Internal"; var reference = $"<c>{delegateProperty.Name}</c>"; string GetModification(string newValue) => $"{propertyAccess}[{delegateProperty.Name.DoubleQuote()}] = {newValue};"; if (!delegateProperty.IsList()) { writer .WriteSummaryExtension($"Sets {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod( $"Set{delegateProperty.Name}", delegateProperty, GetModification(delegateProperty.Name.ToInstance())) .WriteSummaryExtension($"Resets {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod( $"Reset{delegateProperty.Name}", $"{propertyAccess}.Remove({delegateProperty.Name.DoubleQuote()});"); } if (delegateProperty.IsBoolean()) { writer .WriteSummaryExtension($"Enables {reference} in {property.GetCrefTag()}", property) .WriteMethod($"Enable{delegateProperty.Name}", GetModification("true")) .WriteSummaryExtension($"Disables {reference} in {property.GetCrefTag()}", property) .WriteMethod($"Disable{delegateProperty.Name}", GetModification("false")) .WriteSummaryExtension($"Toggles {reference} in {property.GetCrefTag()}", property) .WriteMethod($"Toggle{delegateProperty.Name}", $"ExtensionHelper.ToggleBoolean({propertyAccess}, {delegateProperty.Name.DoubleQuote()});"); } if (delegateProperty.IsList()) { var propertyInstance = delegateProperty.Name.ToInstance(); var valueType = delegateProperty.GetListValueType(); var propertyPlural = delegateProperty.Name.ToPlural(); writer .WriteSummaryExtension($"Sets {reference} in {property.GetCrefTag()} to a new collection", delegateProperty, property) .WriteMethod($"Set{propertyPlural}", $"params {valueType}[] {propertyInstance}", $"ExtensionHelper.SetCollection({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});") .WriteSummaryExtension($"Sets {reference} in {property.GetCrefTag()} to a new collection", delegateProperty, property) .WriteMethod($"Set{propertyPlural}", $"IEnumerable<{valueType}> {propertyInstance}", $"ExtensionHelper.SetCollection({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});") .WriteSummaryExtension($"Adds values to {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod($"Add{propertyPlural}", $"params {valueType}[] {propertyInstance}", $"ExtensionHelper.AddItems({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});") .WriteSummaryExtension($"Adds values to {reference} in existing {property.GetCrefTag()}", delegateProperty, property) .WriteMethod($"Add{propertyPlural}", $"IEnumerable<{valueType}> {propertyInstance}", $"ExtensionHelper.AddItems({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});") .WriteSummaryExtension($"Clears {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod($"Clear{propertyPlural}", $"{propertyAccess}.Remove({delegateProperty.Name.DoubleQuote()});") .WriteSummaryExtension($"Removes values from {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod($"Remove{propertyPlural}", $"params {valueType}[] {propertyInstance}", $"ExtensionHelper.RemoveItems({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});") .WriteSummaryExtension($"Removes values from {reference} in {property.GetCrefTag()}", delegateProperty, property) .WriteMethod($"Remove{propertyPlural}", $"IEnumerable<{valueType}> {propertyInstance}", $"ExtensionHelper.RemoveItems({propertyAccess}, {delegateProperty.Name.DoubleQuote()}, {propertyInstance}, {delegateProperty.Separator.SingleQuote()});"); } writer.WriteLine("#endregion"); }