@joebigelow / wix / commits / 01ad1ca4

Add CustomTableRef element.

Sean Hall committed Jul 10, 2020 at 21:36 UTC 01ad1ca4991e830239156b10412165ce4dd839af
4 files changed +74 -7
src/WixToolset.Core/Compiler.cs
+67
@@ -3612,6 +3612,7 @@ namespace WixToolset.Core
3612 string tableId = null;
3613 var unreal = false;
3614 var columns = new List<WixCustomTableColumnSymbol>();
3615 + var foundColumns = false;
3616
3617 foreach (var attrib in node.Attributes())
3618 {
@@ -3653,6 +3654,8 @@ namespace WixToolset.Core
3654 switch (child.Name.LocalName)
3655 {
3656 case "Column":
3657 + foundColumns = true;
3658 +
3659 var column = this.ParseColumnElement(child, childSourceLineNumbers, tableId);
3660 if (column != null)
3661 {
@@ -3690,6 +3693,67 @@ namespace WixToolset.Core
3693 Unreal = unreal,
3694 });
3695 }
3696 + else if (!foundColumns)
3697 + {
3698 + this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Column"));
3699 + }
3700 + }
3701 + }
3702 +
3703 + /// <summary>
3704 + /// Parses a CustomTableRef element.
3705 + /// </summary>
3706 + /// <param name="node">Element to parse.</param>
3707 + private void ParseCustomTableRefElement(XElement node)
3708 + {
3709 + var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
3710 + string tableId = null;
3711 +
3712 + foreach (var attrib in node.Attributes())
3713 + {
3714 + if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || CompilerCore.WixNamespace == attrib.Name.Namespace)
3715 + {
3716 + switch (attrib.Name.LocalName)
3717 + {
3718 + case "Id":
3719 + tableId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3720 + this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixCustomTable, tableId);
3721 + break;
3722 + default:
3723 + this.Core.UnexpectedAttribute(node, attrib);
3724 + break;
3725 + }
3726 + }
3727 + else
3728 + {
3729 + this.Core.ParseExtensionAttribute(node, attrib);
3730 + }
3731 + }
3732 +
3733 + if (null == tableId)
3734 + {
3735 + this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3736 + }
3737 +
3738 + foreach (var child in node.Elements())
3739 + {
3740 + if (CompilerCore.WixNamespace == child.Name.Namespace)
3741 + {
3742 + var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
3743 + switch (child.Name.LocalName)
3744 + {
3745 + case "Row":
3746 + this.ParseRowElement(child, childSourceLineNumbers, tableId);
3747 + break;
3748 + default:
3749 + this.Core.UnexpectedElement(node, child);
3750 + break;
3751 + }
3752 + }
3753 + else
3754 + {
3755 + this.Core.ParseExtensionElement(node, child);
3756 + }
3757 }
3758 }
3759
@@ -6155,6 +6219,9 @@ namespace WixToolset.Core
6219 case "CustomTable":
6220 this.ParseCustomTableElement(child);
6221 break;
6222 + case "CustomTableRef":
6223 + this.ParseCustomTableRefElement(child);
6224 + break;
6225 case "Directory":
6226 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty);
6227 break;
src/WixToolset.Core/Compiler_2.cs
+3
@@ -195,6 +195,9 @@ namespace WixToolset.Core
195 case "CustomTable":
196 this.ParseCustomTableElement(child);
197 break;
198 + case "CustomTableRef":
199 + this.ParseCustomTableRefElement(child);
200 + break;
201 case "Directory":
202 this.ParseDirectoryElement(child, null, CompilerConstants.IntegerNotSet, String.Empty);
203 break;
src/WixToolset.Core/Compiler_Bundle.cs
+1 -7
@@ -914,7 +914,6 @@ namespace WixToolset.Core
914 {
915 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
916 string customDataId = null;
917 - var foundChild = false;
917
918 foreach (var attrib in node.Attributes())
919 {
@@ -924,6 +923,7 @@ namespace WixToolset.Core
923 {
924 case "Id":
925 customDataId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
926 + this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundleCustomData, customDataId);
927 break;
928 default:
929 this.Core.UnexpectedAttribute(node, attrib);
@@ -943,7 +943,6 @@ namespace WixToolset.Core
943
944 foreach (var child in node.Elements())
945 {
946 - foundChild = true;
946 if (CompilerCore.WixNamespace == child.Name.Namespace)
947 {
948 var childSourceLineNumbers = Preprocessor.GetSourceLineNumbers(child);
@@ -962,11 +961,6 @@ namespace WixToolset.Core
961 this.Core.ParseExtensionElement(node, child);
962 }
963 }
965 -
966 - if (!foundChild)
967 - {
968 - this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName));
969 - }
964 }
965
966 /// <summary>
src/WixToolset.Core/Compiler_Module.cs
+3
@@ -141,6 +141,9 @@ namespace WixToolset.Core
141 case "CustomTable":
142 this.ParseCustomTableElement(child);
143 break;
144 + case "CustomTableRef":
145 + this.ParseCustomTableRefElement(child);
146 + break;
147 case "Dependency":
148 this.ParseDependencyElement(child);
149 break;