From f5b9effe3945b7faf8a5b4876eb57dc52e7c7f96 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Sat, 11 Apr 2020 16:09:34 +1000 Subject: Update TablesAndTuples for Core --- src/TablesAndTuples/Program.cs | 56 ++++++++++++++++++++++--------- src/TablesAndTuples/WixTableDefinition.cs | 13 +++++-- 2 files changed, 50 insertions(+), 19 deletions(-) diff --git a/src/TablesAndTuples/Program.cs b/src/TablesAndTuples/Program.cs index 400d58fa..99b15a8c 100644 --- a/src/TablesAndTuples/Program.cs +++ b/src/TablesAndTuples/Program.cs @@ -65,6 +65,10 @@ namespace TablesAndTuples foreach (var tableDefinition in tableDefinitions) { + if (tableDefinition.Tupleless) + { + continue; + } var tupleType = tableDefinition.TupleDefinitionName; var fields = new JsonArray(); @@ -199,9 +203,10 @@ namespace TablesAndTuples " },"); var unrealDef = " unreal: true,"; + var tupleNameDef = + " tupleDefinitionName: {1}TupleDefinitions.{2}.Name,"; var endTableDef = String.Join(Environment.NewLine, - " tupleDefinitionName: {1}TupleDefinitions.{2}.Name,", - " tupleIdIsPrimaryKey: {3}", + " tupleIdIsPrimaryKey: {1}", " );", ""); var startAllTablesDef = String.Join(Environment.NewLine, @@ -247,7 +252,7 @@ namespace TablesAndTuples } if (!String.IsNullOrEmpty(columnDefinition.Description)) { - sb.AppendFormat(", description: \"{0}\"", columnDefinition.Description); + sb.AppendFormat(", description: \"{0}\"", columnDefinition.Description.Replace("\\", "\\\\").Replace("\"", "\\\"")); } if (columnDefinition.ModularizeType.HasValue && columnDefinition.ModularizeType.Value != ColumnModularizeType.None) { @@ -272,7 +277,11 @@ namespace TablesAndTuples { sb.AppendLine(unrealDef); } - sb.AppendLine(endTableDef.Replace("{1}", prefix).Replace("{2}", tableDefinition.TupleDefinitionName).Replace("{3}", tableDefinition.TupleIdIsPrimaryKey.ToString().ToLower())); + if (!tableDefinition.Tupleless) + { + sb.AppendLine(tupleNameDef.Replace("{1}", prefix).Replace("{2}", tableDefinition.TupleDefinitionName)); + } + sb.AppendLine(endTableDef.Replace("{1}", tableDefinition.TupleIdIsPrimaryKey.ToString().ToLower())); } sb.AppendLine(startAllTablesDef); foreach (var tableDefinition in tableDefinitions) @@ -290,19 +299,21 @@ namespace TablesAndTuples var ns = prefix ?? "Data"; var toString = String.IsNullOrEmpty(prefix) ? null : ".ToString()"; - var startTupleDef = String.Join(Environment.NewLine, + var startFileDef = String.Join(Environment.NewLine, "// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.", "", "namespace WixToolset.{2}", - "{", - " using WixToolset.Data;", + "{"); + var usingDataDef = + " using WixToolset.Data;"; + var startTupleDef = String.Join(Environment.NewLine, " using WixToolset.{2}.Tuples;", "", " public static partial class {3}TupleDefinitions", " {", " public static readonly IntermediateTupleDefinition {1} = new IntermediateTupleDefinition(", " {3}TupleDefinitionType.{1}{4},", - " new[]", + " new{5}[]", " {"); var fieldDef = " new IntermediateFieldDefinition(nameof({1}TupleFields.{2}), IntermediateFieldType.{3}),"; @@ -313,9 +324,8 @@ namespace TablesAndTuples "}", "", "namespace WixToolset.{2}.Tuples", - "{", - " using WixToolset.Data;", - "", + "{"); + var startEnumDef = String.Join(Environment.NewLine, " public enum {1}TupleFields", " {"); var fieldEnum = @@ -338,7 +348,7 @@ namespace TablesAndTuples "", " public {4} {2}", " {", - " get => this.Fields[(int){1}TupleFields.{2}].{5};", + " get => {6}this.Fields[(int){1}TupleFields.{2}]{5};", " set => this.Set((int){1}TupleFields.{2}, value);", " }"); var endTuple = String.Join(Environment.NewLine, @@ -347,20 +357,34 @@ namespace TablesAndTuples var sb = new StringBuilder(); - sb.AppendLine(startTupleDef.Replace("{1}", tupleName).Replace("{2}", ns).Replace("{3}", prefix).Replace("{4}", toString)); + sb.AppendLine(startFileDef.Replace("{2}", ns)); + if (ns != "Data") + { + sb.AppendLine(usingDataDef); + } + sb.AppendLine(startTupleDef.Replace("{1}", tupleName).Replace("{2}", ns).Replace("{3}", prefix).Replace("{4}", toString).Replace("{5}", tupleFields.Any() ? null : " IntermediateFieldDefinition")); foreach (var field in tupleFields) { - sb.AppendLine(fieldDef.Replace("{1}", tupleName).Replace("{2}", field.Name).Replace("{3}", field.Type).Replace("{4}", field.ClrType).Replace("{5}", field.AsFunction)); + sb.AppendLine(fieldDef.Replace("{1}", tupleName).Replace("{2}", field.Name).Replace("{3}", field.Type)); } sb.AppendLine(endTupleDef.Replace("{1}", tupleName).Replace("{2}", ns).Replace("{3}", prefix)); + if (ns != "Data") + { + sb.AppendLine(usingDataDef); + sb.AppendLine(); + } + sb.AppendLine(startEnumDef.Replace("{1}", tupleName)); foreach (var field in tupleFields) { - sb.AppendLine(fieldEnum.Replace("{1}", tupleName).Replace("{2}", field.Name).Replace("{3}", field.Type).Replace("{4}", field.ClrType).Replace("{5}", field.AsFunction)); + sb.AppendLine(fieldEnum.Replace("{1}", tupleName).Replace("{2}", field.Name)); } sb.AppendLine(startTuple.Replace("{1}", tupleName).Replace("{2}", ns).Replace("{3}", prefix)); foreach (var field in tupleFields) { - sb.AppendLine(fieldProp.Replace("{1}", tupleName).Replace("{2}", field.Name).Replace("{3}", field.Type).Replace("{4}", field.ClrType).Replace("{5}", field.AsFunction)); + var useCast = ns == "Data" && field.AsFunction != "AsPath()"; + var cast = useCast ? $"({field.ClrType})" : null; + var asFunction = useCast ? null : $".{field.AsFunction}"; + sb.AppendLine(fieldProp.Replace("{1}", tupleName).Replace("{2}", field.Name).Replace("{3}", field.Type).Replace("{4}", field.ClrType).Replace("{5}", asFunction).Replace("{6}", cast)); } sb.Append(endTuple); diff --git a/src/TablesAndTuples/WixTableDefinition.cs b/src/TablesAndTuples/WixTableDefinition.cs index baada41d..fde107ad 100644 --- a/src/TablesAndTuples/WixTableDefinition.cs +++ b/src/TablesAndTuples/WixTableDefinition.cs @@ -6,12 +6,13 @@ namespace TablesAndTuples { class WixTableDefinition { - public WixTableDefinition(string name, IEnumerable columns, bool unreal, string tupleDefinitionName, bool? tupleIdIsPrimaryKey) + public WixTableDefinition(string name, IEnumerable columns, bool unreal, bool tupleless, string tupleDefinitionName, bool? tupleIdIsPrimaryKey) { this.Name = name; this.Unreal = unreal; this.Columns = columns?.ToArray(); - this.TupleDefinitionName = tupleDefinitionName ?? name; + this.Tupleless = tupleless; + this.TupleDefinitionName = tupleless ? null : tupleDefinitionName ?? name.Replace("_", ""); this.TupleIdIsPrimaryKey = tupleIdIsPrimaryKey ?? DeriveTupleIdIsPrimaryKey(this.Columns); } @@ -25,6 +26,8 @@ namespace TablesAndTuples public bool TupleIdIsPrimaryKey { get; } + public bool Tupleless { get; } + static WixTableDefinition Read(XmlReader reader) { var empty = reader.IsEmptyElement; @@ -32,6 +35,7 @@ namespace TablesAndTuples string tupleDefinitionName = null; var unreal = false; bool? tupleIdIsPrimaryKey = null; + var tupleless = false; while (reader.MoveToNextAttribute()) { @@ -46,6 +50,9 @@ namespace TablesAndTuples case "tupleIdIsPrimaryKey": tupleIdIsPrimaryKey = reader.Value.Equals("yes"); break; + case "tupleless": + tupleless = reader.Value.Equals("yes"); + break; case "unreal": unreal = reader.Value.Equals("yes"); break; @@ -91,7 +98,7 @@ namespace TablesAndTuples } } - return new WixTableDefinition(name, columns.ToArray(), unreal, tupleDefinitionName, tupleIdIsPrimaryKey); + return new WixTableDefinition(name, columns.ToArray(), unreal, tupleless, tupleDefinitionName, tupleIdIsPrimaryKey); } static bool DeriveTupleIdIsPrimaryKey(WixColumnDefinition[] columns) -- cgit v1.2.3-55-g6feb