From afbc6889c73d58136cb8851858ca3c17f41dc2c5 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 26 Mar 2020 15:21:06 +1000 Subject: Add BundleExtension element. Add GetTestXml. Fix issue with building with current version of burn. --- src/WixToolset.Core/Compiler.cs | 6 +++ src/WixToolset.Core/Compiler_Bundle.cs | 73 ++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) (limited to 'src/WixToolset.Core') diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs index 8c0c4a39..6f122f7b 100644 --- a/src/WixToolset.Core/Compiler.cs +++ b/src/WixToolset.Core/Compiler.cs @@ -6121,6 +6121,12 @@ namespace WixToolset.Core case "BootstrapperApplicationRef": this.ParseBootstrapperApplicationRefElement(child); break; + case "BundleExtension": + this.ParseBundleExtensionElement(child); + break; + case "BundleExtensionRef": + this.ParseSimpleRefElement(child, "WixBundleExtension"); + break; case "ComplianceCheck": this.ParseComplianceCheckElement(child); break; diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs index 3be7d0c5..a840e448 100644 --- a/src/WixToolset.Core/Compiler_Bundle.cs +++ b/src/WixToolset.Core/Compiler_Bundle.cs @@ -278,6 +278,12 @@ namespace WixToolset.Core case "BootstrapperApplicationRef": this.ParseBootstrapperApplicationRefElement(child); break; + case "BundleExtension": + this.ParseBundleExtensionElement(child); + break; + case "BundleExtensionRef": + this.ParseSimpleRefElement(child, "WixBundleExtension"); + break; case "OptionalUpdateRegistration": this.ParseOptionalUpdateRegistrationElement(child, manufacturer, parentName, name); break; @@ -759,6 +765,73 @@ namespace WixToolset.Core } } + /// + /// Parse the BundleExtension element. + /// + /// Element to parse + private void ParseBundleExtensionElement(XElement node) + { + var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); + Identifier previousId = null; + var previousType = ComplexReferenceChildType.Unknown; + + // The BundleExtension element acts like a Payload element so delegate to the "Payload" attribute parsing code to parse and create a Payload entry. + var id = this.ParsePayloadElementContent(node, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId, false); + if (null != id) + { + previousId = id; + previousType = ComplexReferenceChildType.Payload; + } + + foreach (var child in node.Elements()) + { + if (CompilerCore.WixNamespace == child.Name.Namespace) + { + switch (child.Name.LocalName) + { + case "Payload": + previousId = this.ParsePayloadElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId); + previousType = ComplexReferenceChildType.Payload; + break; + case "PayloadGroupRef": + previousId = this.ParsePayloadGroupRefElement(child, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, previousType, previousId); + previousType = ComplexReferenceChildType.PayloadGroup; + break; + default: + this.Core.UnexpectedElement(node, child); + break; + } + } + else + { + this.Core.ParseExtensionElement(node, child); + } + } + + if (null == previousId) + { + // We need *either* or or even just @SourceFile on the BundleExtension... + // but we just say there's a missing . + // TODO: Is there a better message for this? + this.Core.Write(ErrorMessages.ExpectedElement(sourceLineNumbers, node.Name.LocalName, "Payload")); + } + + if (null == id) + { + this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); + } + + // Add the BundleExtension. + if (!this.Core.EncounteredError) + { + var tuple = new WixBundleExtensionTuple(sourceLineNumbers, id) + { + PayloadRef = id.Id, + }; + this.Core.AddTuple(tuple); + } + } + /// /// Parse the OptionalUpdateRegistration element. /// -- cgit v1.2.3-55-g6feb