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;