Modernize BalCompiler and BalBurnBackendExtension.
Sean Hall committed
Apr 6, 2020 at 12:30 UTC
18752ee7da742d0219e7b882315e03ad888f5725
3 files changed
+150
-129
src/test/WixToolsetTest.Bal/BalExtensionFixture.cs
+5
@@ -3,6 +3,7 @@
3
namespace WixToolsetTest.Bal
4
{
5
using System.IO;
6
+ using System.Linq;
7
using WixBuildTools.TestSupport;
8
using WixToolset.Core.TestPackage;
9
using Xunit;
@@ -29,6 +30,10 @@ namespace WixToolsetTest.Bal
30
"-o", bundleFile,
31
});
32
compileResult.AssertSuccess();
33
+ Assert.Equal(new[]
34
+ {
35
+ "BurnBackend didn't provide Wixout so skipping BalExtension PostBind verification."
36
+ }, compileResult.Messages.Select(x => x.ToString()).ToArray());
37
38
Assert.True(File.Exists(bundleFile));
39
}
src/wixext/BalBurnBackendExtension.cs
+34
-37
@@ -4,10 +4,10 @@ namespace WixToolset.Bal
4
{
5
using System;
6
using System.Linq;
7
+ using WixToolset.Bal.Tuples;
8
using WixToolset.Data;
9
using WixToolset.Data.Burn;
9
- using WixToolset.Data.WindowsInstaller;
10
- using WixToolset.Data.WindowsInstaller.Rows;
10
+ using WixToolset.Data.Tuples;
11
using WixToolset.Extensibility;
12
using WixToolset.Extensibility.Data;
13
@@ -17,17 +17,17 @@ namespace WixToolset.Bal
17
{
18
base.PostBackendBind(result);
19
20
- var output = WindowsInstallerData.Load(result.Wixout, false);
21
-
22
- // Only process Bundles.
23
- if (OutputType.Bundle != output.Type)
20
+ if (result.Wixout == null)
21
{
22
+ this.Messaging.Write(new Message(null, MessageLevel.Warning, 1, "BurnBackend didn't provide Wixout so skipping BalExtension PostBind verification."));
23
return;
24
}
25
28
- var baTable = output.Tables["WixBootstrapperApplication"];
29
- var baRow = baTable.Rows[0];
30
- var baId = (string)baRow[0];
26
+ var intermediate = Intermediate.Load(result.Wixout);
27
+ var section = intermediate.Sections.Single();
28
+
29
+ var baTuple = section.Tuples.OfType<WixBootstrapperApplicationTuple>().SingleOrDefault();
30
+ var baId = baTuple?.Id?.Id;
31
if (null == baId)
32
{
33
return;
@@ -38,60 +38,57 @@ namespace WixToolset.Bal
38
39
if (isStdBA || isMBA)
40
{
41
- this.VerifyBAFunctions(output);
41
+ this.VerifyBAFunctions(section);
42
}
43
44
if (isMBA)
45
{
46
- this.VerifyPrereqPackages(output);
46
+ this.VerifyPrereqPackages(section);
47
}
48
}
49
50
- private void VerifyBAFunctions(WindowsInstallerData output)
50
+ private void VerifyBAFunctions(IntermediateSection section)
51
{
52
- Row baFunctionsRow = null;
53
- var baFunctionsTable = output.Tables["WixBalBAFunctions"];
54
- foreach (var row in baFunctionsTable.Rows)
52
+ WixBalBAFunctionsTuple baFunctionsTuple = null;
53
+ foreach (var tuple in section.Tuples.OfType<WixBalBAFunctionsTuple>())
54
{
56
- if (null == baFunctionsRow)
55
+ if (null == baFunctionsTuple)
56
{
58
- baFunctionsRow = row;
57
+ baFunctionsTuple = tuple;
58
}
59
else
60
{
62
- this.Messaging.Write(BalErrors.MultipleBAFunctions(row.SourceLineNumbers));
61
+ this.Messaging.Write(BalErrors.MultipleBAFunctions(tuple.SourceLineNumbers));
62
}
63
}
64
66
- var payloadPropertiesTable = output.Tables["WixPayloadProperties"];
67
- var payloadPropertiesRows = payloadPropertiesTable.Rows.Cast<WixPayloadPropertiesRow>();
68
- if (null == baFunctionsRow)
65
+ var payloadPropertiesTuples = section.Tuples.OfType<WixBundlePayloadTuple>().ToList();
66
+ if (null == baFunctionsTuple)
67
{
70
- foreach (var payloadPropertiesRow in payloadPropertiesRows)
68
+ foreach (var payloadPropertiesTuple in payloadPropertiesTuples)
69
{
70
// TODO: Make core WiX canonicalize Name (this won't catch '.\bafunctions.dll').
73
- if (string.Equals(payloadPropertiesRow.Name, "bafunctions.dll", StringComparison.OrdinalIgnoreCase))
71
+ if (string.Equals(payloadPropertiesTuple.Name, "bafunctions.dll", StringComparison.OrdinalIgnoreCase))
72
{
75
- this.Messaging.Write(BalWarnings.UnmarkedBAFunctionsDLL(payloadPropertiesRow.SourceLineNumbers));
73
+ this.Messaging.Write(BalWarnings.UnmarkedBAFunctionsDLL(payloadPropertiesTuple.SourceLineNumbers));
74
}
75
}
76
}
77
else
78
{
81
- // TODO: May need to revisit this depending on the outcome of #5273.
82
- var payloadId = (string)baFunctionsRow[0];
83
- var bundlePayloadRow = payloadPropertiesRows.Single(x => payloadId == x.Id);
84
- if (BurnConstants.BurnUXContainerName != bundlePayloadRow.Container)
79
+ var payloadId = baFunctionsTuple.Id;
80
+ var bundlePayloadTuple = payloadPropertiesTuples.Single(x => payloadId == x.Id);
81
+ if (BurnConstants.BurnUXContainerName != bundlePayloadTuple.ContainerRef)
82
{
86
- this.Messaging.Write(BalErrors.BAFunctionsPayloadRequiredInUXContainer(baFunctionsRow.SourceLineNumbers));
83
+ this.Messaging.Write(BalErrors.BAFunctionsPayloadRequiredInUXContainer(baFunctionsTuple.SourceLineNumbers));
84
}
85
}
86
}
87
91
- private void VerifyPrereqPackages(WindowsInstallerData output)
88
+ private void VerifyPrereqPackages(IntermediateSection section)
89
{
93
- var prereqInfoTable = output.Tables["WixMbaPrereqInformation"];
94
- if (null == prereqInfoTable || prereqInfoTable.Rows.Count == 0)
90
+ var prereqInfoTuples = section.Tuples.OfType<WixMbaPrereqInformationTuple>().ToList();
91
+ if (prereqInfoTuples.Count == 0)
92
{
93
this.Messaging.Write(BalErrors.MissingPrereq());
94
return;
@@ -100,24 +97,24 @@ namespace WixToolset.Bal
97
var foundLicenseFile = false;
98
var foundLicenseUrl = false;
99
103
- foreach (Row prereqInfoRow in prereqInfoTable.Rows)
100
+ foreach (var prereqInfoTuple in prereqInfoTuples)
101
{
105
- if (null != prereqInfoRow[1])
102
+ if (null != prereqInfoTuple.LicenseFile)
103
{
104
if (foundLicenseFile || foundLicenseUrl)
105
{
109
- this.Messaging.Write(BalErrors.MultiplePrereqLicenses(prereqInfoRow.SourceLineNumbers));
106
+ this.Messaging.Write(BalErrors.MultiplePrereqLicenses(prereqInfoTuple.SourceLineNumbers));
107
return;
108
}
109
110
foundLicenseFile = true;
111
}
112
116
- if (null != prereqInfoRow[2])
113
+ if (null != prereqInfoTuple.LicenseUrl)
114
{
115
if (foundLicenseFile || foundLicenseUrl)
116
{
120
- this.Messaging.Write(BalErrors.MultiplePrereqLicenses(prereqInfoRow.SourceLineNumbers));
117
+ this.Messaging.Write(BalErrors.MultiplePrereqLicenses(prereqInfoTuple.SourceLineNumbers));
118
return;
119
}
120
src/wixext/BalCompiler.cs
+111
-92
@@ -15,16 +15,14 @@ namespace WixToolset.Bal
15
/// </summary>
16
public sealed class BalCompiler : BaseCompilerExtension
17
{
18
- private SourceLineNumber addedConditionLineNumber;
19
- private Dictionary<string, WixMbaPrereqInformationTuple> prereqInfoRows;
18
+ private readonly Dictionary<string, WixMbaPrereqInformationTuple> prereqInfoTuplesByPackageId;
19
20
/// <summary>
21
/// Instantiate a new BalCompiler.
22
/// </summary>
23
public BalCompiler()
24
{
26
- this.addedConditionLineNumber = null;
27
- this.prereqInfoRows = new Dictionary<string, WixMbaPrereqInformationTuple>();
25
+ this.prereqInfoTuplesByPackageId = new Dictionary<string, WixMbaPrereqInformationTuple>();
26
}
27
28
public override XNamespace Namespace => "http://wixtoolset.org/schemas/v4/wxs/bal";
@@ -82,7 +80,7 @@ namespace WixToolset.Bal
80
/// <param name="context">Extra information about the context in which this element is being parsed.</param>
81
public override void ParseAttribute(Intermediate intermediate, IntermediateSection section, XElement parentElement, XAttribute attribute, IDictionary<string, string> context)
82
{
85
- SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(parentElement);
83
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(parentElement);
84
WixMbaPrereqInformationTuple prereqInfo;
85
86
switch (parentElement.Name.LocalName)
@@ -102,18 +100,20 @@ namespace WixToolset.Bal
100
{
101
case "PrereqLicenseFile":
102
105
- if (!this.prereqInfoRows.TryGetValue(packageId, out prereqInfo))
103
+ if (!this.prereqInfoTuplesByPackageId.TryGetValue(packageId, out prereqInfo))
104
{
105
// at the time the extension attribute is parsed, the compiler might not yet have
106
// parsed the PrereqPackage attribute, so we need to get it directly from the parent element.
109
- XAttribute prereqPackage = parentElement.Attribute(this.Namespace + "PrereqPackage");
107
+ var prereqPackage = parentElement.Attribute(this.Namespace + "PrereqPackage");
108
109
if (null != prereqPackage && YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, prereqPackage))
110
{
113
- prereqInfo = (WixMbaPrereqInformationTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixMbaPrereqInformation");
114
- prereqInfo.PackageId = packageId;
111
+ prereqInfo = section.AddTuple(new WixMbaPrereqInformationTuple(sourceLineNumbers)
112
+ {
113
+ PackageId = packageId,
114
+ });
115
116
- this.prereqInfoRows.Add(packageId, prereqInfo);
116
+ this.prereqInfoTuplesByPackageId.Add(packageId, prereqInfo);
117
}
118
else
119
{
@@ -133,18 +133,20 @@ namespace WixToolset.Bal
133
break;
134
case "PrereqLicenseUrl":
135
136
- if (!this.prereqInfoRows.TryGetValue(packageId, out prereqInfo))
136
+ if (!this.prereqInfoTuplesByPackageId.TryGetValue(packageId, out prereqInfo))
137
{
138
// at the time the extension attribute is parsed, the compiler might not yet have
139
// parsed the PrereqPackage attribute, so we need to get it directly from the parent element.
140
- XAttribute prereqPackage = parentElement.Attribute(this.Namespace + "PrereqPackage");
140
+ var prereqPackage = parentElement.Attribute(this.Namespace + "PrereqPackage");
141
142
if (null != prereqPackage && YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, prereqPackage))
143
{
144
- prereqInfo = (WixMbaPrereqInformationTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixMbaPrereqInformation");
145
- prereqInfo.PackageId = packageId;
144
+ prereqInfo = section.AddTuple(new WixMbaPrereqInformationTuple(sourceLineNumbers)
145
+ {
146
+ PackageId = packageId,
147
+ });
148
147
- this.prereqInfoRows.Add(packageId, prereqInfo);
149
+ this.prereqInfoTuplesByPackageId.Add(packageId, prereqInfo);
150
}
151
else
152
{
@@ -165,12 +167,14 @@ namespace WixToolset.Bal
167
case "PrereqPackage":
168
if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attribute))
169
{
168
- if (!this.prereqInfoRows.TryGetValue(packageId, out prereqInfo))
170
+ if (!this.prereqInfoTuplesByPackageId.TryGetValue(packageId, out prereqInfo))
171
{
170
- prereqInfo = (WixMbaPrereqInformationTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixMbaPrereqInformation");
171
- prereqInfo.PackageId = packageId;
172
+ prereqInfo = section.AddTuple(new WixMbaPrereqInformationTuple(sourceLineNumbers)
173
+ {
174
+ PackageId = packageId,
175
+ });
176
173
- this.prereqInfoRows.Add(packageId, prereqInfo);
177
+ this.prereqInfoTuplesByPackageId.Add(packageId, prereqInfo);
178
}
179
}
180
break;
@@ -193,8 +197,10 @@ namespace WixToolset.Bal
197
case "BAFunctions":
198
if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attribute))
199
{
196
- var tuple = (WixBalBAFunctionsTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBalBAFunctions");
197
- tuple.PayloadId = payloadId;
200
+ section.AddTuple(new WixBalBAFunctionsTuple(sourceLineNumbers)
201
+ {
202
+ PayloadId = payloadId,
203
+ });
204
}
205
break;
206
default:
@@ -206,7 +212,7 @@ namespace WixToolset.Bal
212
case "Variable":
213
// at the time the extension attribute is parsed, the compiler might not yet have
214
// parsed the Name attribute, so we need to get it directly from the parent element.
209
- XAttribute variableName = parentElement.Attribute("Name");
215
+ var variableName = parentElement.Attribute("Name");
216
if (null == variableName)
217
{
218
this.Messaging.Write(ErrorMessages.ExpectedParentWithAttribute(sourceLineNumbers, "Variable", "Overridable", "Name"));
@@ -218,8 +224,10 @@ namespace WixToolset.Bal
224
case "Overridable":
225
if (YesNoType.Yes == this.ParseHelper.GetAttributeYesNoValue(sourceLineNumbers, attribute))
226
{
221
- var tuple = (WixStdbaOverridableVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixStdbaOverridableVariable");
222
- tuple.Name = variableName.Value;
227
+ section.AddTuple(new WixStdbaOverridableVariableTuple(sourceLineNumbers)
228
+ {
229
+ Name = variableName.Value,
230
+ });
231
}
232
break;
233
default:
@@ -237,11 +245,11 @@ namespace WixToolset.Bal
245
/// <param name="node">The element to parse.</param>
246
private void ParseConditionElement(Intermediate intermediate, IntermediateSection section, XElement node)
247
{
240
- SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
241
- string condition = this.ParseHelper.GetConditionInnerText(node); // condition is the inner text of the element.
248
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
249
+ var condition = this.ParseHelper.GetConditionInnerText(node); // condition is the inner text of the element.
250
string message = null;
251
244
- foreach (XAttribute attrib in node.Attributes())
252
+ foreach (var attrib in node.Attributes())
253
{
254
if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
255
{
@@ -276,14 +284,11 @@ namespace WixToolset.Bal
284
285
if (!this.Messaging.EncounteredError)
286
{
279
- var tuple = (WixBalConditionTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBalCondition");
280
- tuple.Condition = condition;
281
- tuple.Message = message;
282
-
283
- if (null == this.addedConditionLineNumber)
287
+ section.AddTuple(new WixBalConditionTuple(sourceLineNumbers)
288
{
285
- this.addedConditionLineNumber = sourceLineNumbers;
286
- }
289
+ Condition = condition,
290
+ Message = message,
291
+ });
292
}
293
}
294
@@ -293,11 +298,11 @@ namespace WixToolset.Bal
298
/// <param name="node">The element to parse.</param>
299
private void ParseWixStandardBootstrapperApplicationElement(Intermediate intermediate, IntermediateSection section, XElement node)
300
{
296
- SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
301
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
302
string launchTarget = null;
303
string launchTargetElevatedId = null;
304
string launchArguments = null;
300
- YesNoType launchHidden = YesNoType.NotSet;
305
+ var launchHidden = YesNoType.NotSet;
306
string launchWorkingDir = null;
307
string licenseFile = null;
308
string licenseUrl = null;
@@ -305,13 +310,13 @@ namespace WixToolset.Bal
310
string logoSideFile = null;
311
string themeFile = null;
312
string localizationFile = null;
308
- YesNoType suppressOptionsUI = YesNoType.NotSet;
309
- YesNoType suppressDowngradeFailure = YesNoType.NotSet;
310
- YesNoType suppressRepair = YesNoType.NotSet;
311
- YesNoType showVersion = YesNoType.NotSet;
312
- YesNoType supportCacheOnly = YesNoType.NotSet;
313
+ var suppressOptionsUI = YesNoType.NotSet;
314
+ var suppressDowngradeFailure = YesNoType.NotSet;
315
+ var suppressRepair = YesNoType.NotSet;
316
+ var showVersion = YesNoType.NotSet;
317
+ var supportCacheOnly = YesNoType.NotSet;
318
314
- foreach (XAttribute attrib in node.Attributes())
319
+ foreach (var attrib in node.Attributes())
320
{
321
if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
322
{
@@ -387,90 +392,101 @@ namespace WixToolset.Bal
392
{
393
if (!String.IsNullOrEmpty(launchTarget))
394
{
390
- var row = (WixBundleVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBundleVariable");
391
- row.Id = new Identifier(AccessModifier.Public, "LaunchTarget");
392
- row.Value = launchTarget;
393
- row.Type = "string";
395
+ section.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "LaunchTarget"))
396
+ {
397
+ Value = launchTarget,
398
+ Type = "string",
399
+ });
400
}
401
402
if (!String.IsNullOrEmpty(launchTargetElevatedId))
403
{
398
- var row = (WixBundleVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBundleVariable");
399
- row.Id = new Identifier(AccessModifier.Public, "LaunchTargetElevatedId");
400
- row.Value = launchTargetElevatedId;
401
- row.Type = "string";
404
+ section.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "LaunchTargetElevatedId"))
405
+ {
406
+ Value = launchTargetElevatedId,
407
+ Type = "string",
408
+ });
409
}
410
411
if (!String.IsNullOrEmpty(launchArguments))
412
{
406
- var row = (WixBundleVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBundleVariable");
407
- row.Id = new Identifier(AccessModifier.Public, "LaunchArguments");
408
- row.Value = launchArguments;
409
- row.Type = "string";
413
+ section.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "LaunchArguments"))
414
+ {
415
+ Value = launchArguments,
416
+ Type = "string",
417
+ });
418
}
419
420
if (YesNoType.Yes == launchHidden)
421
{
414
- var row = (WixBundleVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixBundleVariable");
415
- row.Id = new Identifier(AccessModifier.Public, "LaunchHidden");
416
- row.Value = "yes";
417
- row.Type = "string";
422
+ section.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "LaunchHidden"))
423
+ {
424
+ Value = "yes",
425
+ Type = "string",
426
+ });
427
}
428
429
430
if (!String.IsNullOrEmpty(launchWorkingDir))
431
{
423
- var row = (WixBundleVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "Variable");
424
- row.Id = new Identifier(AccessModifier.Public, "LaunchWorkingFolder");
425
- row.Value = launchWorkingDir;
426
- row.Type = "string";
432
+ section.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "LaunchWorkingFolder"))
433
+ {
434
+ Value = launchWorkingDir,
435
+ Type = "string",
436
+ });
437
}
438
439
if (!String.IsNullOrEmpty(licenseFile))
440
{
431
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
432
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaLicenseRtf");
433
- wixVariableRow.Value = licenseFile;
441
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaLicenseRtf"))
442
+ {
443
+ Value = licenseFile,
444
+ });
445
}
446
447
if (null != licenseUrl)
448
{
438
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
439
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaLicenseUrl");
440
- wixVariableRow.Value = licenseUrl;
449
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaLicenseUrl"))
450
+ {
451
+ Value = licenseUrl,
452
+ });
453
}
454
455
if (!String.IsNullOrEmpty(logoFile))
456
{
445
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
446
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaLogo");
447
- wixVariableRow.Value = logoFile;
457
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaLogo"))
458
+ {
459
+ Value = logoFile,
460
+ });
461
}
462
463
if (!String.IsNullOrEmpty(logoSideFile))
464
{
452
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
453
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaLogoSide");
454
- wixVariableRow.Value = logoSideFile;
465
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaLogoSide"))
466
+ {
467
+ Value = logoSideFile,
468
+ });
469
}
470
471
if (!String.IsNullOrEmpty(themeFile))
472
{
459
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
460
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaThemeXml");
461
- wixVariableRow.Value = themeFile;
473
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaThemeXml"))
474
+ {
475
+ Value = themeFile,
476
+ });
477
}
478
479
if (!String.IsNullOrEmpty(localizationFile))
480
{
466
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
467
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "WixStdbaThemeWxl");
468
- wixVariableRow.Value = localizationFile;
481
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "WixStdbaThemeWxl"))
482
+ {
483
+ Value = localizationFile,
484
+ });
485
}
486
487
if (YesNoType.Yes == suppressOptionsUI || YesNoType.Yes == suppressDowngradeFailure || YesNoType.Yes == suppressRepair || YesNoType.Yes == showVersion || YesNoType.Yes == supportCacheOnly)
488
{
473
- var tuple = (WixStdbaOptionsTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixStdbaOptions");
489
+ var tuple = section.AddTuple(new WixStdbaOptionsTuple(sourceLineNumbers));
490
if (YesNoType.Yes == suppressOptionsUI)
491
{
492
tuple.SuppressOptionsUI = 1;
@@ -505,12 +521,12 @@ namespace WixToolset.Bal
521
/// <param name="node">The element to parse.</param>
522
private void ParseWixManagedBootstrapperApplicationHostElement(Intermediate intermediate, IntermediateSection section, XElement node)
523
{
508
- SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
524
+ var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(node);
525
string logoFile = null;
526
string themeFile = null;
527
string localizationFile = null;
528
513
- foreach (XAttribute attrib in node.Attributes())
529
+ foreach (var attrib in node.Attributes())
530
{
531
if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
532
{
@@ -542,23 +558,26 @@ namespace WixToolset.Bal
558
{
559
if (!String.IsNullOrEmpty(logoFile))
560
{
545
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
546
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "PreqbaLogo");
547
- wixVariableRow.Value = logoFile;
561
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "PreqbaLogo"))
562
+ {
563
+ Value = logoFile,
564
+ });
565
}
566
567
if (!String.IsNullOrEmpty(themeFile))
568
{
552
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
553
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "PreqbaThemeXml");
554
- wixVariableRow.Value = themeFile;
569
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "PreqbaThemeXml"))
570
+ {
571
+ Value = themeFile,
572
+ });
573
}
574
575
if (!String.IsNullOrEmpty(localizationFile))
576
{
559
- var wixVariableRow = (WixVariableTuple)this.ParseHelper.CreateTuple(section, sourceLineNumbers, "WixVariable");
560
- wixVariableRow.Id = new Identifier(AccessModifier.Public, "PreqbaThemeWxl");
561
- wixVariableRow.Value = localizationFile;
577
+ section.AddTuple(new WixVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "PreqbaThemeWxl"))
578
+ {
579
+ Value = localizationFile,
580
+ });
581
}
582
}
583
}