aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core.WindowsInstaller
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-06-25 14:43:50 -0700
committerRob Mensching <rob@firegiant.com>2020-06-25 14:50:31 -0700
commit38afa9e7bc7eacc021f8805f607368a05751e3c3 (patch)
tree803b0a8d9a06a7d6f7c4df408437017ae21a883e /src/WixToolset.Core.WindowsInstaller
parent8968578d50858721317d410549a9f9b5c62bf1f7 (diff)
downloadwix-38afa9e7bc7eacc021f8805f607368a05751e3c3.tar.gz
wix-38afa9e7bc7eacc021f8805f607368a05751e3c3.tar.bz2
wix-38afa9e7bc7eacc021f8805f607368a05751e3c3.zip
The Great Tuple to Symbol Rename (tm)
Diffstat (limited to 'src/WixToolset.Core.WindowsInstaller')
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/AddBackSuppressedSequenceTablesCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/AddCreateFoldersCommand.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs100
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/AttachPatchTransformsCommand.cs170
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs26
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs24
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs52
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs14
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs48
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateDeltaPatchesCommand.cs8
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateInstanceTransformsCommand.cs42
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs1074
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreatePatchTransformsCommand.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs14
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs26
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/GenerateTransformCommand.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/GetFileFacadesCommand.cs14
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs12
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs12
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs344
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs50
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateFromTextFilesCommand.cs8
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs38
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/UpdateTransformsWithFileFacades.cs14
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Bind/ValidateComponentGuidsCommand.cs16
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs218
-rw-r--r--src/WixToolset.Core.WindowsInstaller/Differ.cs2
-rw-r--r--src/WixToolset.Core.WindowsInstaller/ExtensibilityServices/WindowsInstallerBackendHelper.cs20
-rw-r--r--src/WixToolset.Core.WindowsInstaller/MspBackend.cs2
32 files changed, 1209 insertions, 1209 deletions
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AddBackSuppressedSequenceTablesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AddBackSuppressedSequenceTablesCommand.cs
index d83e3684..cbba6030 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/AddBackSuppressedSequenceTablesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/AddBackSuppressedSequenceTablesCommand.cs
@@ -4,7 +4,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
4{ 4{
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using WixToolset.Data.Tuples; 7 using WixToolset.Data.Symbols;
8 using WixToolset.Data.WindowsInstaller; 8 using WixToolset.Data.WindowsInstaller;
9 9
10 /// <summary> 10 /// <summary>
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AddCreateFoldersCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AddCreateFoldersCommand.cs
index ba844da4..c4fddb3e 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/AddCreateFoldersCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/AddCreateFoldersCommand.cs
@@ -5,10 +5,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
5 using System.Collections.Generic; 5 using System.Collections.Generic;
6 using System.Linq; 6 using System.Linq;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Tuples; 8 using WixToolset.Data.Symbols;
9 9
10 /// <summary> 10 /// <summary>
11 /// Add CreateFolder tuples, if not already present, for null-keypath components. 11 /// Add CreateFolder symbols, if not already present, for null-keypath components.
12 /// </summary> 12 /// </summary>
13 internal class AddCreateFoldersCommand 13 internal class AddCreateFoldersCommand
14 { 14 {
@@ -21,15 +21,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
21 21
22 public void Execute() 22 public void Execute()
23 { 23 {
24 var createFolderTuplesByComponentRef = new HashSet<string>(this.Section.Tuples.OfType<CreateFolderTuple>().Select(t => t.ComponentRef)); 24 var createFolderSymbolsByComponentRef = new HashSet<string>(this.Section.Symbols.OfType<CreateFolderSymbol>().Select(t => t.ComponentRef));
25 foreach (var componentTuple in this.Section.Tuples.OfType<ComponentTuple>().Where(t => t.KeyPathType == ComponentKeyPathType.Directory).ToList()) 25 foreach (var componentSymbol in this.Section.Symbols.OfType<ComponentSymbol>().Where(t => t.KeyPathType == ComponentKeyPathType.Directory).ToList())
26 { 26 {
27 if (!createFolderTuplesByComponentRef.Contains(componentTuple.Id.Id)) 27 if (!createFolderSymbolsByComponentRef.Contains(componentSymbol.Id.Id))
28 { 28 {
29 this.Section.AddTuple(new CreateFolderTuple(componentTuple.SourceLineNumbers) 29 this.Section.AddSymbol(new CreateFolderSymbol(componentSymbol.SourceLineNumbers)
30 { 30 {
31 DirectoryRef = componentTuple.DirectoryRef, 31 DirectoryRef = componentSymbol.DirectoryRef,
32 ComponentRef = componentTuple.Id.Id, 32 ComponentRef = componentSymbol.Id.Id,
33 }); 33 });
34 } 34 }
35 } 35 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
index 773b3225..eccc97d2 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/AssignMediaCommand.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
13 13
14 /// <summary> 14 /// <summary>
@@ -40,7 +40,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
40 /// <summary> 40 /// <summary>
41 /// Gets cabinets with their file rows. 41 /// Gets cabinets with their file rows.
42 /// </summary> 42 /// </summary>
43 public Dictionary<MediaTuple, IEnumerable<FileFacade>> FileFacadesByCabinetMedia { get; private set; } 43 public Dictionary<MediaSymbol, IEnumerable<FileFacade>> FileFacadesByCabinetMedia { get; private set; }
44 44
45 /// <summary> 45 /// <summary>
46 /// Get uncompressed file rows. This will contain file rows of File elements that are marked with compression=no. 46 /// Get uncompressed file rows. This will contain file rows of File elements that are marked with compression=no.
@@ -50,49 +50,49 @@ namespace WixToolset.Core.WindowsInstaller.Bind
50 50
51 public void Execute() 51 public void Execute()
52 { 52 {
53 var mediaTuples = this.Section.Tuples.OfType<MediaTuple>().ToList(); 53 var mediaSymbols = this.Section.Symbols.OfType<MediaSymbol>().ToList();
54 var mediaTemplateTuples = this.Section.Tuples.OfType<WixMediaTemplateTuple>().ToList(); 54 var mediaTemplateSymbols = this.Section.Symbols.OfType<WixMediaTemplateSymbol>().ToList();
55 55
56 // If both tuples are authored, it is an error. 56 // If both symbols are authored, it is an error.
57 if (mediaTemplateTuples.Count > 0 && mediaTuples.Count > 1) 57 if (mediaTemplateSymbols.Count > 0 && mediaSymbols.Count > 1)
58 { 58 {
59 throw new WixException(ErrorMessages.MediaTableCollision(null)); 59 throw new WixException(ErrorMessages.MediaTableCollision(null));
60 } 60 }
61 61
62 // If neither tuple is authored, default to a media template. 62 // If neither symbol is authored, default to a media template.
63 if (SectionType.Product == this.Section.Type && mediaTemplateTuples.Count == 0 && mediaTuples.Count == 0) 63 if (SectionType.Product == this.Section.Type && mediaTemplateSymbols.Count == 0 && mediaSymbols.Count == 0)
64 { 64 {
65 var mediaTemplate = new WixMediaTemplateTuple() 65 var mediaTemplate = new WixMediaTemplateSymbol()
66 { 66 {
67 CabinetTemplate = "cab{0}.cab", 67 CabinetTemplate = "cab{0}.cab",
68 }; 68 };
69 69
70 this.Section.AddTuple(mediaTemplate); 70 this.Section.AddSymbol(mediaTemplate);
71 mediaTemplateTuples.Add(mediaTemplate); 71 mediaTemplateSymbols.Add(mediaTemplate);
72 } 72 }
73 73
74 // When building merge module, all the files go to "#MergeModule.CABinet". 74 // When building merge module, all the files go to "#MergeModule.CABinet".
75 if (SectionType.Module == this.Section.Type) 75 if (SectionType.Module == this.Section.Type)
76 { 76 {
77 var mergeModuleMediaTuple = this.Section.AddTuple(new MediaTuple 77 var mergeModuleMediaSymbol = this.Section.AddSymbol(new MediaSymbol
78 { 78 {
79 Cabinet = "#MergeModule.CABinet", 79 Cabinet = "#MergeModule.CABinet",
80 }); 80 });
81 81
82 this.FileFacadesByCabinetMedia = new Dictionary<MediaTuple, IEnumerable<FileFacade>> 82 this.FileFacadesByCabinetMedia = new Dictionary<MediaSymbol, IEnumerable<FileFacade>>
83 { 83 {
84 { mergeModuleMediaTuple, this.FileFacades } 84 { mergeModuleMediaSymbol, this.FileFacades }
85 }; 85 };
86 86
87 this.UncompressedFileFacades = Array.Empty<FileFacade>(); 87 this.UncompressedFileFacades = Array.Empty<FileFacade>();
88 } 88 }
89 else if (mediaTemplateTuples.Count == 0) 89 else if (mediaTemplateSymbols.Count == 0)
90 { 90 {
91 var filesByCabinetMedia = new Dictionary<MediaTuple, List<FileFacade>>(); 91 var filesByCabinetMedia = new Dictionary<MediaSymbol, List<FileFacade>>();
92 92
93 var uncompressedFiles = new List<FileFacade>(); 93 var uncompressedFiles = new List<FileFacade>();
94 94
95 this.ManuallyAssignFiles(mediaTuples, filesByCabinetMedia, uncompressedFiles); 95 this.ManuallyAssignFiles(mediaSymbols, filesByCabinetMedia, uncompressedFiles);
96 96
97 this.FileFacadesByCabinetMedia = filesByCabinetMedia.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable<FileFacade>)kvp.Value); 97 this.FileFacadesByCabinetMedia = filesByCabinetMedia.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable<FileFacade>)kvp.Value);
98 98
@@ -100,11 +100,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
100 } 100 }
101 else 101 else
102 { 102 {
103 var filesByCabinetMedia = new Dictionary<MediaTuple, List<FileFacade>>(); 103 var filesByCabinetMedia = new Dictionary<MediaSymbol, List<FileFacade>>();
104 104
105 var uncompressedFiles = new List<FileFacade>(); 105 var uncompressedFiles = new List<FileFacade>();
106 106
107 this.AutoAssignFiles(mediaTuples, filesByCabinetMedia, uncompressedFiles); 107 this.AutoAssignFiles(mediaSymbols, filesByCabinetMedia, uncompressedFiles);
108 108
109 this.FileFacadesByCabinetMedia = filesByCabinetMedia.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable<FileFacade>)kvp.Value); 109 this.FileFacadesByCabinetMedia = filesByCabinetMedia.ToDictionary(kvp => kvp.Key, kvp => (IEnumerable<FileFacade>)kvp.Value);
110 110
@@ -116,7 +116,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
116 /// Assign files to cabinets based on MediaTemplate authoring. 116 /// Assign files to cabinets based on MediaTemplate authoring.
117 /// </summary> 117 /// </summary>
118 /// <param name="fileFacades">FileRowCollection</param> 118 /// <param name="fileFacades">FileRowCollection</param>
119 private void AutoAssignFiles(List<MediaTuple> mediaTable, Dictionary<MediaTuple, List<FileFacade>> filesByCabinetMedia, List<FileFacade> uncompressedFiles) 119 private void AutoAssignFiles(List<MediaSymbol> mediaTable, Dictionary<MediaSymbol, List<FileFacade>> filesByCabinetMedia, List<FileFacade> uncompressedFiles)
120 { 120 {
121 const int MaxCabIndex = 999; 121 const int MaxCabIndex = 999;
122 122
@@ -125,15 +125,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
125 var maxPreCabSizeInMB = 0; 125 var maxPreCabSizeInMB = 0;
126 var currentCabIndex = 0; 126 var currentCabIndex = 0;
127 127
128 MediaTuple currentMediaRow = null; 128 MediaSymbol currentMediaRow = null;
129 129
130 var mediaTemplateTable = this.Section.Tuples.OfType<WixMediaTemplateTuple>(); 130 var mediaTemplateTable = this.Section.Symbols.OfType<WixMediaTemplateSymbol>();
131 131
132 // Remove all previous media tuples since they will be replaced with 132 // Remove all previous media symbols since they will be replaced with
133 // media template. 133 // media template.
134 foreach (var mediaTuple in mediaTable) 134 foreach (var mediaSymbol in mediaTable)
135 { 135 {
136 this.Section.Tuples.Remove(mediaTuple); 136 this.Section.Symbols.Remove(mediaSymbol);
137 } 137 }
138 138
139 // Auto assign files to cabinets based on maximum uncompressed media size 139 // Auto assign files to cabinets based on maximum uncompressed media size
@@ -169,7 +169,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
169 throw new WixException(ErrorMessages.MaximumUncompressedMediaSizeTooLarge(null, maxPreCabSizeInMB)); 169 throw new WixException(ErrorMessages.MaximumUncompressedMediaSizeTooLarge(null, maxPreCabSizeInMB));
170 } 170 }
171 171
172 var mediaTuplesByDiskId = new Dictionary<int, MediaTuple>(); 172 var mediaSymbolsByDiskId = new Dictionary<int, MediaSymbol>();
173 173
174 foreach (var facade in this.FileFacades) 174 foreach (var facade in this.FileFacades)
175 { 175 {
@@ -193,8 +193,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
193 // Overflow due to current file 193 // Overflow due to current file
194 if (currentPreCabSize > maxPreCabSizeInBytes) 194 if (currentPreCabSize > maxPreCabSizeInBytes)
195 { 195 {
196 currentMediaRow = this.AddMediaTuple(mediaTemplateRow, ++currentCabIndex); 196 currentMediaRow = this.AddMediaSymbol(mediaTemplateRow, ++currentCabIndex);
197 mediaTuplesByDiskId.Add(currentMediaRow.DiskId, currentMediaRow); 197 mediaSymbolsByDiskId.Add(currentMediaRow.DiskId, currentMediaRow);
198 filesByCabinetMedia.Add(currentMediaRow, new List<FileFacade>()); 198 filesByCabinetMedia.Add(currentMediaRow, new List<FileFacade>());
199 199
200 // Now files larger than MaxUncompressedMediaSize will be the only file in its cabinet so as to respect MaxUncompressedMediaSize 200 // Now files larger than MaxUncompressedMediaSize will be the only file in its cabinet so as to respect MaxUncompressedMediaSize
@@ -205,8 +205,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
205 if (currentMediaRow == null) 205 if (currentMediaRow == null)
206 { 206 {
207 // Create new cab and MediaRow 207 // Create new cab and MediaRow
208 currentMediaRow = this.AddMediaTuple(mediaTemplateRow, ++currentCabIndex); 208 currentMediaRow = this.AddMediaSymbol(mediaTemplateRow, ++currentCabIndex);
209 mediaTuplesByDiskId.Add(currentMediaRow.DiskId, currentMediaRow); 209 mediaSymbolsByDiskId.Add(currentMediaRow.DiskId, currentMediaRow);
210 filesByCabinetMedia.Add(currentMediaRow, new List<FileFacade>()); 210 filesByCabinetMedia.Add(currentMediaRow, new List<FileFacade>());
211 } 211 }
212 } 212 }
@@ -219,52 +219,52 @@ namespace WixToolset.Core.WindowsInstaller.Bind
219 } 219 }
220 220
221 // If there are uncompressed files and no MediaRow, create a default one. 221 // If there are uncompressed files and no MediaRow, create a default one.
222 if (uncompressedFiles.Count > 0 && !this.Section.Tuples.OfType<MediaTuple>().Any()) 222 if (uncompressedFiles.Count > 0 && !this.Section.Symbols.OfType<MediaSymbol>().Any())
223 { 223 {
224 var defaultMediaRow = this.Section.AddTuple(new MediaTuple(null, new Identifier(AccessModifier.Private, 1)) 224 var defaultMediaRow = this.Section.AddSymbol(new MediaSymbol(null, new Identifier(AccessModifier.Private, 1))
225 { 225 {
226 DiskId = 1, 226 DiskId = 1,
227 }); 227 });
228 228
229 mediaTuplesByDiskId.Add(1, defaultMediaRow); 229 mediaSymbolsByDiskId.Add(1, defaultMediaRow);
230 } 230 }
231 } 231 }
232 232
233 /// <summary> 233 /// <summary>
234 /// Assign files to cabinets based on Media authoring. 234 /// Assign files to cabinets based on Media authoring.
235 /// </summary> 235 /// </summary>
236 private void ManuallyAssignFiles(List<MediaTuple> mediaTuples, Dictionary<MediaTuple, List<FileFacade>> filesByCabinetMedia, List<FileFacade> uncompressedFiles) 236 private void ManuallyAssignFiles(List<MediaSymbol> mediaSymbols, Dictionary<MediaSymbol, List<FileFacade>> filesByCabinetMedia, List<FileFacade> uncompressedFiles)
237 { 237 {
238 var mediaTuplesByDiskId = new Dictionary<int, MediaTuple>(); 238 var mediaSymbolsByDiskId = new Dictionary<int, MediaSymbol>();
239 239
240 if (mediaTuples.Any()) 240 if (mediaSymbols.Any())
241 { 241 {
242 var cabinetMediaTuples = new Dictionary<string, MediaTuple>(StringComparer.OrdinalIgnoreCase); 242 var cabinetMediaSymbols = new Dictionary<string, MediaSymbol>(StringComparer.OrdinalIgnoreCase);
243 foreach (var mediaTuple in mediaTuples) 243 foreach (var mediaSymbol in mediaSymbols)
244 { 244 {
245 // If the Media row has a cabinet, make sure it is unique across all Media rows. 245 // If the Media row has a cabinet, make sure it is unique across all Media rows.
246 if (!String.IsNullOrEmpty(mediaTuple.Cabinet)) 246 if (!String.IsNullOrEmpty(mediaSymbol.Cabinet))
247 { 247 {
248 if (cabinetMediaTuples.TryGetValue(mediaTuple.Cabinet, out var existingRow)) 248 if (cabinetMediaSymbols.TryGetValue(mediaSymbol.Cabinet, out var existingRow))
249 { 249 {
250 this.Messaging.Write(ErrorMessages.DuplicateCabinetName(mediaTuple.SourceLineNumbers, mediaTuple.Cabinet)); 250 this.Messaging.Write(ErrorMessages.DuplicateCabinetName(mediaSymbol.SourceLineNumbers, mediaSymbol.Cabinet));
251 this.Messaging.Write(ErrorMessages.DuplicateCabinetName2(existingRow.SourceLineNumbers, existingRow.Cabinet)); 251 this.Messaging.Write(ErrorMessages.DuplicateCabinetName2(existingRow.SourceLineNumbers, existingRow.Cabinet));
252 } 252 }
253 else 253 else
254 { 254 {
255 cabinetMediaTuples.Add(mediaTuple.Cabinet, mediaTuple); 255 cabinetMediaSymbols.Add(mediaSymbol.Cabinet, mediaSymbol);
256 } 256 }
257 257
258 filesByCabinetMedia.Add(mediaTuple, new List<FileFacade>()); 258 filesByCabinetMedia.Add(mediaSymbol, new List<FileFacade>());
259 } 259 }
260 260
261 mediaTuplesByDiskId.Add(mediaTuple.DiskId, mediaTuple); 261 mediaSymbolsByDiskId.Add(mediaSymbol.DiskId, mediaSymbol);
262 } 262 }
263 } 263 }
264 264
265 foreach (var facade in this.FileFacades) 265 foreach (var facade in this.FileFacades)
266 { 266 {
267 if (!mediaTuplesByDiskId.TryGetValue(facade.DiskId, out var mediaTuple)) 267 if (!mediaSymbolsByDiskId.TryGetValue(facade.DiskId, out var mediaSymbol))
268 { 268 {
269 this.Messaging.Write(ErrorMessages.MissingMedia(facade.SourceLineNumber, facade.DiskId)); 269 this.Messaging.Write(ErrorMessages.MissingMedia(facade.SourceLineNumber, facade.DiskId));
270 continue; 270 continue;
@@ -280,7 +280,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
280 } 280 }
281 else // file is marked compressed. 281 else // file is marked compressed.
282 { 282 {
283 if (filesByCabinetMedia.TryGetValue(mediaTuple, out var cabinetFiles)) 283 if (filesByCabinetMedia.TryGetValue(mediaSymbol, out var cabinetFiles))
284 { 284 {
285 cabinetFiles.Add(facade); 285 cabinetFiles.Add(facade);
286 } 286 }
@@ -293,18 +293,18 @@ namespace WixToolset.Core.WindowsInstaller.Bind
293 } 293 }
294 294
295 /// <summary> 295 /// <summary>
296 /// Adds a tuple to the section with cab name template filled in. 296 /// Adds a symbol to the section with cab name template filled in.
297 /// </summary> 297 /// </summary>
298 /// <param name="mediaTable"></param> 298 /// <param name="mediaTable"></param>
299 /// <param name="cabIndex"></param> 299 /// <param name="cabIndex"></param>
300 /// <returns></returns> 300 /// <returns></returns>
301 private MediaTuple AddMediaTuple(WixMediaTemplateTuple mediaTemplateTuple, int cabIndex) 301 private MediaSymbol AddMediaSymbol(WixMediaTemplateSymbol mediaTemplateSymbol, int cabIndex)
302 { 302 {
303 return this.Section.AddTuple(new MediaTuple(mediaTemplateTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, cabIndex)) 303 return this.Section.AddSymbol(new MediaSymbol(mediaTemplateSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, cabIndex))
304 { 304 {
305 DiskId = cabIndex, 305 DiskId = cabIndex,
306 Cabinet = String.Format(CultureInfo.InvariantCulture, this.CabinetNameTemplate, cabIndex), 306 Cabinet = String.Format(CultureInfo.InvariantCulture, this.CabinetNameTemplate, cabIndex),
307 CompressionLevel = mediaTemplateTuple.CompressionLevel, 307 CompressionLevel = mediaTemplateSymbol.CompressionLevel,
308 }); 308 });
309 } 309 }
310 } 310 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/AttachPatchTransformsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/AttachPatchTransformsCommand.cs
index a16bafd7..51f1f81a 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/AttachPatchTransformsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/AttachPatchTransformsCommand.cs
@@ -9,7 +9,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
9 using System.Text.RegularExpressions; 9 using System.Text.RegularExpressions;
10 using WixToolset.Core.WindowsInstaller.Msi; 10 using WixToolset.Core.WindowsInstaller.Msi;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using WixToolset.Data.WindowsInstaller; 13 using WixToolset.Data.WindowsInstaller;
14 using WixToolset.Data.WindowsInstaller.Rows; 14 using WixToolset.Data.WindowsInstaller.Rows;
15 using WixToolset.Extensibility.Services; 15 using WixToolset.Extensibility.Services;
@@ -85,25 +85,25 @@ namespace WixToolset.Core.WindowsInstaller.Bind
85 85
86 var section = this.Intermediate.Sections.First(); 86 var section = this.Intermediate.Sections.First();
87 87
88 var tuples = this.Intermediate.Sections.SelectMany(s => s.Tuples).ToList(); 88 var symbols = this.Intermediate.Sections.SelectMany(s => s.Symbols).ToList();
89 89
90 // Get the patch id from the WixPatchId tuple. 90 // Get the patch id from the WixPatchId symbol.
91 var patchIdTuple = tuples.OfType<WixPatchIdTuple>().FirstOrDefault(); 91 var patchIdSymbol = symbols.OfType<WixPatchIdSymbol>().FirstOrDefault();
92 92
93 if (String.IsNullOrEmpty(patchIdTuple.Id?.Id)) 93 if (String.IsNullOrEmpty(patchIdSymbol.Id?.Id))
94 { 94 {
95 this.Messaging.Write(ErrorMessages.ExpectedPatchIdInWixMsp()); 95 this.Messaging.Write(ErrorMessages.ExpectedPatchIdInWixMsp());
96 return subStorages; 96 return subStorages;
97 } 97 }
98 98
99 if (String.IsNullOrEmpty(patchIdTuple.ClientPatchId)) 99 if (String.IsNullOrEmpty(patchIdSymbol.ClientPatchId))
100 { 100 {
101 this.Messaging.Write(ErrorMessages.ExpectedClientPatchIdInWixMsp()); 101 this.Messaging.Write(ErrorMessages.ExpectedClientPatchIdInWixMsp());
102 return subStorages; 102 return subStorages;
103 } 103 }
104 104
105 // enumerate patch.Media to map diskId to Media row 105 // enumerate patch.Media to map diskId to Media row
106 var patchMediaByDiskId = tuples.OfType<MediaTuple>().ToDictionary(t => t.DiskId); 106 var patchMediaByDiskId = symbols.OfType<MediaSymbol>().ToDictionary(t => t.DiskId);
107 107
108 if (patchMediaByDiskId.Count == 0) 108 if (patchMediaByDiskId.Count == 0)
109 { 109 {
@@ -112,23 +112,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
112 } 112 }
113 113
114 // populate MSP summary information 114 // populate MSP summary information
115 var patchMetadata = this.PopulateSummaryInformation(summaryInfo, tuples, patchIdTuple, section.Codepage); 115 var patchMetadata = this.PopulateSummaryInformation(summaryInfo, symbols, patchIdSymbol, section.Codepage);
116 116
117 // enumerate transforms 117 // enumerate transforms
118 var productCodes = new SortedSet<string>(); 118 var productCodes = new SortedSet<string>();
119 var transformNames = new List<string>(); 119 var transformNames = new List<string>();
120 var validTransform = new List<Tuple<string, WindowsInstallerData>>(); 120 var validTransform = new List<Tuple<string, WindowsInstallerData>>();
121 121
122 var baselineTuplesById = tuples.OfType<WixPatchBaselineTuple>().ToDictionary(t => t.Id.Id); 122 var baselineSymbolsById = symbols.OfType<WixPatchBaselineSymbol>().ToDictionary(t => t.Id.Id);
123 123
124 foreach (var mainTransform in this.Transforms) 124 foreach (var mainTransform in this.Transforms)
125 { 125 {
126 var baselineTuple = baselineTuplesById[mainTransform.Baseline]; 126 var baselineSymbol = baselineSymbolsById[mainTransform.Baseline];
127 127
128 var patchRefTuples = tuples.OfType<WixPatchRefTuple>().ToList(); 128 var patchRefSymbols = symbols.OfType<WixPatchRefSymbol>().ToList();
129 if (patchRefTuples.Count > 0) 129 if (patchRefSymbols.Count > 0)
130 { 130 {
131 if (!this.ReduceTransform(mainTransform.Transform, patchRefTuples)) 131 if (!this.ReduceTransform(mainTransform.Transform, patchRefSymbols))
132 { 132 {
133 // transform has none of the content authored into this patch 133 // transform has none of the content authored into this patch
134 continue; 134 continue;
@@ -139,7 +139,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
139 this.Validate(mainTransform); 139 this.Validate(mainTransform);
140 140
141 // ensure consistent File.Sequence within each Media 141 // ensure consistent File.Sequence within each Media
142 var mediaTuple = patchMediaByDiskId[baselineTuple.DiskId]; 142 var mediaSymbol = patchMediaByDiskId[baselineSymbol.DiskId];
143 143
144 // Ensure that files are sequenced after the last file in any transform. 144 // Ensure that files are sequenced after the last file in any transform.
145 var transformMediaTable = mainTransform.Transform.Tables["Media"]; 145 var transformMediaTable = mainTransform.Transform.Tables["Media"];
@@ -147,25 +147,25 @@ namespace WixToolset.Core.WindowsInstaller.Bind
147 { 147 {
148 foreach (MediaRow transformMediaRow in transformMediaTable.Rows) 148 foreach (MediaRow transformMediaRow in transformMediaTable.Rows)
149 { 149 {
150 if (!mediaTuple.LastSequence.HasValue || mediaTuple.LastSequence < transformMediaRow.LastSequence) 150 if (!mediaSymbol.LastSequence.HasValue || mediaSymbol.LastSequence < transformMediaRow.LastSequence)
151 { 151 {
152 // The Binder will pre-increment the sequence. 152 // The Binder will pre-increment the sequence.
153 mediaTuple.LastSequence = transformMediaRow.LastSequence; 153 mediaSymbol.LastSequence = transformMediaRow.LastSequence;
154 } 154 }
155 } 155 }
156 } 156 }
157 157
158 // Use the Media/@DiskId if greater than the last sequence for backward compatibility. 158 // Use the Media/@DiskId if greater than the last sequence for backward compatibility.
159 if (!mediaTuple.LastSequence.HasValue || mediaTuple.LastSequence < mediaTuple.DiskId) 159 if (!mediaSymbol.LastSequence.HasValue || mediaSymbol.LastSequence < mediaSymbol.DiskId)
160 { 160 {
161 mediaTuple.LastSequence = mediaTuple.DiskId; 161 mediaSymbol.LastSequence = mediaSymbol.DiskId;
162 } 162 }
163 163
164 // Ignore media table in the transform. 164 // Ignore media table in the transform.
165 mainTransform.Transform.Tables.Remove("Media"); 165 mainTransform.Transform.Tables.Remove("Media");
166 mainTransform.Transform.Tables.Remove("MsiDigitalSignature"); 166 mainTransform.Transform.Tables.Remove("MsiDigitalSignature");
167 167
168 var pairedTransform = this.BuildPairedTransform(summaryInfo, patchMetadata, patchIdTuple, mainTransform.Transform, mediaTuple, baselineTuple, out var productCode); 168 var pairedTransform = this.BuildPairedTransform(summaryInfo, patchMetadata, patchIdSymbol, mainTransform.Transform, mediaSymbol, baselineSymbol, out var productCode);
169 169
170 productCode = productCode.ToUpperInvariant(); 170 productCode = productCode.ToUpperInvariant();
171 productCodes.Add(productCode); 171 productCodes.Add(productCode);
@@ -205,17 +205,17 @@ namespace WixToolset.Core.WindowsInstaller.Bind
205 } 205 }
206 206
207 // Finish filling tables with transform-dependent data. 207 // Finish filling tables with transform-dependent data.
208 productCodes = FinalizePatchProductCodes(tuples, productCodes); 208 productCodes = FinalizePatchProductCodes(symbols, productCodes);
209 209
210 // Semicolon delimited list of the product codes that can accept the patch. 210 // Semicolon delimited list of the product codes that can accept the patch.
211 summaryInfo.Add(SummaryInformationType.PatchProductCodes, new SummaryInformationTuple(patchIdTuple.SourceLineNumbers) 211 summaryInfo.Add(SummaryInformationType.PatchProductCodes, new SummaryInformationSymbol(patchIdSymbol.SourceLineNumbers)
212 { 212 {
213 PropertyId = SummaryInformationType.PatchProductCodes, 213 PropertyId = SummaryInformationType.PatchProductCodes,
214 Value = String.Join(";", productCodes) 214 Value = String.Join(";", productCodes)
215 }); 215 });
216 216
217 // Semicolon delimited list of transform substorage names in the order they are applied. 217 // Semicolon delimited list of transform substorage names in the order they are applied.
218 summaryInfo.Add(SummaryInformationType.TransformNames, new SummaryInformationTuple(patchIdTuple.SourceLineNumbers) 218 summaryInfo.Add(SummaryInformationType.TransformNames, new SummaryInformationSymbol(patchIdSymbol.SourceLineNumbers)
219 { 219 {
220 PropertyId = SummaryInformationType.TransformNames, 220 PropertyId = SummaryInformationType.TransformNames,
221 Value = String.Join(";", transformNames) 221 Value = String.Join(";", transformNames)
@@ -224,7 +224,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
224 // Put the summary information that was extracted back in now that it is updated. 224 // Put the summary information that was extracted back in now that it is updated.
225 foreach (var readSummaryInfo in summaryInfo.Values.OrderBy(s => s.PropertyId)) 225 foreach (var readSummaryInfo in summaryInfo.Values.OrderBy(s => s.PropertyId))
226 { 226 {
227 section.AddTuple(readSummaryInfo); 227 section.AddSymbol(readSummaryInfo);
228 } 228 }
229 229
230 this.SubStorages = subStorages; 230 this.SubStorages = subStorages;
@@ -232,19 +232,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
232 return subStorages; 232 return subStorages;
233 } 233 }
234 234
235 private Dictionary<SummaryInformationType, SummaryInformationTuple> ExtractPatchSummaryInfo() 235 private Dictionary<SummaryInformationType, SummaryInformationSymbol> ExtractPatchSummaryInfo()
236 { 236 {
237 var result = new Dictionary<SummaryInformationType, SummaryInformationTuple>(); 237 var result = new Dictionary<SummaryInformationType, SummaryInformationSymbol>();
238 238
239 foreach (var section in this.Intermediate.Sections) 239 foreach (var section in this.Intermediate.Sections)
240 { 240 {
241 for (var i = section.Tuples.Count - 1; i >= 0; i--) 241 for (var i = section.Symbols.Count - 1; i >= 0; i--)
242 { 242 {
243 if (section.Tuples[i] is SummaryInformationTuple patchSummaryInfo) 243 if (section.Symbols[i] is SummaryInformationSymbol patchSummaryInfo)
244 { 244 {
245 // Remove all summary information from the tuples and remember those that 245 // Remove all summary information from the symbols and remember those that
246 // are not calculated or reserved. 246 // are not calculated or reserved.
247 section.Tuples.RemoveAt(i); 247 section.Symbols.RemoveAt(i);
248 248
249 if (patchSummaryInfo.PropertyId != SummaryInformationType.PatchProductCodes && 249 if (patchSummaryInfo.PropertyId != SummaryInformationType.PatchProductCodes &&
250 patchSummaryInfo.PropertyId != SummaryInformationType.PatchCode && 250 patchSummaryInfo.PropertyId != SummaryInformationType.PatchCode &&
@@ -262,39 +262,39 @@ namespace WixToolset.Core.WindowsInstaller.Bind
262 return result; 262 return result;
263 } 263 }
264 264
265 private Dictionary<string, MsiPatchMetadataTuple> PopulateSummaryInformation(Dictionary<SummaryInformationType, SummaryInformationTuple> summaryInfo, List<IntermediateTuple> tuples, WixPatchIdTuple patchIdTuple, int codepage) 265 private Dictionary<string, MsiPatchMetadataSymbol> PopulateSummaryInformation(Dictionary<SummaryInformationType, SummaryInformationSymbol> summaryInfo, List<IntermediateSymbol> symbols, WixPatchIdSymbol patchIdSymbol, int codepage)
266 { 266 {
267 // PID_CODEPAGE 267 // PID_CODEPAGE
268 if (!summaryInfo.ContainsKey(SummaryInformationType.Codepage)) 268 if (!summaryInfo.ContainsKey(SummaryInformationType.Codepage))
269 { 269 {
270 // Set the code page by default to the same code page for the 270 // Set the code page by default to the same code page for the
271 // string pool in the database. 271 // string pool in the database.
272 AddSummaryInformation(SummaryInformationType.Codepage, codepage.ToString(CultureInfo.InvariantCulture), patchIdTuple.SourceLineNumbers); 272 AddSummaryInformation(SummaryInformationType.Codepage, codepage.ToString(CultureInfo.InvariantCulture), patchIdSymbol.SourceLineNumbers);
273 } 273 }
274 274
275 // GUID patch code for the patch. 275 // GUID patch code for the patch.
276 AddSummaryInformation(SummaryInformationType.PatchCode, patchIdTuple.Id.Id, patchIdTuple.SourceLineNumbers); 276 AddSummaryInformation(SummaryInformationType.PatchCode, patchIdSymbol.Id.Id, patchIdSymbol.SourceLineNumbers);
277 277
278 // Indicates the minimum Windows Installer version that is required to install the patch. 278 // Indicates the minimum Windows Installer version that is required to install the patch.
279 AddSummaryInformation(SummaryInformationType.PatchInstallerRequirement, ((int)SummaryInformation.InstallerRequirement.Version31).ToString(CultureInfo.InvariantCulture), patchIdTuple.SourceLineNumbers); 279 AddSummaryInformation(SummaryInformationType.PatchInstallerRequirement, ((int)SummaryInformation.InstallerRequirement.Version31).ToString(CultureInfo.InvariantCulture), patchIdSymbol.SourceLineNumbers);
280 280
281 if (!summaryInfo.ContainsKey(SummaryInformationType.Security)) 281 if (!summaryInfo.ContainsKey(SummaryInformationType.Security))
282 { 282 {
283 AddSummaryInformation(SummaryInformationType.Security, "4", patchIdTuple.SourceLineNumbers); // Read-only enforced; 283 AddSummaryInformation(SummaryInformationType.Security, "4", patchIdSymbol.SourceLineNumbers); // Read-only enforced;
284 } 284 }
285 285
286 // Use authored comments or default to display name. 286 // Use authored comments or default to display name.
287 MsiPatchMetadataTuple commentsTuple = null; 287 MsiPatchMetadataSymbol commentsSymbol = null;
288 288
289 var metadataTuples = tuples.OfType<MsiPatchMetadataTuple>().Where(t => String.IsNullOrEmpty(t.Company)).ToDictionary(t => t.Property); 289 var metadataSymbols = symbols.OfType<MsiPatchMetadataSymbol>().Where(t => String.IsNullOrEmpty(t.Company)).ToDictionary(t => t.Property);
290 290
291 if (!summaryInfo.ContainsKey(SummaryInformationType.Title) && 291 if (!summaryInfo.ContainsKey(SummaryInformationType.Title) &&
292 metadataTuples.TryGetValue("DisplayName", out var displayName)) 292 metadataSymbols.TryGetValue("DisplayName", out var displayName))
293 { 293 {
294 AddSummaryInformation(SummaryInformationType.Title, displayName.Value, displayName.SourceLineNumbers); 294 AddSummaryInformation(SummaryInformationType.Title, displayName.Value, displayName.SourceLineNumbers);
295 295
296 // Default comments to use display name as-is. 296 // Default comments to use display name as-is.
297 commentsTuple = displayName; 297 commentsSymbol = displayName;
298 } 298 }
299 299
300 // TODO: This code below seems unnecessary given the codepage is set at the top of this method. 300 // TODO: This code below seems unnecessary given the codepage is set at the top of this method.
@@ -305,38 +305,38 @@ namespace WixToolset.Core.WindowsInstaller.Bind
305 //} 305 //}
306 306
307 if (!summaryInfo.ContainsKey(SummaryInformationType.PatchPackageName) && 307 if (!summaryInfo.ContainsKey(SummaryInformationType.PatchPackageName) &&
308 metadataTuples.TryGetValue("Description", out var description)) 308 metadataSymbols.TryGetValue("Description", out var description))
309 { 309 {
310 AddSummaryInformation(SummaryInformationType.PatchPackageName, description.Value, description.SourceLineNumbers); 310 AddSummaryInformation(SummaryInformationType.PatchPackageName, description.Value, description.SourceLineNumbers);
311 } 311 }
312 312
313 if (!summaryInfo.ContainsKey(SummaryInformationType.Author) && 313 if (!summaryInfo.ContainsKey(SummaryInformationType.Author) &&
314 metadataTuples.TryGetValue("ManufacturerName", out var manufacturer)) 314 metadataSymbols.TryGetValue("ManufacturerName", out var manufacturer))
315 { 315 {
316 AddSummaryInformation(SummaryInformationType.Author, manufacturer.Value, manufacturer.SourceLineNumbers); 316 AddSummaryInformation(SummaryInformationType.Author, manufacturer.Value, manufacturer.SourceLineNumbers);
317 } 317 }
318 318
319 // Special metadata marshalled through the build. 319 // Special metadata marshalled through the build.
320 //var wixMetadataValues = tuples.OfType<WixPatchMetadataTuple>().ToDictionary(t => t.Id.Id, t => t.Value); 320 //var wixMetadataValues = symbols.OfType<WixPatchMetadataSymbol>().ToDictionary(t => t.Id.Id, t => t.Value);
321 321
322 //if (wixMetadataValues.TryGetValue("Comments", out var wixComments)) 322 //if (wixMetadataValues.TryGetValue("Comments", out var wixComments))
323 if (metadataTuples.TryGetValue("Comments", out var wixComments)) 323 if (metadataSymbols.TryGetValue("Comments", out var wixComments))
324 { 324 {
325 commentsTuple = wixComments; 325 commentsSymbol = wixComments;
326 } 326 }
327 327
328 // Write the package comments to summary info. 328 // Write the package comments to summary info.
329 if (!summaryInfo.ContainsKey(SummaryInformationType.Comments) && 329 if (!summaryInfo.ContainsKey(SummaryInformationType.Comments) &&
330 commentsTuple != null) 330 commentsSymbol != null)
331 { 331 {
332 AddSummaryInformation(SummaryInformationType.Comments, commentsTuple.Value, commentsTuple.SourceLineNumbers); 332 AddSummaryInformation(SummaryInformationType.Comments, commentsSymbol.Value, commentsSymbol.SourceLineNumbers);
333 } 333 }
334 334
335 return metadataTuples; 335 return metadataSymbols;
336 336
337 void AddSummaryInformation(SummaryInformationType type, string value, SourceLineNumber sourceLineNumber) 337 void AddSummaryInformation(SummaryInformationType type, string value, SourceLineNumber sourceLineNumber)
338 { 338 {
339 summaryInfo.Add(type, new SummaryInformationTuple(sourceLineNumber) 339 summaryInfo.Add(type, new SummaryInformationSymbol(sourceLineNumber)
340 { 340 {
341 PropertyId = type, 341 PropertyId = type,
342 Value = value 342 Value = value
@@ -379,9 +379,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
379 /// Reduce the transform according to the patch references. 379 /// Reduce the transform according to the patch references.
380 /// </summary> 380 /// </summary>
381 /// <param name="transform">transform generated by torch.</param> 381 /// <param name="transform">transform generated by torch.</param>
382 /// <param name="patchRefTuples">Table contains patch family filter.</param> 382 /// <param name="patchRefSymbols">Table contains patch family filter.</param>
383 /// <returns>true if the transform is not empty</returns> 383 /// <returns>true if the transform is not empty</returns>
384 private bool ReduceTransform(WindowsInstallerData transform, IEnumerable<WixPatchRefTuple> patchRefTuples) 384 private bool ReduceTransform(WindowsInstallerData transform, IEnumerable<WixPatchRefSymbol> patchRefSymbols)
385 { 385 {
386 // identify sections to keep 386 // identify sections to keep
387 var oldSections = new Dictionary<string, Row>(); 387 var oldSections = new Dictionary<string, Row>();
@@ -402,10 +402,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
402 var directoryLockPermissionsIndex = new Dictionary<string, List<Row>>(); 402 var directoryLockPermissionsIndex = new Dictionary<string, List<Row>>();
403 var directoryMsiLockPermissionsExIndex = new Dictionary<string, List<Row>>(); 403 var directoryMsiLockPermissionsExIndex = new Dictionary<string, List<Row>>();
404 404
405 foreach (var patchRefTuple in patchRefTuples) 405 foreach (var patchRefSymbol in patchRefSymbols)
406 { 406 {
407 var tableName = patchRefTuple.Table; 407 var tableName = patchRefSymbol.Table;
408 var key = patchRefTuple.PrimaryKeys; 408 var key = patchRefSymbol.PrimaryKeys;
409 409
410 // Short circuit filtering if all changes should be included. 410 // Short circuit filtering if all changes should be included.
411 if ("*" == tableName && "*" == key) 411 if ("*" == tableName && "*" == key)
@@ -1090,7 +1090,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1090 /// <summary> 1090 /// <summary>
1091 /// Create the #transform for the given main transform. 1091 /// Create the #transform for the given main transform.
1092 /// </summary> 1092 /// </summary>
1093 private WindowsInstallerData BuildPairedTransform(Dictionary<SummaryInformationType, SummaryInformationTuple> summaryInfo, Dictionary<string, MsiPatchMetadataTuple> patchMetadata, WixPatchIdTuple patchIdTuple, WindowsInstallerData mainTransform, MediaTuple mediaTuple, WixPatchBaselineTuple baselineTuple, out string productCode) 1093 private WindowsInstallerData BuildPairedTransform(Dictionary<SummaryInformationType, SummaryInformationSymbol> summaryInfo, Dictionary<string, MsiPatchMetadataSymbol> patchMetadata, WixPatchIdSymbol patchIdSymbol, WindowsInstallerData mainTransform, MediaSymbol mediaSymbol, WixPatchBaselineSymbol baselineSymbol, out string productCode)
1094 { 1094 {
1095 productCode = null; 1095 productCode = null;
1096 1096
@@ -1106,11 +1106,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1106 var mainSummaryTable = mainTransform.Tables["_SummaryInformation"]; 1106 var mainSummaryTable = mainTransform.Tables["_SummaryInformation"];
1107 var mainSummaryRows = mainSummaryTable.Rows.ToDictionary(r => r.FieldAsInteger(0)); 1107 var mainSummaryRows = mainSummaryTable.Rows.ToDictionary(r => r.FieldAsInteger(0));
1108 1108
1109 var baselineValidationFlags = ((int)baselineTuple.ValidationFlags).ToString(CultureInfo.InvariantCulture); 1109 var baselineValidationFlags = ((int)baselineSymbol.ValidationFlags).ToString(CultureInfo.InvariantCulture);
1110 1110
1111 if (!mainSummaryRows.ContainsKey((int)SummaryInformationType.TransformValidationFlags)) 1111 if (!mainSummaryRows.ContainsKey((int)SummaryInformationType.TransformValidationFlags))
1112 { 1112 {
1113 var mainSummaryRow = mainSummaryTable.CreateRow(baselineTuple.SourceLineNumbers); 1113 var mainSummaryRow = mainSummaryTable.CreateRow(baselineSymbol.SourceLineNumbers);
1114 mainSummaryRow[0] = (int)SummaryInformationType.TransformValidationFlags; 1114 mainSummaryRow[0] = (int)SummaryInformationType.TransformValidationFlags;
1115 mainSummaryRow[1] = baselineValidationFlags; 1115 mainSummaryRow[1] = baselineValidationFlags;
1116 } 1116 }
@@ -1177,7 +1177,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1177 mainFileRow.CopyTo(pairedFileRow); 1177 mainFileRow.CopyTo(pairedFileRow);
1178 1178
1179 // Override authored media for patch bind. 1179 // Override authored media for patch bind.
1180 mainFileRow.DiskId = mediaTuple.DiskId; 1180 mainFileRow.DiskId = mediaSymbol.DiskId;
1181 1181
1182 // Suppress any change to File.Sequence to avoid bloat. 1182 // Suppress any change to File.Sequence to avoid bloat.
1183 mainFileRow.Fields[7].Modified = false; 1183 mainFileRow.Fields[7].Modified = false;
@@ -1200,78 +1200,78 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1200 1200
1201 // Add Media row to pairedTransform 1201 // Add Media row to pairedTransform
1202 var pairedMediaTable = pairedTransform.EnsureTable(this.tableDefinitions["Media"]); 1202 var pairedMediaTable = pairedTransform.EnsureTable(this.tableDefinitions["Media"]);
1203 var pairedMediaRow = (MediaRow)pairedMediaTable.CreateRow(mediaTuple.SourceLineNumbers); 1203 var pairedMediaRow = (MediaRow)pairedMediaTable.CreateRow(mediaSymbol.SourceLineNumbers);
1204 pairedMediaRow.Operation = RowOperation.Add; 1204 pairedMediaRow.Operation = RowOperation.Add;
1205 pairedMediaRow.DiskId = mediaTuple.DiskId; 1205 pairedMediaRow.DiskId = mediaSymbol.DiskId;
1206 pairedMediaRow.LastSequence = mediaTuple.LastSequence ?? 0; 1206 pairedMediaRow.LastSequence = mediaSymbol.LastSequence ?? 0;
1207 pairedMediaRow.DiskPrompt = mediaTuple.DiskPrompt; 1207 pairedMediaRow.DiskPrompt = mediaSymbol.DiskPrompt;
1208 pairedMediaRow.Cabinet = mediaTuple.Cabinet; 1208 pairedMediaRow.Cabinet = mediaSymbol.Cabinet;
1209 pairedMediaRow.VolumeLabel = mediaTuple.VolumeLabel; 1209 pairedMediaRow.VolumeLabel = mediaSymbol.VolumeLabel;
1210 pairedMediaRow.Source = mediaTuple.Source; 1210 pairedMediaRow.Source = mediaSymbol.Source;
1211 1211
1212 // Add PatchPackage for this Media 1212 // Add PatchPackage for this Media
1213 var pairedPackageTable = pairedTransform.EnsureTable(this.tableDefinitions["PatchPackage"]); 1213 var pairedPackageTable = pairedTransform.EnsureTable(this.tableDefinitions["PatchPackage"]);
1214 pairedPackageTable.Operation = TableOperation.Add; 1214 pairedPackageTable.Operation = TableOperation.Add;
1215 var pairedPackageRow = pairedPackageTable.CreateRow(mediaTuple.SourceLineNumbers); 1215 var pairedPackageRow = pairedPackageTable.CreateRow(mediaSymbol.SourceLineNumbers);
1216 pairedPackageRow.Operation = RowOperation.Add; 1216 pairedPackageRow.Operation = RowOperation.Add;
1217 pairedPackageRow[0] = patchIdTuple.Id.Id; 1217 pairedPackageRow[0] = patchIdSymbol.Id.Id;
1218 pairedPackageRow[1] = mediaTuple.DiskId; 1218 pairedPackageRow[1] = mediaSymbol.DiskId;
1219 1219
1220 // Add the property to the patch transform's Property table. 1220 // Add the property to the patch transform's Property table.
1221 var pairedPropertyTable = pairedTransform.EnsureTable(this.tableDefinitions["Property"]); 1221 var pairedPropertyTable = pairedTransform.EnsureTable(this.tableDefinitions["Property"]);
1222 pairedPropertyTable.Operation = TableOperation.Add; 1222 pairedPropertyTable.Operation = TableOperation.Add;
1223 1223
1224 // Add property to both identify client patches and whether those patches are removable or not 1224 // Add property to both identify client patches and whether those patches are removable or not
1225 patchMetadata.TryGetValue("AllowRemoval", out var allowRemovalTuple); 1225 patchMetadata.TryGetValue("AllowRemoval", out var allowRemovalSymbol);
1226 1226
1227 var pairedPropertyRow = pairedPropertyTable.CreateRow(allowRemovalTuple?.SourceLineNumbers); 1227 var pairedPropertyRow = pairedPropertyTable.CreateRow(allowRemovalSymbol?.SourceLineNumbers);
1228 pairedPropertyRow.Operation = RowOperation.Add; 1228 pairedPropertyRow.Operation = RowOperation.Add;
1229 pairedPropertyRow[0] = String.Concat(patchIdTuple.ClientPatchId, ".AllowRemoval"); 1229 pairedPropertyRow[0] = String.Concat(patchIdSymbol.ClientPatchId, ".AllowRemoval");
1230 pairedPropertyRow[1] = allowRemovalTuple?.Value ?? "0"; 1230 pairedPropertyRow[1] = allowRemovalSymbol?.Value ?? "0";
1231 1231
1232 // Add this patch code GUID to the patch transform to identify 1232 // Add this patch code GUID to the patch transform to identify
1233 // which patches are installed, including in multi-patch 1233 // which patches are installed, including in multi-patch
1234 // installations. 1234 // installations.
1235 pairedPropertyRow = pairedPropertyTable.CreateRow(patchIdTuple.SourceLineNumbers); 1235 pairedPropertyRow = pairedPropertyTable.CreateRow(patchIdSymbol.SourceLineNumbers);
1236 pairedPropertyRow.Operation = RowOperation.Add; 1236 pairedPropertyRow.Operation = RowOperation.Add;
1237 pairedPropertyRow[0] = String.Concat(patchIdTuple.ClientPatchId, ".PatchCode"); 1237 pairedPropertyRow[0] = String.Concat(patchIdSymbol.ClientPatchId, ".PatchCode");
1238 pairedPropertyRow[1] = patchIdTuple.Id.Id; 1238 pairedPropertyRow[1] = patchIdSymbol.Id.Id;
1239 1239
1240 // Add PATCHNEWPACKAGECODE to apply to admin layouts. 1240 // Add PATCHNEWPACKAGECODE to apply to admin layouts.
1241 pairedPropertyRow = pairedPropertyTable.CreateRow(patchIdTuple.SourceLineNumbers); 1241 pairedPropertyRow = pairedPropertyTable.CreateRow(patchIdSymbol.SourceLineNumbers);
1242 pairedPropertyRow.Operation = RowOperation.Add; 1242 pairedPropertyRow.Operation = RowOperation.Add;
1243 pairedPropertyRow[0] = "PATCHNEWPACKAGECODE"; 1243 pairedPropertyRow[0] = "PATCHNEWPACKAGECODE";
1244 pairedPropertyRow[1] = patchIdTuple.Id.Id; 1244 pairedPropertyRow[1] = patchIdSymbol.Id.Id;
1245 1245
1246 // Add PATCHNEWSUMMARYCOMMENTS and PATCHNEWSUMMARYSUBJECT to apply to admin layouts. 1246 // Add PATCHNEWSUMMARYCOMMENTS and PATCHNEWSUMMARYSUBJECT to apply to admin layouts.
1247 if (summaryInfo.TryGetValue(SummaryInformationType.Subject, out var subjectTuple)) 1247 if (summaryInfo.TryGetValue(SummaryInformationType.Subject, out var subjectSymbol))
1248 { 1248 {
1249 pairedPropertyRow = pairedPropertyTable.CreateRow(subjectTuple.SourceLineNumbers); 1249 pairedPropertyRow = pairedPropertyTable.CreateRow(subjectSymbol.SourceLineNumbers);
1250 pairedPropertyRow.Operation = RowOperation.Add; 1250 pairedPropertyRow.Operation = RowOperation.Add;
1251 pairedPropertyRow[0] = "PATCHNEWSUMMARYSUBJECT"; 1251 pairedPropertyRow[0] = "PATCHNEWSUMMARYSUBJECT";
1252 pairedPropertyRow[1] = subjectTuple.Value; 1252 pairedPropertyRow[1] = subjectSymbol.Value;
1253 } 1253 }
1254 1254
1255 if (summaryInfo.TryGetValue(SummaryInformationType.Comments, out var commentsTuple)) 1255 if (summaryInfo.TryGetValue(SummaryInformationType.Comments, out var commentsSymbol))
1256 { 1256 {
1257 pairedPropertyRow = pairedPropertyTable.CreateRow(commentsTuple.SourceLineNumbers); 1257 pairedPropertyRow = pairedPropertyTable.CreateRow(commentsSymbol.SourceLineNumbers);
1258 pairedPropertyRow.Operation = RowOperation.Add; 1258 pairedPropertyRow.Operation = RowOperation.Add;
1259 pairedPropertyRow[0] = "PATCHNEWSUMMARYCOMMENTS"; 1259 pairedPropertyRow[0] = "PATCHNEWSUMMARYCOMMENTS";
1260 pairedPropertyRow[1] = commentsTuple.Value; 1260 pairedPropertyRow[1] = commentsSymbol.Value;
1261 } 1261 }
1262 1262
1263 return pairedTransform; 1263 return pairedTransform;
1264 } 1264 }
1265 1265
1266 private static SortedSet<string> FinalizePatchProductCodes(List<IntermediateTuple> tuples, SortedSet<string> productCodes) 1266 private static SortedSet<string> FinalizePatchProductCodes(List<IntermediateSymbol> symbols, SortedSet<string> productCodes)
1267 { 1267 {
1268 var patchTargetTuples = tuples.OfType<WixPatchTargetTuple>().ToList(); 1268 var patchTargetSymbols = symbols.OfType<WixPatchTargetSymbol>().ToList();
1269 1269
1270 if (patchTargetTuples.Any()) 1270 if (patchTargetSymbols.Any())
1271 { 1271 {
1272 var targets = new SortedSet<string>(); 1272 var targets = new SortedSet<string>();
1273 var replace = true; 1273 var replace = true;
1274 foreach (var wixPatchTargetRow in patchTargetTuples) 1274 foreach (var wixPatchTargetRow in patchTargetSymbols)
1275 { 1275 {
1276 var target = wixPatchTargetRow.ProductCode.ToUpperInvariant(); 1276 var target = wixPatchTargetRow.ProductCode.ToUpperInvariant();
1277 if (target == "*") 1277 if (target == "*")
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
index ea6d49a0..950fe1c1 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Data.WindowsInstaller; 12 using WixToolset.Data.WindowsInstaller;
13 using WixToolset.Extensibility; 13 using WixToolset.Extensibility;
14 using WixToolset.Extensibility.Data; 14 using WixToolset.Extensibility.Data;
@@ -147,7 +147,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
147 // Add binder variables for all properties. 147 // Add binder variables for all properties.
148 if (SectionType.Product == section.Type || variableCache != null) 148 if (SectionType.Product == section.Type || variableCache != null)
149 { 149 {
150 foreach (var propertyRow in section.Tuples.OfType<PropertyTuple>()) 150 foreach (var propertyRow in section.Symbols.OfType<PropertySymbol>())
151 { 151 {
152 // Set the ProductCode if it is to be generated. 152 // Set the ProductCode if it is to be generated.
153 if ("ProductCode".Equals(propertyRow.Id.Id, StringComparison.Ordinal) && "*".Equals(propertyRow.Value, StringComparison.Ordinal)) 153 if ("ProductCode".Equals(propertyRow.Id.Id, StringComparison.Ordinal) && "*".Equals(propertyRow.Value, StringComparison.Ordinal))
@@ -256,13 +256,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
256 // Retrieve file information from merge modules. 256 // Retrieve file information from merge modules.
257 if (SectionType.Product == section.Type) 257 if (SectionType.Product == section.Type)
258 { 258 {
259 var wixMergeTuples = section.Tuples.OfType<WixMergeTuple>().ToList(); 259 var wixMergeSymbols = section.Symbols.OfType<WixMergeSymbol>().ToList();
260 260
261 if (wixMergeTuples.Any()) 261 if (wixMergeSymbols.Any())
262 { 262 {
263 containsMergeModules = true; 263 containsMergeModules = true;
264 264
265 var command = new ExtractMergeModuleFilesCommand(this.Messaging, wixMergeTuples, fileFacades, installerVersion, this.IntermediateFolder, this.SuppressLayout); 265 var command = new ExtractMergeModuleFilesCommand(this.Messaging, wixMergeSymbols, fileFacades, installerVersion, this.IntermediateFolder, this.SuppressLayout);
266 command.Execute(); 266 command.Execute();
267 267
268 fileFacades.AddRange(command.MergeModulesFileFacades); 268 fileFacades.AddRange(command.MergeModulesFileFacades);
@@ -294,7 +294,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
294 command.Execute(); 294 command.Execute();
295 } 295 }
296 296
297#if TODO_FINISH_UPDATE // use tuples instead of rows 297#if TODO_FINISH_UPDATE // use symbols instead of rows
298 // Extended binder extensions can be called now that fields are resolved. 298 // Extended binder extensions can be called now that fields are resolved.
299 { 299 {
300 Table updatedFiles = this.Output.EnsureTable(this.TableDefinitions["WixBindUpdatedFiles"]); 300 Table updatedFiles = this.Output.EnsureTable(this.TableDefinitions["WixBindUpdatedFiles"]);
@@ -341,20 +341,20 @@ namespace WixToolset.Core.WindowsInstaller.Bind
341 command.Execute(); 341 command.Execute();
342 } 342 }
343 343
344 // Add missing CreateFolder tuples to null-keypath components. 344 // Add missing CreateFolder symbols to null-keypath components.
345 { 345 {
346 var command = new AddCreateFoldersCommand(section); 346 var command = new AddCreateFoldersCommand(section);
347 command.Execute(); 347 command.Execute();
348 } 348 }
349 349
350 // Update tuples that reference text files on disk. 350 // Update symbols that reference text files on disk.
351 { 351 {
352 var command = new UpdateFromTextFilesCommand(this.Messaging, section); 352 var command = new UpdateFromTextFilesCommand(this.Messaging, section);
353 command.Execute(); 353 command.Execute();
354 } 354 }
355 355
356 // Assign files to media and update file sequences. 356 // Assign files to media and update file sequences.
357 Dictionary<MediaTuple, IEnumerable<FileFacade>> filesByCabinetMedia; 357 Dictionary<MediaSymbol, IEnumerable<FileFacade>> filesByCabinetMedia;
358 IEnumerable<FileFacade> uncompressedFiles; 358 IEnumerable<FileFacade> uncompressedFiles;
359 { 359 {
360 var order = new OptimizeFileFacadesOrderCommand(fileFacades); 360 var order = new OptimizeFileFacadesOrderCommand(fileFacades);
@@ -391,7 +391,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
391 if (output.Type == OutputType.Module) 391 if (output.Type == OutputType.Module)
392 { 392 {
393 // Modularize identifiers. 393 // Modularize identifiers.
394 var modularize = new ModularizeCommand(output, modularizationSuffix, section.Tuples.OfType<WixSuppressModularizationTuple>()); 394 var modularize = new ModularizeCommand(output, modularizationSuffix, section.Symbols.OfType<WixSuppressModularizationSymbol>());
395 modularize.Execute(); 395 modularize.Execute();
396 396
397 // Ensure all sequence tables in place because, mergemod.dll requires them. 397 // Ensure all sequence tables in place because, mergemod.dll requires them.
@@ -418,7 +418,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
418 418
419 if (SectionType.Patch == section.Type && this.DeltaBinaryPatch) 419 if (SectionType.Patch == section.Type && this.DeltaBinaryPatch)
420 { 420 {
421 var command = new CreateDeltaPatchesCommand(fileFacades, this.IntermediateFolder, section.Tuples.OfType<WixPatchIdTuple>().FirstOrDefault()); 421 var command = new CreateDeltaPatchesCommand(fileFacades, this.IntermediateFolder, section.Symbols.OfType<WixPatchIdSymbol>().FirstOrDefault());
422 command.Execute(); 422 command.Execute();
423 } 423 }
424 424
@@ -428,7 +428,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
428 { 428 {
429 this.Messaging.Write(VerboseMessages.CreatingCabinetFiles()); 429 this.Messaging.Write(VerboseMessages.CreatingCabinetFiles());
430 430
431 var mediaTemplate = section.Tuples.OfType<WixMediaTemplateTuple>().FirstOrDefault(); 431 var mediaTemplate = section.Symbols.OfType<WixMediaTemplateSymbol>().FirstOrDefault();
432 432
433 var command = new CreateCabinetsCommand(this.ServiceProvider, this.BackendHelper, mediaTemplate); 433 var command = new CreateCabinetsCommand(this.ServiceProvider, this.BackendHelper, mediaTemplate);
434 command.CabbingThreadCount = this.CabbingThreadCount; 434 command.CabbingThreadCount = this.CabbingThreadCount;
@@ -578,7 +578,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
578 return wixout; 578 return wixout;
579 } 579 }
580 580
581 private string ResolveMedia(MediaTuple media, string mediaLayoutDirectory, string layoutDirectory) 581 private string ResolveMedia(MediaSymbol media, string mediaLayoutDirectory, string layoutDirectory)
582 { 582 {
583 string layout = null; 583 string layout = null;
584 584
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
index d5806fee..82688edf 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindSummaryInfoCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.Globalization; 6 using System.Globalization;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 10
11 /// <summary> 11 /// <summary>
12 /// Binds the summary information table of a database. 12 /// Binds the summary information table of a database.
@@ -49,13 +49,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
49 var foundCreatingApplication = false; 49 var foundCreatingApplication = false;
50 var now = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture); 50 var now = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);
51 51
52 foreach (var summaryInformationTuple in this.Section.Tuples.OfType<SummaryInformationTuple>()) 52 foreach (var summaryInformationSymbol in this.Section.Symbols.OfType<SummaryInformationSymbol>())
53 { 53 {
54 switch (summaryInformationTuple.PropertyId) 54 switch (summaryInformationSymbol.PropertyId)
55 { 55 {
56 case SummaryInformationType.Codepage: // PID_CODEPAGE 56 case SummaryInformationType.Codepage: // PID_CODEPAGE
57 // make sure the code page is an int and not a web name or null 57 // make sure the code page is an int and not a web name or null
58 var codepage = summaryInformationTuple.Value; 58 var codepage = summaryInformationSymbol.Value;
59 59
60 if (String.IsNullOrEmpty(codepage)) 60 if (String.IsNullOrEmpty(codepage))
61 { 61 {
@@ -63,11 +63,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
63 } 63 }
64 else 64 else
65 { 65 {
66 summaryInformationTuple.Value = Common.GetValidCodePage(codepage, false, false, summaryInformationTuple.SourceLineNumbers).ToString(CultureInfo.InvariantCulture); 66 summaryInformationSymbol.Value = Common.GetValidCodePage(codepage, false, false, summaryInformationSymbol.SourceLineNumbers).ToString(CultureInfo.InvariantCulture);
67 } 67 }
68 break; 68 break;
69 case SummaryInformationType.PackageCode: // PID_REVNUMBER 69 case SummaryInformationType.PackageCode: // PID_REVNUMBER
70 var packageCode = summaryInformationTuple.Value; 70 var packageCode = summaryInformationSymbol.Value;
71 71
72 if (SectionType.Module == this.Section.Type) 72 if (SectionType.Module == this.Section.Type)
73 { 73 {
@@ -76,7 +76,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
76 else if ("*" == packageCode) 76 else if ("*" == packageCode)
77 { 77 {
78 // set the revision number (package/patch code) if it should be automatically generated 78 // set the revision number (package/patch code) if it should be automatically generated
79 summaryInformationTuple.Value = Common.GenerateGuid(); 79 summaryInformationSymbol.Value = Common.GenerateGuid();
80 } 80 }
81 break; 81 break;
82 case SummaryInformationType.Created: 82 case SummaryInformationType.Created:
@@ -86,7 +86,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
86 foundLastSaveDataTime = true; 86 foundLastSaveDataTime = true;
87 break; 87 break;
88 case SummaryInformationType.WindowsInstallerVersion: 88 case SummaryInformationType.WindowsInstallerVersion:
89 this.InstallerVersion = summaryInformationTuple[SummaryInformationTupleFields.Value].AsNumber(); 89 this.InstallerVersion = summaryInformationSymbol[SummaryInformationSymbolFields.Value].AsNumber();
90 break; 90 break;
91 case SummaryInformationType.WordCount: 91 case SummaryInformationType.WordCount:
92 if (SectionType.Patch == this.Section.Type) 92 if (SectionType.Patch == this.Section.Type)
@@ -96,7 +96,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
96 } 96 }
97 else 97 else
98 { 98 {
99 var attributes = summaryInformationTuple[SummaryInformationTupleFields.Value].AsNumber(); 99 var attributes = summaryInformationSymbol[SummaryInformationSymbolFields.Value].AsNumber();
100 this.LongNames = (0 == (attributes & 1)); 100 this.LongNames = (0 == (attributes & 1));
101 this.Compressed = (2 == (attributes & 2)); 101 this.Compressed = (2 == (attributes & 2));
102 } 102 }
@@ -110,7 +110,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
110 // add a summary information row for the create time/date property if its not already set 110 // add a summary information row for the create time/date property if its not already set
111 if (!foundCreateDataTime) 111 if (!foundCreateDataTime)
112 { 112 {
113 this.Section.AddTuple(new SummaryInformationTuple(null) 113 this.Section.AddSymbol(new SummaryInformationSymbol(null)
114 { 114 {
115 PropertyId = SummaryInformationType.Created, 115 PropertyId = SummaryInformationType.Created,
116 Value = now, 116 Value = now,
@@ -120,7 +120,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
120 // add a summary information row for the last save time/date property if its not already set 120 // add a summary information row for the last save time/date property if its not already set
121 if (!foundLastSaveDataTime) 121 if (!foundLastSaveDataTime)
122 { 122 {
123 this.Section.AddTuple(new SummaryInformationTuple(null) 123 this.Section.AddSymbol(new SummaryInformationSymbol(null)
124 { 124 {
125 PropertyId = SummaryInformationType.LastSaved, 125 PropertyId = SummaryInformationType.LastSaved,
126 Value = now, 126 Value = now,
@@ -130,7 +130,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
130 // add a summary information row for the creating application property if its not already set 130 // add a summary information row for the creating application property if its not already set
131 if (!foundCreatingApplication) 131 if (!foundCreatingApplication)
132 { 132 {
133 this.Section.AddTuple(new SummaryInformationTuple(null) 133 this.Section.AddSymbol(new SummaryInformationSymbol(null)
134 { 134 {
135 PropertyId = SummaryInformationType.CreatingApplication, 135 PropertyId = SummaryInformationType.CreatingApplication,
136 Value = String.Format(CultureInfo.InvariantCulture, AppCommon.GetCreatingApplicationString()), 136 Value = String.Format(CultureInfo.InvariantCulture, AppCommon.GetCreatingApplicationString()),
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
index ac98c82d..bc5c6853 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.IO; 7 using System.IO;
8 using WixToolset.Core.WindowsInstaller.Msi; 8 using WixToolset.Core.WindowsInstaller.Msi;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
13 13
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
index 8135ae2e..a1e3ac83 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CalculateComponentGuids.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.IO; 7 using System.IO;
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Extensibility.Data; 11 using WixToolset.Extensibility.Data;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
13 13
@@ -34,38 +34,38 @@ namespace WixToolset.Core.WindowsInstaller.Bind
34 34
35 public void Execute() 35 public void Execute()
36 { 36 {
37 Dictionary<string, RegistryTuple> registryKeyRows = null; 37 Dictionary<string, RegistrySymbol> registryKeyRows = null;
38 Dictionary<string, IResolvedDirectory> targetPathsByDirectoryId = null; 38 Dictionary<string, IResolvedDirectory> targetPathsByDirectoryId = null;
39 Dictionary<string, string> componentIdGenSeeds = null; 39 Dictionary<string, string> componentIdGenSeeds = null;
40 Dictionary<string, List<FileTuple>> filesByComponentId = null; 40 Dictionary<string, List<FileSymbol>> filesByComponentId = null;
41 41
42 // Find components with generatable guids. 42 // Find components with generatable guids.
43 foreach (var componentTuple in this.Section.Tuples.OfType<ComponentTuple>()) 43 foreach (var componentSymbol in this.Section.Symbols.OfType<ComponentSymbol>())
44 { 44 {
45 // Skip components that do not specify generate guid. 45 // Skip components that do not specify generate guid.
46 if (componentTuple.ComponentId != "*") 46 if (componentSymbol.ComponentId != "*")
47 { 47 {
48 continue; 48 continue;
49 } 49 }
50 50
51 if (String.IsNullOrEmpty(componentTuple.KeyPath) || ComponentKeyPathType.OdbcDataSource == componentTuple.KeyPathType) 51 if (String.IsNullOrEmpty(componentSymbol.KeyPath) || ComponentKeyPathType.OdbcDataSource == componentSymbol.KeyPathType)
52 { 52 {
53 this.Messaging.Write(ErrorMessages.IllegalComponentWithAutoGeneratedGuid(componentTuple.SourceLineNumbers)); 53 this.Messaging.Write(ErrorMessages.IllegalComponentWithAutoGeneratedGuid(componentSymbol.SourceLineNumbers));
54 continue; 54 continue;
55 } 55 }
56 56
57 if (ComponentKeyPathType.Registry == componentTuple.KeyPathType) 57 if (ComponentKeyPathType.Registry == componentSymbol.KeyPathType)
58 { 58 {
59 if (registryKeyRows is null) 59 if (registryKeyRows is null)
60 { 60 {
61 registryKeyRows = this.Section.Tuples.OfType<RegistryTuple>().ToDictionary(t => t.Id.Id); 61 registryKeyRows = this.Section.Symbols.OfType<RegistrySymbol>().ToDictionary(t => t.Id.Id);
62 } 62 }
63 63
64 if (registryKeyRows.TryGetValue(componentTuple.KeyPath, out var foundRow)) 64 if (registryKeyRows.TryGetValue(componentSymbol.KeyPath, out var foundRow))
65 { 65 {
66 var bitness = componentTuple.Win64 ? "64" : String.Empty; 66 var bitness = componentSymbol.Win64 ? "64" : String.Empty;
67 var regkey = String.Concat(bitness, foundRow.AsString(1), "\\", foundRow.AsString(2), "\\", foundRow.AsString(3)); 67 var regkey = String.Concat(bitness, foundRow.AsString(1), "\\", foundRow.AsString(2), "\\", foundRow.AsString(3));
68 componentTuple.ComponentId = this.BackendHelper.CreateGuid(BindDatabaseCommand.WixComponentGuidNamespace, regkey.ToLowerInvariant()); 68 componentSymbol.ComponentId = this.BackendHelper.CreateGuid(BindDatabaseCommand.WixComponentGuidNamespace, regkey.ToLowerInvariant());
69 } 69 }
70 } 70 }
71 else // must be a File KeyPath. 71 else // must be a File KeyPath.
@@ -74,7 +74,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
74 // of directory ids to target names do that now. 74 // of directory ids to target names do that now.
75 if (targetPathsByDirectoryId is null) 75 if (targetPathsByDirectoryId is null)
76 { 76 {
77 var directories = this.Section.Tuples.OfType<DirectoryTuple>().ToList(); 77 var directories = this.Section.Symbols.OfType<DirectorySymbol>().ToList();
78 78
79 targetPathsByDirectoryId = new Dictionary<string, IResolvedDirectory>(directories.Count); 79 targetPathsByDirectoryId = new Dictionary<string, IResolvedDirectory>(directories.Count);
80 80
@@ -95,12 +95,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
95 } 95 }
96 96
97 // If the component id generation seeds have not been indexed 97 // If the component id generation seeds have not been indexed
98 // from the Directory tuples do that now. 98 // from the Directory symbols do that now.
99 if (componentIdGenSeeds is null) 99 if (componentIdGenSeeds is null)
100 { 100 {
101 // If there are any Directory tuples, build up the Component Guid 101 // If there are any Directory symbols, build up the Component Guid
102 // generation seeds indexed by Directory/@Id. 102 // generation seeds indexed by Directory/@Id.
103 componentIdGenSeeds = this.Section.Tuples.OfType<DirectoryTuple>() 103 componentIdGenSeeds = this.Section.Symbols.OfType<DirectorySymbol>()
104 .Where(t => !String.IsNullOrEmpty(t.ComponentGuidGenerationSeed)) 104 .Where(t => !String.IsNullOrEmpty(t.ComponentGuidGenerationSeed))
105 .ToDictionary(t => t.Id.Id, t => t.ComponentGuidGenerationSeed); 105 .ToDictionary(t => t.Id.Id, t => t.ComponentGuidGenerationSeed);
106 } 106 }
@@ -109,15 +109,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
109 // then do that now 109 // then do that now
110 if (filesByComponentId is null) 110 if (filesByComponentId is null)
111 { 111 {
112 var files = this.Section.Tuples.OfType<FileTuple>().ToList(); 112 var files = this.Section.Symbols.OfType<FileSymbol>().ToList();
113 113
114 filesByComponentId = new Dictionary<string, List<FileTuple>>(files.Count); 114 filesByComponentId = new Dictionary<string, List<FileSymbol>>(files.Count);
115 115
116 foreach (var file in files) 116 foreach (var file in files)
117 { 117 {
118 if (!filesByComponentId.TryGetValue(file.ComponentRef, out var componentFiles)) 118 if (!filesByComponentId.TryGetValue(file.ComponentRef, out var componentFiles))
119 { 119 {
120 componentFiles = new List<FileTuple>(); 120 componentFiles = new List<FileSymbol>();
121 filesByComponentId.Add(file.ComponentRef, componentFiles); 121 filesByComponentId.Add(file.ComponentRef, componentFiles);
122 } 122 }
123 123
@@ -126,16 +126,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
126 } 126 }
127 127
128 // validate component meets all the conditions to have a generated guid 128 // validate component meets all the conditions to have a generated guid
129 var currentComponentFiles = filesByComponentId[componentTuple.Id.Id]; 129 var currentComponentFiles = filesByComponentId[componentSymbol.Id.Id];
130 var numFilesInComponent = currentComponentFiles.Count; 130 var numFilesInComponent = currentComponentFiles.Count;
131 string path = null; 131 string path = null;
132 132
133 foreach (var fileRow in currentComponentFiles) 133 foreach (var fileRow in currentComponentFiles)
134 { 134 {
135 if (fileRow.Id.Id == componentTuple.KeyPath) 135 if (fileRow.Id.Id == componentSymbol.KeyPath)
136 { 136 {
137 // calculate the key file's canonical target path 137 // calculate the key file's canonical target path
138 string directoryPath = this.PathResolver.GetDirectoryPath(targetPathsByDirectoryId, componentIdGenSeeds, componentTuple.DirectoryRef, true); 138 string directoryPath = this.PathResolver.GetDirectoryPath(targetPathsByDirectoryId, componentIdGenSeeds, componentSymbol.DirectoryRef, true);
139 string fileName = Common.GetName(fileRow.Name, false, true).ToLowerInvariant(); 139 string fileName = Common.GetName(fileRow.Name, false, true).ToLowerInvariant();
140 path = Path.Combine(directoryPath, fileName); 140 path = Path.Combine(directoryPath, fileName);
141 141
@@ -147,13 +147,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
147 path.StartsWith(@"StartMenuFolder\programs", StringComparison.Ordinal) || 147 path.StartsWith(@"StartMenuFolder\programs", StringComparison.Ordinal) ||
148 path.StartsWith(@"WindowsFolder\fonts", StringComparison.Ordinal)) 148 path.StartsWith(@"WindowsFolder\fonts", StringComparison.Ordinal))
149 { 149 {
150 this.Messaging.Write(ErrorMessages.IllegalPathForGeneratedComponentGuid(componentTuple.SourceLineNumbers, fileRow.ComponentRef, path)); 150 this.Messaging.Write(ErrorMessages.IllegalPathForGeneratedComponentGuid(componentSymbol.SourceLineNumbers, fileRow.ComponentRef, path));
151 } 151 }
152 152
153 // if component has more than one file, the key path must be versioned 153 // if component has more than one file, the key path must be versioned
154 if (1 < numFilesInComponent && String.IsNullOrEmpty(fileRow.Version)) 154 if (1 < numFilesInComponent && String.IsNullOrEmpty(fileRow.Version))
155 { 155 {
156 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentUnversionedKeypath(componentTuple.SourceLineNumbers)); 156 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentUnversionedKeypath(componentSymbol.SourceLineNumbers));
157 } 157 }
158 } 158 }
159 else 159 else
@@ -161,7 +161,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
161 // not a key path, so it must be an unversioned file if component has more than one file 161 // not a key path, so it must be an unversioned file if component has more than one file
162 if (1 < numFilesInComponent && !String.IsNullOrEmpty(fileRow.Version)) 162 if (1 < numFilesInComponent && !String.IsNullOrEmpty(fileRow.Version))
163 { 163 {
164 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentVersionedNonkeypath(componentTuple.SourceLineNumbers)); 164 this.Messaging.Write(ErrorMessages.IllegalGeneratedGuidComponentVersionedNonkeypath(componentSymbol.SourceLineNumbers));
165 } 165 }
166 } 166 }
167 } 167 }
@@ -169,7 +169,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
169 // if the rules were followed, reward with a generated guid 169 // if the rules were followed, reward with a generated guid
170 if (!this.Messaging.EncounteredError) 170 if (!this.Messaging.EncounteredError)
171 { 171 {
172 componentTuple.ComponentId = this.BackendHelper.CreateGuid(BindDatabaseCommand.WixComponentGuidNamespace, path); 172 componentSymbol.ComponentId = this.BackendHelper.CreateGuid(BindDatabaseCommand.WixComponentGuidNamespace, path);
173 } 173 }
174 } 174 }
175 } 175 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
index 0dcce61b..8a85a975 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
11 using System.Linq; 11 using System.Linq;
12 using WixToolset.Core.Bind; 12 using WixToolset.Core.Bind;
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Symbols;
15 using WixToolset.Data.WindowsInstaller; 15 using WixToolset.Data.WindowsInstaller;
16 using WixToolset.Data.WindowsInstaller.Rows; 16 using WixToolset.Data.WindowsInstaller.Rows;
17 using WixToolset.Extensibility; 17 using WixToolset.Extensibility;
@@ -463,9 +463,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
463 ref duplicateFilesSequence); 463 ref duplicateFilesSequence);
464 if (!hasPatchFilesAction) 464 if (!hasPatchFilesAction)
465 { 465 {
466 WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionTuple); 466 WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionSymbol);
467 467
468 var sequence = patchFilesActionTuple.Sequence; 468 var sequence = patchFilesActionSymbol.Sequence;
469 469
470 // Test for default sequence value's appropriateness 470 // Test for default sequence value's appropriateness
471 if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence)) 471 if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence))
@@ -474,14 +474,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
474 { 474 {
475 if (duplicateFilesSequence < installFilesSequence) 475 if (duplicateFilesSequence < installFilesSequence)
476 { 476 {
477 throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionTuple.Action)); 477 throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
478 } 478 }
479 else 479 else
480 { 480 {
481 sequence = (duplicateFilesSequence + installFilesSequence) / 2; 481 sequence = (duplicateFilesSequence + installFilesSequence) / 2;
482 if (installFilesSequence == sequence || duplicateFilesSequence == sequence) 482 if (installFilesSequence == sequence || duplicateFilesSequence == sequence)
483 { 483 {
484 throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionTuple.Action)); 484 throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
485 } 485 }
486 } 486 }
487 } 487 }
@@ -498,8 +498,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
498 } 498 }
499 499
500 var patchAction = sequenceTable.CreateRow(null); 500 var patchAction = sequenceTable.CreateRow(null);
501 patchAction[0] = patchFilesActionTuple.Action; 501 patchAction[0] = patchFilesActionSymbol.Action;
502 patchAction[1] = patchFilesActionTuple.Condition; 502 patchAction[1] = patchFilesActionSymbol.Condition;
503 patchAction[2] = sequence; 503 patchAction[2] = sequence;
504 patchAction.Operation = RowOperation.Add; 504 patchAction.Operation = RowOperation.Add;
505 } 505 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
index 9741fcd9..5c296f74 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using System.Runtime.InteropServices; 10 using System.Runtime.InteropServices;
11 using WixToolset.Core.Bind; 11 using WixToolset.Core.Bind;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Extensibility; 15 using WixToolset.Extensibility;
16 using WixToolset.Extensibility.Data; 16 using WixToolset.Extensibility.Data;
@@ -32,7 +32,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
32 32
33 private Dictionary<string, string> lastCabinetAddedToMediaTable; // Key is First Cabinet Name, Value is Last Cabinet Added in the Split Sequence 33 private Dictionary<string, string> lastCabinetAddedToMediaTable; // Key is First Cabinet Name, Value is Last Cabinet Added in the Split Sequence
34 34
35 public CreateCabinetsCommand(IWixToolsetServiceProvider serviceProvider, IBackendHelper backendHelper, WixMediaTemplateTuple mediaTemplate) 35 public CreateCabinetsCommand(IWixToolsetServiceProvider serviceProvider, IBackendHelper backendHelper, WixMediaTemplateSymbol mediaTemplate)
36 { 36 {
37 this.fileTransfers = new List<IFileTransfer>(); 37 this.fileTransfers = new List<IFileTransfer>();
38 38
@@ -51,7 +51,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
51 51
52 private IBackendHelper BackendHelper { get; } 52 private IBackendHelper BackendHelper { get; }
53 53
54 private WixMediaTemplateTuple MediaTemplate { get; } 54 private WixMediaTemplateSymbol MediaTemplate { get; }
55 55
56 /// <summary> 56 /// <summary>
57 /// Sets the number of threads to use for cabinet creation. 57 /// Sets the number of threads to use for cabinet creation.
@@ -80,9 +80,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
80 80
81 public string ModularizationSuffix { private get; set; } 81 public string ModularizationSuffix { private get; set; }
82 82
83 public Dictionary<MediaTuple, IEnumerable<FileFacade>> FileFacadesByCabinet { private get; set; } 83 public Dictionary<MediaSymbol, IEnumerable<FileFacade>> FileFacadesByCabinet { private get; set; }
84 84
85 public Func<MediaTuple, string, string, string> ResolveMedia { private get; set; } 85 public Func<MediaSymbol, string, string, string> ResolveMedia { private get; set; }
86 86
87 public TableDefinitionCollection TableDefinitions { private get; set; } 87 public TableDefinitionCollection TableDefinitions { private get; set; }
88 88
@@ -113,12 +113,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
113 113
114 foreach (var entry in this.FileFacadesByCabinet) 114 foreach (var entry in this.FileFacadesByCabinet)
115 { 115 {
116 var mediaTuple = entry.Key; 116 var mediaSymbol = entry.Key;
117 var files = entry.Value; 117 var files = entry.Value;
118 var compressionLevel = mediaTuple.CompressionLevel ?? this.DefaultCompressionLevel ?? CompressionLevel.Medium; 118 var compressionLevel = mediaSymbol.CompressionLevel ?? this.DefaultCompressionLevel ?? CompressionLevel.Medium;
119 var cabinetDir = this.ResolveMedia(mediaTuple, mediaTuple.Layout, this.LayoutDirectory); 119 var cabinetDir = this.ResolveMedia(mediaSymbol, mediaSymbol.Layout, this.LayoutDirectory);
120 120
121 var cabinetWorkItem = this.CreateCabinetWorkItem(this.Output, cabinetDir, mediaTuple, compressionLevel, files); 121 var cabinetWorkItem = this.CreateCabinetWorkItem(this.Output, cabinetDir, mediaSymbol, compressionLevel, files);
122 if (null != cabinetWorkItem) 122 if (null != cabinetWorkItem)
123 { 123 {
124 cabinetBuilder.Enqueue(cabinetWorkItem); 124 cabinetBuilder.Enqueue(cabinetWorkItem);
@@ -176,28 +176,28 @@ namespace WixToolset.Core.WindowsInstaller.Bind
176 /// </summary> 176 /// </summary>
177 /// <param name="output">Output for the current database.</param> 177 /// <param name="output">Output for the current database.</param>
178 /// <param name="cabinetDir">Directory to create cabinet in.</param> 178 /// <param name="cabinetDir">Directory to create cabinet in.</param>
179 /// <param name="mediaTuple">Media tuple containing information about the cabinet.</param> 179 /// <param name="mediaSymbol">Media symbol containing information about the cabinet.</param>
180 /// <param name="fileFacades">Collection of files in this cabinet.</param> 180 /// <param name="fileFacades">Collection of files in this cabinet.</param>
181 /// <returns>created CabinetWorkItem object</returns> 181 /// <returns>created CabinetWorkItem object</returns>
182 private CabinetWorkItem CreateCabinetWorkItem(WindowsInstallerData output, string cabinetDir, MediaTuple mediaTuple, CompressionLevel compressionLevel, IEnumerable<FileFacade> fileFacades) 182 private CabinetWorkItem CreateCabinetWorkItem(WindowsInstallerData output, string cabinetDir, MediaSymbol mediaSymbol, CompressionLevel compressionLevel, IEnumerable<FileFacade> fileFacades)
183 { 183 {
184 CabinetWorkItem cabinetWorkItem = null; 184 CabinetWorkItem cabinetWorkItem = null;
185 var tempCabinetFileX = Path.Combine(this.IntermediateFolder, mediaTuple.Cabinet); 185 var tempCabinetFileX = Path.Combine(this.IntermediateFolder, mediaSymbol.Cabinet);
186 186
187 // check for an empty cabinet 187 // check for an empty cabinet
188 if (!fileFacades.Any()) 188 if (!fileFacades.Any())
189 { 189 {
190 // Remove the leading '#' from the embedded cabinet name to make the warning easier to understand 190 // Remove the leading '#' from the embedded cabinet name to make the warning easier to understand
191 var cabinetName = mediaTuple.Cabinet.TrimStart('#'); 191 var cabinetName = mediaSymbol.Cabinet.TrimStart('#');
192 192
193 // If building a patch, remind them to run -p for torch. 193 // If building a patch, remind them to run -p for torch.
194 if (OutputType.Patch == output.Type) 194 if (OutputType.Patch == output.Type)
195 { 195 {
196 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaTuple.SourceLineNumbers, cabinetName, true)); 196 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaSymbol.SourceLineNumbers, cabinetName, true));
197 } 197 }
198 else 198 else
199 { 199 {
200 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaTuple.SourceLineNumbers, cabinetName)); 200 this.Messaging.Write(WarningMessages.EmptyCabinet(mediaSymbol.SourceLineNumbers, cabinetName));
201 } 201 }
202 } 202 }
203 203
@@ -213,7 +213,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
213 } 213 }
214 else // reuse the cabinet from the cabinet cache. 214 else // reuse the cabinet from the cabinet cache.
215 { 215 {
216 this.Messaging.Write(VerboseMessages.ReusingCabCache(mediaTuple.SourceLineNumbers, mediaTuple.Cabinet, resolvedCabinet.Path)); 216 this.Messaging.Write(VerboseMessages.ReusingCabCache(mediaSymbol.SourceLineNumbers, mediaSymbol.Cabinet, resolvedCabinet.Path));
217 217
218 try 218 try
219 { 219 {
@@ -227,27 +227,27 @@ namespace WixToolset.Core.WindowsInstaller.Bind
227 } 227 }
228 catch (Exception e) 228 catch (Exception e)
229 { 229 {
230 this.Messaging.Write(WarningMessages.CannotUpdateCabCache(mediaTuple.SourceLineNumbers, resolvedCabinet.Path, e.Message)); 230 this.Messaging.Write(WarningMessages.CannotUpdateCabCache(mediaSymbol.SourceLineNumbers, resolvedCabinet.Path, e.Message));
231 } 231 }
232 } 232 }
233 233
234 var trackResolvedCabinet = this.BackendHelper.TrackFile(resolvedCabinet.Path, TrackedFileType.Intermediate, mediaTuple.SourceLineNumbers); 234 var trackResolvedCabinet = this.BackendHelper.TrackFile(resolvedCabinet.Path, TrackedFileType.Intermediate, mediaSymbol.SourceLineNumbers);
235 this.trackedFiles.Add(trackResolvedCabinet); 235 this.trackedFiles.Add(trackResolvedCabinet);
236 236
237 if (mediaTuple.Cabinet.StartsWith("#", StringComparison.Ordinal)) 237 if (mediaSymbol.Cabinet.StartsWith("#", StringComparison.Ordinal))
238 { 238 {
239 var streamsTable = output.EnsureTable(this.TableDefinitions["_Streams"]); 239 var streamsTable = output.EnsureTable(this.TableDefinitions["_Streams"]);
240 240
241 var streamRow = streamsTable.CreateRow(mediaTuple.SourceLineNumbers); 241 var streamRow = streamsTable.CreateRow(mediaSymbol.SourceLineNumbers);
242 streamRow[0] = mediaTuple.Cabinet.Substring(1); 242 streamRow[0] = mediaSymbol.Cabinet.Substring(1);
243 streamRow[1] = resolvedCabinet.Path; 243 streamRow[1] = resolvedCabinet.Path;
244 } 244 }
245 else 245 else
246 { 246 {
247 var trackDestination = this.BackendHelper.TrackFile(Path.Combine(cabinetDir, mediaTuple.Cabinet), TrackedFileType.Final, mediaTuple.SourceLineNumbers); 247 var trackDestination = this.BackendHelper.TrackFile(Path.Combine(cabinetDir, mediaSymbol.Cabinet), TrackedFileType.Final, mediaSymbol.SourceLineNumbers);
248 this.trackedFiles.Add(trackDestination); 248 this.trackedFiles.Add(trackDestination);
249 249
250 var transfer = this.BackendHelper.CreateFileTransfer(resolvedCabinet.Path, trackDestination.Path, resolvedCabinet.BuildOption == CabinetBuildOption.BuildAndMove, mediaTuple.SourceLineNumbers); 250 var transfer = this.BackendHelper.CreateFileTransfer(resolvedCabinet.Path, trackDestination.Path, resolvedCabinet.BuildOption == CabinetBuildOption.BuildAndMove, mediaSymbol.SourceLineNumbers);
251 this.fileTransfers.Add(transfer); 251 this.fileTransfers.Add(transfer);
252 } 252 }
253 253
@@ -372,7 +372,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
372 } 372 }
373 373
374 // The new Row has to be inserted just after the last cab in this cabinet split chain according to DiskID Sort 374 // The new Row has to be inserted just after the last cab in this cabinet split chain according to DiskID Sort
375 // This is because the FDI Extract requires DiskID of Split Cabinets to be continuous. It Fails otherwise with 375 // This is because the FDI Extract requires DiskID of Split Cabinets to be continuous. It Fails otherwise with
376 // Error 2350 (FDI Server Error) as next DiskID did not have the right split cabinet during extraction 376 // Error 2350 (FDI Server Error) as next DiskID did not have the right split cabinet during extraction
377 MediaRow newMediaRow = (MediaRow)mediaTable.CreateRow(null); 377 MediaRow newMediaRow = (MediaRow)mediaTable.CreateRow(null);
378 newMediaRow.Cabinet = newCabinetName; 378 newMediaRow.Cabinet = newCabinetName;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateDeltaPatchesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateDeltaPatchesCommand.cs
index c54e9c53..93ac50ff 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateDeltaPatchesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateDeltaPatchesCommand.cs
@@ -8,14 +8,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.IO; 8 using System.IO;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 12
13 /// <summary> 13 /// <summary>
14 /// Creates delta patches and updates the appropriate rows to point to the newly generated patches. 14 /// Creates delta patches and updates the appropriate rows to point to the newly generated patches.
15 /// </summary> 15 /// </summary>
16 internal class CreateDeltaPatchesCommand 16 internal class CreateDeltaPatchesCommand
17 { 17 {
18 public CreateDeltaPatchesCommand(List<FileFacade> fileFacades, string intermediateFolder, WixPatchIdTuple wixPatchId) 18 public CreateDeltaPatchesCommand(List<FileFacade> fileFacades, string intermediateFolder, WixPatchIdSymbol wixPatchId)
19 { 19 {
20 this.FileFacades = fileFacades; 20 this.FileFacades = fileFacades;
21 this.IntermediateFolder = intermediateFolder; 21 this.IntermediateFolder = intermediateFolder;
@@ -24,7 +24,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
24 24
25 private IEnumerable<FileFacade> FileFacades { get; } 25 private IEnumerable<FileFacade> FileFacades { get; }
26 26
27 private WixPatchIdTuple WixPatchId { get; } 27 private WixPatchIdSymbol WixPatchId { get; }
28 28
29 private string IntermediateFolder { get; } 29 private string IntermediateFolder { get; }
30 30
@@ -73,7 +73,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
73 } 73 }
74 } 74 }
75 } 75 }
76#endif 76#endif
77 77
78 throw new NotImplementedException(); 78 throw new NotImplementedException();
79 } 79 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateInstanceTransformsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateInstanceTransformsCommand.cs
index 772100ca..33afca77 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateInstanceTransformsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateInstanceTransformsCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Core.WindowsInstaller.Msi; 8 using WixToolset.Core.WindowsInstaller.Msi;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Data.WindowsInstaller.Rows; 12 using WixToolset.Data.WindowsInstaller.Rows;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -33,9 +33,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
33 public void Execute() 33 public void Execute()
34 { 34 {
35 // Create and add substorages for instance transforms. 35 // Create and add substorages for instance transforms.
36 var wixInstanceTransformsTuples = this.Section.Tuples.OfType<WixInstanceTransformsTuple>(); 36 var wixInstanceTransformsSymbols = this.Section.Symbols.OfType<WixInstanceTransformsSymbol>();
37 37
38 if (wixInstanceTransformsTuples.Any()) 38 if (wixInstanceTransformsSymbols.Any())
39 { 39 {
40 string targetProductCode = null; 40 string targetProductCode = null;
41 string targetUpgradeCode = null; 41 string targetUpgradeCode = null;
@@ -62,7 +62,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
62 } 62 }
63 63
64 // Index the Instance Component Rows, we'll get the Components rows from the real Component table. 64 // Index the Instance Component Rows, we'll get the Components rows from the real Component table.
65 var targetInstanceComponentTable = this.Section.Tuples.OfType<WixInstanceComponentTuple>(); 65 var targetInstanceComponentTable = this.Section.Symbols.OfType<WixInstanceComponentSymbol>();
66 var instanceComponentGuids = targetInstanceComponentTable.ToDictionary(t => t.Id.Id, t => (ComponentRow)null); 66 var instanceComponentGuids = targetInstanceComponentTable.ToDictionary(t => t.Id.Id, t => (ComponentRow)null);
67 67
68 if (instanceComponentGuids.Any()) 68 if (instanceComponentGuids.Any())
@@ -79,11 +79,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
79 } 79 }
80 80
81 // Generate the instance transforms 81 // Generate the instance transforms
82 foreach (var instanceTuple in wixInstanceTransformsTuples) 82 foreach (var instanceSymbol in wixInstanceTransformsSymbols)
83 { 83 {
84 var instanceId = instanceTuple.Id.Id; 84 var instanceId = instanceSymbol.Id.Id;
85 85
86 var instanceTransform = new WindowsInstallerData(instanceTuple.SourceLineNumbers); 86 var instanceTransform = new WindowsInstallerData(instanceSymbol.SourceLineNumbers);
87 instanceTransform.Type = OutputType.Transform; 87 instanceTransform.Type = OutputType.Transform;
88 instanceTransform.Codepage = this.Output.Codepage; 88 instanceTransform.Codepage = this.Output.Codepage;
89 89
@@ -107,49 +107,49 @@ namespace WixToolset.Core.WindowsInstaller.Bind
107 var propertyTable = instanceTransform.EnsureTable(this.TableDefinitions["Property"]); 107 var propertyTable = instanceTransform.EnsureTable(this.TableDefinitions["Property"]);
108 108
109 // Change the ProductCode property 109 // Change the ProductCode property
110 var productCode = instanceTuple.ProductCode; 110 var productCode = instanceSymbol.ProductCode;
111 if ("*" == productCode) 111 if ("*" == productCode)
112 { 112 {
113 productCode = Common.GenerateGuid(); 113 productCode = Common.GenerateGuid();
114 } 114 }
115 115
116 var productCodeRow = propertyTable.CreateRow(instanceTuple.SourceLineNumbers); 116 var productCodeRow = propertyTable.CreateRow(instanceSymbol.SourceLineNumbers);
117 productCodeRow.Operation = RowOperation.Modify; 117 productCodeRow.Operation = RowOperation.Modify;
118 productCodeRow.Fields[1].Modified = true; 118 productCodeRow.Fields[1].Modified = true;
119 productCodeRow[0] = "ProductCode"; 119 productCodeRow[0] = "ProductCode";
120 productCodeRow[1] = productCode; 120 productCodeRow[1] = productCode;
121 121
122 // Change the instance property 122 // Change the instance property
123 var instanceIdRow = propertyTable.CreateRow(instanceTuple.SourceLineNumbers); 123 var instanceIdRow = propertyTable.CreateRow(instanceSymbol.SourceLineNumbers);
124 instanceIdRow.Operation = RowOperation.Modify; 124 instanceIdRow.Operation = RowOperation.Modify;
125 instanceIdRow.Fields[1].Modified = true; 125 instanceIdRow.Fields[1].Modified = true;
126 instanceIdRow[0] = instanceTuple.PropertyId; 126 instanceIdRow[0] = instanceSymbol.PropertyId;
127 instanceIdRow[1] = instanceId; 127 instanceIdRow[1] = instanceId;
128 128
129 if (!String.IsNullOrEmpty(instanceTuple.ProductName)) 129 if (!String.IsNullOrEmpty(instanceSymbol.ProductName))
130 { 130 {
131 // Change the ProductName property 131 // Change the ProductName property
132 var productNameRow = propertyTable.CreateRow(instanceTuple.SourceLineNumbers); 132 var productNameRow = propertyTable.CreateRow(instanceSymbol.SourceLineNumbers);
133 productNameRow.Operation = RowOperation.Modify; 133 productNameRow.Operation = RowOperation.Modify;
134 productNameRow.Fields[1].Modified = true; 134 productNameRow.Fields[1].Modified = true;
135 productNameRow[0] = "ProductName"; 135 productNameRow[0] = "ProductName";
136 productNameRow[1] = instanceTuple.ProductName; 136 productNameRow[1] = instanceSymbol.ProductName;
137 } 137 }
138 138
139 if (!String.IsNullOrEmpty(instanceTuple.UpgradeCode)) 139 if (!String.IsNullOrEmpty(instanceSymbol.UpgradeCode))
140 { 140 {
141 // Change the UpgradeCode property 141 // Change the UpgradeCode property
142 var upgradeCodeRow = propertyTable.CreateRow(instanceTuple.SourceLineNumbers); 142 var upgradeCodeRow = propertyTable.CreateRow(instanceSymbol.SourceLineNumbers);
143 upgradeCodeRow.Operation = RowOperation.Modify; 143 upgradeCodeRow.Operation = RowOperation.Modify;
144 upgradeCodeRow.Fields[1].Modified = true; 144 upgradeCodeRow.Fields[1].Modified = true;
145 upgradeCodeRow[0] = "UpgradeCode"; 145 upgradeCodeRow[0] = "UpgradeCode";
146 upgradeCodeRow[1] = instanceTuple.UpgradeCode; 146 upgradeCodeRow[1] = instanceSymbol.UpgradeCode;
147 147
148 // Change the Upgrade table 148 // Change the Upgrade table
149 var targetUpgradeTable = this.Output.Tables["Upgrade"]; 149 var targetUpgradeTable = this.Output.Tables["Upgrade"];
150 if (null != targetUpgradeTable && 0 <= targetUpgradeTable.Rows.Count) 150 if (null != targetUpgradeTable && 0 <= targetUpgradeTable.Rows.Count)
151 { 151 {
152 var upgradeId = instanceTuple.UpgradeCode; 152 var upgradeId = instanceSymbol.UpgradeCode;
153 var upgradeTable = instanceTransform.EnsureTable(this.TableDefinitions["Upgrade"]); 153 var upgradeTable = instanceTransform.EnsureTable(this.TableDefinitions["Upgrade"]);
154 foreach (var row in targetUpgradeTable.Rows) 154 foreach (var row in targetUpgradeTable.Rows)
155 { 155 {
@@ -235,19 +235,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
235 235
236 if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.UpdatedPlatformAndLanguage)) 236 if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.UpdatedPlatformAndLanguage))
237 { 237 {
238 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceTuple.SourceLineNumbers); 238 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceSymbol.SourceLineNumbers);
239 summaryRow[0] = (int)SummaryInformation.Transform.UpdatedPlatformAndLanguage; 239 summaryRow[0] = (int)SummaryInformation.Transform.UpdatedPlatformAndLanguage;
240 summaryRow[1] = targetPlatformAndLanguage; 240 summaryRow[1] = targetPlatformAndLanguage;
241 } 241 }
242 else if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.ValidationFlags)) 242 else if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.ValidationFlags))
243 { 243 {
244 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceTuple.SourceLineNumbers); 244 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceSymbol.SourceLineNumbers);
245 summaryRow[0] = (int)SummaryInformation.Transform.ValidationFlags; 245 summaryRow[0] = (int)SummaryInformation.Transform.ValidationFlags;
246 summaryRow[1] = "0"; 246 summaryRow[1] = "0";
247 } 247 }
248 else if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.Security)) 248 else if (!summaryRows.ContainsKey((int)SummaryInformation.Transform.Security))
249 { 249 {
250 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceTuple.SourceLineNumbers); 250 var summaryRow = instanceSummaryInformationTable.CreateRow(instanceSymbol.SourceLineNumbers);
251 summaryRow[0] = (int)SummaryInformation.Transform.Security; 251 summaryRow[0] = (int)SummaryInformation.Transform.Security;
252 summaryRow[1] = "4"; 252 summaryRow[1] = "4";
253 } 253 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs
index 90d1c148..052b30e3 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.Globalization; 7 using System.Globalization;
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Data.WindowsInstaller.Rows; 12 using WixToolset.Data.WindowsInstaller.Rows;
13 using WixToolset.Extensibility; 13 using WixToolset.Extensibility;
@@ -38,7 +38,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
38 38
39 public void Execute() 39 public void Execute()
40 { 40 {
41 this.Output = new WindowsInstallerData(this.Section.Tuples.First().SourceLineNumbers) 41 this.Output = new WindowsInstallerData(this.Section.Symbols.First().SourceLineNumbers)
42 { 42 {
43 Codepage = this.Section.Codepage, 43 Codepage = this.Section.Codepage,
44 Type = SectionTypeToOutputType(this.Section.Type) 44 Type = SectionTypeToOutputType(this.Section.Type)
@@ -49,388 +49,388 @@ namespace WixToolset.Core.WindowsInstaller.Bind
49 49
50 private void AddSectionToOutput() 50 private void AddSectionToOutput()
51 { 51 {
52 var cellsByTableAndRowId = new Dictionary<string, List<WixCustomTableCellTuple>>(); 52 var cellsByTableAndRowId = new Dictionary<string, List<WixCustomTableCellSymbol>>();
53 53
54 foreach (var tuple in this.Section.Tuples) 54 foreach (var symbol in this.Section.Symbols)
55 { 55 {
56 var unknownTuple = false; 56 var unknownSymbol = false;
57 switch (tuple.Definition.Type) 57 switch (symbol.Definition.Type)
58 { 58 {
59 case TupleDefinitionType.AppSearch: 59 case SymbolDefinitionType.AppSearch:
60 this.AddTupleDefaultly(tuple); 60 this.AddSymbolDefaultly(symbol);
61 this.Output.EnsureTable(this.TableDefinitions["Signature"]); 61 this.Output.EnsureTable(this.TableDefinitions["Signature"]);
62 break; 62 break;
63 63
64 case TupleDefinitionType.Assembly: 64 case SymbolDefinitionType.Assembly:
65 this.AddAssemblyTuple((AssemblyTuple)tuple); 65 this.AddAssemblySymbol((AssemblySymbol)symbol);
66 break; 66 break;
67 67
68 case TupleDefinitionType.BBControl: 68 case SymbolDefinitionType.BBControl:
69 this.AddBBControlTuple((BBControlTuple)tuple); 69 this.AddBBControlSymbol((BBControlSymbol)symbol);
70 break; 70 break;
71 71
72 case TupleDefinitionType.Class: 72 case SymbolDefinitionType.Class:
73 this.AddClassTuple((ClassTuple)tuple); 73 this.AddClassSymbol((ClassSymbol)symbol);
74 break; 74 break;
75 75
76 case TupleDefinitionType.Control: 76 case SymbolDefinitionType.Control:
77 this.AddControlTuple((ControlTuple)tuple); 77 this.AddControlSymbol((ControlSymbol)symbol);
78 break; 78 break;
79 79
80 case TupleDefinitionType.Component: 80 case SymbolDefinitionType.Component:
81 this.AddComponentTuple((ComponentTuple)tuple); 81 this.AddComponentSymbol((ComponentSymbol)symbol);
82 break; 82 break;
83 83
84 case TupleDefinitionType.CustomAction: 84 case SymbolDefinitionType.CustomAction:
85 this.AddCustomActionTuple((CustomActionTuple)tuple); 85 this.AddCustomActionSymbol((CustomActionSymbol)symbol);
86 break; 86 break;
87 87
88 case TupleDefinitionType.Dialog: 88 case SymbolDefinitionType.Dialog:
89 this.AddDialogTuple((DialogTuple)tuple); 89 this.AddDialogSymbol((DialogSymbol)symbol);
90 break; 90 break;
91 91
92 case TupleDefinitionType.Directory: 92 case SymbolDefinitionType.Directory:
93 this.AddDirectoryTuple((DirectoryTuple)tuple); 93 this.AddDirectorySymbol((DirectorySymbol)symbol);
94 break; 94 break;
95 95
96 case TupleDefinitionType.Environment: 96 case SymbolDefinitionType.Environment:
97 this.AddEnvironmentTuple((EnvironmentTuple)tuple); 97 this.AddEnvironmentSymbol((EnvironmentSymbol)symbol);
98 break; 98 break;
99 99
100 case TupleDefinitionType.Error: 100 case SymbolDefinitionType.Error:
101 this.AddErrorTuple((ErrorTuple)tuple); 101 this.AddErrorSymbol((ErrorSymbol)symbol);
102 break; 102 break;
103 103
104 case TupleDefinitionType.Feature: 104 case SymbolDefinitionType.Feature:
105 this.AddFeatureTuple((FeatureTuple)tuple); 105 this.AddFeatureSymbol((FeatureSymbol)symbol);
106 break; 106 break;
107 107
108 case TupleDefinitionType.File: 108 case SymbolDefinitionType.File:
109 this.AddFileTuple((FileTuple)tuple); 109 this.AddFileSymbol((FileSymbol)symbol);
110 break; 110 break;
111 111
112 case TupleDefinitionType.IniFile: 112 case SymbolDefinitionType.IniFile:
113 this.AddIniFileTuple((IniFileTuple)tuple); 113 this.AddIniFileSymbol((IniFileSymbol)symbol);
114 break; 114 break;
115 115
116 case TupleDefinitionType.Media: 116 case SymbolDefinitionType.Media:
117 this.AddMediaTuple((MediaTuple)tuple); 117 this.AddMediaSymbol((MediaSymbol)symbol);
118 break; 118 break;
119 119
120 case TupleDefinitionType.ModuleConfiguration: 120 case SymbolDefinitionType.ModuleConfiguration:
121 this.AddModuleConfigurationTuple((ModuleConfigurationTuple)tuple); 121 this.AddModuleConfigurationSymbol((ModuleConfigurationSymbol)symbol);
122 break; 122 break;
123 123
124 case TupleDefinitionType.MsiEmbeddedUI: 124 case SymbolDefinitionType.MsiEmbeddedUI:
125 this.AddMsiEmbeddedUITuple((MsiEmbeddedUITuple)tuple); 125 this.AddMsiEmbeddedUISymbol((MsiEmbeddedUISymbol)symbol);
126 break; 126 break;
127 127
128 case TupleDefinitionType.MsiServiceConfig: 128 case SymbolDefinitionType.MsiServiceConfig:
129 this.AddMsiServiceConfigTuple((MsiServiceConfigTuple)tuple); 129 this.AddMsiServiceConfigSymbol((MsiServiceConfigSymbol)symbol);
130 break; 130 break;
131 131
132 case TupleDefinitionType.MsiServiceConfigFailureActions: 132 case SymbolDefinitionType.MsiServiceConfigFailureActions:
133 this.AddMsiServiceConfigFailureActionsTuple((MsiServiceConfigFailureActionsTuple)tuple); 133 this.AddMsiServiceConfigFailureActionsSymbol((MsiServiceConfigFailureActionsSymbol)symbol);
134 break; 134 break;
135 135
136 case TupleDefinitionType.MoveFile: 136 case SymbolDefinitionType.MoveFile:
137 this.AddMoveFileTuple((MoveFileTuple)tuple); 137 this.AddMoveFileSymbol((MoveFileSymbol)symbol);
138 break; 138 break;
139 139
140 case TupleDefinitionType.ProgId: 140 case SymbolDefinitionType.ProgId:
141 this.AddTupleDefaultly(tuple); 141 this.AddSymbolDefaultly(symbol);
142 this.Output.EnsureTable(this.TableDefinitions["Extension"]); 142 this.Output.EnsureTable(this.TableDefinitions["Extension"]);
143 break; 143 break;
144 144
145 case TupleDefinitionType.Property: 145 case SymbolDefinitionType.Property:
146 this.AddPropertyTuple((PropertyTuple)tuple); 146 this.AddPropertySymbol((PropertySymbol)symbol);
147 break; 147 break;
148 148
149 case TupleDefinitionType.RemoveFile: 149 case SymbolDefinitionType.RemoveFile:
150 this.AddRemoveFileTuple((RemoveFileTuple)tuple); 150 this.AddRemoveFileSymbol((RemoveFileSymbol)symbol);
151 break; 151 break;
152 152
153 case TupleDefinitionType.Registry: 153 case SymbolDefinitionType.Registry:
154 this.AddRegistryTuple((RegistryTuple)tuple); 154 this.AddRegistrySymbol((RegistrySymbol)symbol);
155 break; 155 break;
156 156
157 case TupleDefinitionType.RegLocator: 157 case SymbolDefinitionType.RegLocator:
158 this.AddRegLocatorTuple((RegLocatorTuple)tuple); 158 this.AddRegLocatorSymbol((RegLocatorSymbol)symbol);
159 break; 159 break;
160 160
161 case TupleDefinitionType.RemoveRegistry: 161 case SymbolDefinitionType.RemoveRegistry:
162 this.AddRemoveRegistryTuple((RemoveRegistryTuple)tuple); 162 this.AddRemoveRegistrySymbol((RemoveRegistrySymbol)symbol);
163 break; 163 break;
164 164
165 case TupleDefinitionType.ServiceControl: 165 case SymbolDefinitionType.ServiceControl:
166 this.AddServiceControlTuple((ServiceControlTuple)tuple); 166 this.AddServiceControlSymbol((ServiceControlSymbol)symbol);
167 break; 167 break;
168 168
169 case TupleDefinitionType.ServiceInstall: 169 case SymbolDefinitionType.ServiceInstall:
170 this.AddServiceInstallTuple((ServiceInstallTuple)tuple); 170 this.AddServiceInstallSymbol((ServiceInstallSymbol)symbol);
171 break; 171 break;
172 172
173 case TupleDefinitionType.Shortcut: 173 case SymbolDefinitionType.Shortcut:
174 this.AddShortcutTuple((ShortcutTuple)tuple); 174 this.AddShortcutSymbol((ShortcutSymbol)symbol);
175 break; 175 break;
176 176
177 case TupleDefinitionType.TextStyle: 177 case SymbolDefinitionType.TextStyle:
178 this.AddTextStyleTuple((TextStyleTuple)tuple); 178 this.AddTextStyleSymbol((TextStyleSymbol)symbol);
179 break; 179 break;
180 180
181 case TupleDefinitionType.Upgrade: 181 case SymbolDefinitionType.Upgrade:
182 this.AddUpgradeTuple((UpgradeTuple)tuple); 182 this.AddUpgradeSymbol((UpgradeSymbol)symbol);
183 break; 183 break;
184 184
185 case TupleDefinitionType.WixAction: 185 case SymbolDefinitionType.WixAction:
186 this.AddWixActionTuple((WixActionTuple)tuple); 186 this.AddWixActionSymbol((WixActionSymbol)symbol);
187 break; 187 break;
188 188
189 case TupleDefinitionType.WixCustomTableCell: 189 case SymbolDefinitionType.WixCustomTableCell:
190 this.IndexCustomTableCellTuple((WixCustomTableCellTuple)tuple, cellsByTableAndRowId); 190 this.IndexCustomTableCellSymbol((WixCustomTableCellSymbol)symbol, cellsByTableAndRowId);
191 break; 191 break;
192 192
193 case TupleDefinitionType.WixEnsureTable: 193 case SymbolDefinitionType.WixEnsureTable:
194 this.AddWixEnsureTableTuple((WixEnsureTableTuple)tuple); 194 this.AddWixEnsureTableSymbol((WixEnsureTableSymbol)symbol);
195 break; 195 break;
196 196
197 // Tuples used internally and are not added to the output. 197 // Symbols used internally and are not added to the output.
198 case TupleDefinitionType.WixBuildInfo: 198 case SymbolDefinitionType.WixBuildInfo:
199 case TupleDefinitionType.WixBindUpdatedFiles: 199 case SymbolDefinitionType.WixBindUpdatedFiles:
200 case TupleDefinitionType.WixComponentGroup: 200 case SymbolDefinitionType.WixComponentGroup:
201 case TupleDefinitionType.WixComplexReference: 201 case SymbolDefinitionType.WixComplexReference:
202 case TupleDefinitionType.WixDeltaPatchFile: 202 case SymbolDefinitionType.WixDeltaPatchFile:
203 case TupleDefinitionType.WixDeltaPatchSymbolPaths: 203 case SymbolDefinitionType.WixDeltaPatchSymbolPaths:
204 case TupleDefinitionType.WixFragment: 204 case SymbolDefinitionType.WixFragment:
205 case TupleDefinitionType.WixFeatureGroup: 205 case SymbolDefinitionType.WixFeatureGroup:
206 case TupleDefinitionType.WixInstanceComponent: 206 case SymbolDefinitionType.WixInstanceComponent:
207 case TupleDefinitionType.WixInstanceTransforms: 207 case SymbolDefinitionType.WixInstanceTransforms:
208 case TupleDefinitionType.WixFeatureModules: 208 case SymbolDefinitionType.WixFeatureModules:
209 case TupleDefinitionType.WixGroup: 209 case SymbolDefinitionType.WixGroup:
210 case TupleDefinitionType.WixMediaTemplate: 210 case SymbolDefinitionType.WixMediaTemplate:
211 case TupleDefinitionType.WixMerge: 211 case SymbolDefinitionType.WixMerge:
212 case TupleDefinitionType.WixOrdering: 212 case SymbolDefinitionType.WixOrdering:
213 case TupleDefinitionType.WixPatchBaseline: 213 case SymbolDefinitionType.WixPatchBaseline:
214 case TupleDefinitionType.WixPatchFamilyGroup: 214 case SymbolDefinitionType.WixPatchFamilyGroup:
215 case TupleDefinitionType.WixPatchId: 215 case SymbolDefinitionType.WixPatchId:
216 case TupleDefinitionType.WixPatchRef: 216 case SymbolDefinitionType.WixPatchRef:
217 case TupleDefinitionType.WixPatchTarget: 217 case SymbolDefinitionType.WixPatchTarget:
218 case TupleDefinitionType.WixProperty: 218 case SymbolDefinitionType.WixProperty:
219 case TupleDefinitionType.WixSimpleReference: 219 case SymbolDefinitionType.WixSimpleReference:
220 case TupleDefinitionType.WixSuppressAction: 220 case SymbolDefinitionType.WixSuppressAction:
221 case TupleDefinitionType.WixSuppressModularization: 221 case SymbolDefinitionType.WixSuppressModularization:
222 case TupleDefinitionType.WixUI: 222 case SymbolDefinitionType.WixUI:
223 case TupleDefinitionType.WixVariable: 223 case SymbolDefinitionType.WixVariable:
224 break; 224 break;
225 225
226 // Already processed by LoadTableDefinitions. 226 // Already processed by LoadTableDefinitions.
227 case TupleDefinitionType.WixCustomTable: 227 case SymbolDefinitionType.WixCustomTable:
228 case TupleDefinitionType.WixCustomTableColumn: 228 case SymbolDefinitionType.WixCustomTableColumn:
229 break; 229 break;
230 230
231 case TupleDefinitionType.MustBeFromAnExtension: 231 case SymbolDefinitionType.MustBeFromAnExtension:
232 unknownTuple = !this.AddTupleFromExtension(tuple); 232 unknownSymbol = !this.AddSymbolFromExtension(symbol);
233 break; 233 break;
234 234
235 default: 235 default:
236 unknownTuple = !this.AddTupleDefaultly(tuple); 236 unknownSymbol = !this.AddSymbolDefaultly(symbol);
237 break; 237 break;
238 } 238 }
239 239
240 if (unknownTuple) 240 if (unknownSymbol)
241 { 241 {
242 this.Messaging.Write(WarningMessages.TupleNotTranslatedToOutput(tuple)); 242 this.Messaging.Write(WarningMessages.SymbolNotTranslatedToOutput(symbol));
243 } 243 }
244 } 244 }
245 245
246 this.AddIndexedCellTuples(cellsByTableAndRowId); 246 this.AddIndexedCellSymbols(cellsByTableAndRowId);
247 } 247 }
248 248
249 private void AddAssemblyTuple(AssemblyTuple tuple) 249 private void AddAssemblySymbol(AssemblySymbol symbol)
250 { 250 {
251 var attributes = tuple.Type == AssemblyType.Win32Assembly ? 1 : (int?)null; 251 var attributes = symbol.Type == AssemblyType.Win32Assembly ? 1 : (int?)null;
252 252
253 var row = this.CreateRow(tuple, "MsiAssembly"); 253 var row = this.CreateRow(symbol, "MsiAssembly");
254 row[0] = tuple.ComponentRef; 254 row[0] = symbol.ComponentRef;
255 row[1] = tuple.FeatureRef; 255 row[1] = symbol.FeatureRef;
256 row[2] = tuple.ManifestFileRef; 256 row[2] = symbol.ManifestFileRef;
257 row[3] = tuple.ApplicationFileRef; 257 row[3] = symbol.ApplicationFileRef;
258 row[4] = attributes; 258 row[4] = attributes;
259 } 259 }
260 260
261 private void AddBBControlTuple(BBControlTuple tuple) 261 private void AddBBControlSymbol(BBControlSymbol symbol)
262 { 262 {
263 var attributes = tuple.Attributes; 263 var attributes = symbol.Attributes;
264 attributes |= tuple.Enabled ? WindowsInstallerConstants.MsidbControlAttributesEnabled : 0; 264 attributes |= symbol.Enabled ? WindowsInstallerConstants.MsidbControlAttributesEnabled : 0;
265 attributes |= tuple.Indirect ? WindowsInstallerConstants.MsidbControlAttributesIndirect : 0; 265 attributes |= symbol.Indirect ? WindowsInstallerConstants.MsidbControlAttributesIndirect : 0;
266 attributes |= tuple.Integer ? WindowsInstallerConstants.MsidbControlAttributesInteger : 0; 266 attributes |= symbol.Integer ? WindowsInstallerConstants.MsidbControlAttributesInteger : 0;
267 attributes |= tuple.LeftScroll ? WindowsInstallerConstants.MsidbControlAttributesLeftScroll : 0; 267 attributes |= symbol.LeftScroll ? WindowsInstallerConstants.MsidbControlAttributesLeftScroll : 0;
268 attributes |= tuple.RightAligned ? WindowsInstallerConstants.MsidbControlAttributesRightAligned : 0; 268 attributes |= symbol.RightAligned ? WindowsInstallerConstants.MsidbControlAttributesRightAligned : 0;
269 attributes |= tuple.RightToLeft ? WindowsInstallerConstants.MsidbControlAttributesRTLRO : 0; 269 attributes |= symbol.RightToLeft ? WindowsInstallerConstants.MsidbControlAttributesRTLRO : 0;
270 attributes |= tuple.Sunken ? WindowsInstallerConstants.MsidbControlAttributesSunken : 0; 270 attributes |= symbol.Sunken ? WindowsInstallerConstants.MsidbControlAttributesSunken : 0;
271 attributes |= tuple.Visible ? WindowsInstallerConstants.MsidbControlAttributesVisible : 0; 271 attributes |= symbol.Visible ? WindowsInstallerConstants.MsidbControlAttributesVisible : 0;
272 272
273 var row = this.CreateRow(tuple, "BBControl"); 273 var row = this.CreateRow(symbol, "BBControl");
274 row[0] = tuple.BillboardRef; 274 row[0] = symbol.BillboardRef;
275 row[1] = tuple.BBControl; 275 row[1] = symbol.BBControl;
276 row[2] = tuple.Type; 276 row[2] = symbol.Type;
277 row[3] = tuple.X; 277 row[3] = symbol.X;
278 row[4] = tuple.Y; 278 row[4] = symbol.Y;
279 row[5] = tuple.Width; 279 row[5] = symbol.Width;
280 row[6] = tuple.Height; 280 row[6] = symbol.Height;
281 row[7] = attributes; 281 row[7] = attributes;
282 row[8] = tuple.Text; 282 row[8] = symbol.Text;
283 } 283 }
284 284
285 private void AddClassTuple(ClassTuple tuple) 285 private void AddClassSymbol(ClassSymbol symbol)
286 { 286 {
287 var row = this.CreateRow(tuple, "Class"); 287 var row = this.CreateRow(symbol, "Class");
288 row[0] = tuple.CLSID; 288 row[0] = symbol.CLSID;
289 row[1] = tuple.Context; 289 row[1] = symbol.Context;
290 row[2] = tuple.ComponentRef; 290 row[2] = symbol.ComponentRef;
291 row[3] = tuple.DefaultProgIdRef; 291 row[3] = symbol.DefaultProgIdRef;
292 row[4] = tuple.Description; 292 row[4] = symbol.Description;
293 row[5] = tuple.AppIdRef; 293 row[5] = symbol.AppIdRef;
294 row[6] = tuple.FileTypeMask; 294 row[6] = symbol.FileTypeMask;
295 row[7] = tuple.IconRef; 295 row[7] = symbol.IconRef;
296 row[8] = tuple.IconIndex; 296 row[8] = symbol.IconIndex;
297 row[9] = tuple.DefInprocHandler; 297 row[9] = symbol.DefInprocHandler;
298 row[10] = tuple.Argument; 298 row[10] = symbol.Argument;
299 row[11] = tuple.FeatureRef; 299 row[11] = symbol.FeatureRef;
300 row[12] = tuple.RelativePath ? (int?)1 : null; 300 row[12] = symbol.RelativePath ? (int?)1 : null;
301 } 301 }
302 302
303 private void AddControlTuple(ControlTuple tuple) 303 private void AddControlSymbol(ControlSymbol symbol)
304 { 304 {
305 var text = tuple.Text; 305 var text = symbol.Text;
306 var attributes = tuple.Attributes; 306 var attributes = symbol.Attributes;
307 attributes |= tuple.Enabled ? WindowsInstallerConstants.MsidbControlAttributesEnabled : 0; 307 attributes |= symbol.Enabled ? WindowsInstallerConstants.MsidbControlAttributesEnabled : 0;
308 attributes |= tuple.Indirect ? WindowsInstallerConstants.MsidbControlAttributesIndirect : 0; 308 attributes |= symbol.Indirect ? WindowsInstallerConstants.MsidbControlAttributesIndirect : 0;
309 attributes |= tuple.Integer ? WindowsInstallerConstants.MsidbControlAttributesInteger : 0; 309 attributes |= symbol.Integer ? WindowsInstallerConstants.MsidbControlAttributesInteger : 0;
310 attributes |= tuple.LeftScroll ? WindowsInstallerConstants.MsidbControlAttributesLeftScroll : 0; 310 attributes |= symbol.LeftScroll ? WindowsInstallerConstants.MsidbControlAttributesLeftScroll : 0;
311 attributes |= tuple.RightAligned ? WindowsInstallerConstants.MsidbControlAttributesRightAligned : 0; 311 attributes |= symbol.RightAligned ? WindowsInstallerConstants.MsidbControlAttributesRightAligned : 0;
312 attributes |= tuple.RightToLeft ? WindowsInstallerConstants.MsidbControlAttributesRTLRO : 0; 312 attributes |= symbol.RightToLeft ? WindowsInstallerConstants.MsidbControlAttributesRTLRO : 0;
313 attributes |= tuple.Sunken ? WindowsInstallerConstants.MsidbControlAttributesSunken : 0; 313 attributes |= symbol.Sunken ? WindowsInstallerConstants.MsidbControlAttributesSunken : 0;
314 attributes |= tuple.Visible ? WindowsInstallerConstants.MsidbControlAttributesVisible : 0; 314 attributes |= symbol.Visible ? WindowsInstallerConstants.MsidbControlAttributesVisible : 0;
315 315
316 // If we're tracking disk space, and this is a non-FormatSize Text control, 316 // If we're tracking disk space, and this is a non-FormatSize Text control,
317 // and the text attribute starts with '[' and ends with ']', add a space. 317 // and the text attribute starts with '[' and ends with ']', add a space.
318 // It is not necessary for the whole string to be a property, just those 318 // It is not necessary for the whole string to be a property, just those
319 // two characters matter. 319 // two characters matter.
320 if (tuple.TrackDiskSpace && 320 if (symbol.TrackDiskSpace &&
321 "Text" == tuple.Type && 321 "Text" == symbol.Type &&
322 WindowsInstallerConstants.MsidbControlAttributesFormatSize != (attributes & WindowsInstallerConstants.MsidbControlAttributesFormatSize) && 322 WindowsInstallerConstants.MsidbControlAttributesFormatSize != (attributes & WindowsInstallerConstants.MsidbControlAttributesFormatSize) &&
323 null != text && text.StartsWith("[", StringComparison.Ordinal) && text.EndsWith("]", StringComparison.Ordinal)) 323 null != text && text.StartsWith("[", StringComparison.Ordinal) && text.EndsWith("]", StringComparison.Ordinal))
324 { 324 {
325 text = String.Concat(text, " "); 325 text = String.Concat(text, " ");
326 } 326 }
327 327
328 var row = this.CreateRow(tuple, "Control"); 328 var row = this.CreateRow(symbol, "Control");
329 row[0] = tuple.DialogRef; 329 row[0] = symbol.DialogRef;
330 row[1] = tuple.Control; 330 row[1] = symbol.Control;
331 row[2] = tuple.Type; 331 row[2] = symbol.Type;
332 row[3] = tuple.X; 332 row[3] = symbol.X;
333 row[4] = tuple.Y; 333 row[4] = symbol.Y;
334 row[5] = tuple.Width; 334 row[5] = symbol.Width;
335 row[6] = tuple.Height; 335 row[6] = symbol.Height;
336 row[7] = attributes; 336 row[7] = attributes;
337 row[8] = text; 337 row[8] = text;
338 row[9] = tuple.NextControlRef; 338 row[9] = symbol.NextControlRef;
339 row[10] = tuple.Help; 339 row[10] = symbol.Help;
340 } 340 }
341 341
342 private void AddComponentTuple(ComponentTuple tuple) 342 private void AddComponentSymbol(ComponentSymbol symbol)
343 { 343 {
344 var attributes = ComponentLocation.Either == tuple.Location ? WindowsInstallerConstants.MsidbComponentAttributesOptional : 0; 344 var attributes = ComponentLocation.Either == symbol.Location ? WindowsInstallerConstants.MsidbComponentAttributesOptional : 0;
345 attributes |= ComponentLocation.SourceOnly == tuple.Location ? WindowsInstallerConstants.MsidbComponentAttributesSourceOnly : 0; 345 attributes |= ComponentLocation.SourceOnly == symbol.Location ? WindowsInstallerConstants.MsidbComponentAttributesSourceOnly : 0;
346 attributes |= ComponentKeyPathType.Registry == tuple.KeyPathType ? WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath : 0; 346 attributes |= ComponentKeyPathType.Registry == symbol.KeyPathType ? WindowsInstallerConstants.MsidbComponentAttributesRegistryKeyPath : 0;
347 attributes |= ComponentKeyPathType.OdbcDataSource == tuple.KeyPathType ? WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource : 0; 347 attributes |= ComponentKeyPathType.OdbcDataSource == symbol.KeyPathType ? WindowsInstallerConstants.MsidbComponentAttributesODBCDataSource : 0;
348 attributes |= tuple.DisableRegistryReflection ? WindowsInstallerConstants.MsidbComponentAttributesDisableRegistryReflection : 0; 348 attributes |= symbol.DisableRegistryReflection ? WindowsInstallerConstants.MsidbComponentAttributesDisableRegistryReflection : 0;
349 attributes |= tuple.NeverOverwrite ? WindowsInstallerConstants.MsidbComponentAttributesNeverOverwrite : 0; 349 attributes |= symbol.NeverOverwrite ? WindowsInstallerConstants.MsidbComponentAttributesNeverOverwrite : 0;
350 attributes |= tuple.Permanent ? WindowsInstallerConstants.MsidbComponentAttributesPermanent : 0; 350 attributes |= symbol.Permanent ? WindowsInstallerConstants.MsidbComponentAttributesPermanent : 0;
351 attributes |= tuple.SharedDllRefCount ? WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount : 0; 351 attributes |= symbol.SharedDllRefCount ? WindowsInstallerConstants.MsidbComponentAttributesSharedDllRefCount : 0;
352 attributes |= tuple.Shared ? WindowsInstallerConstants.MsidbComponentAttributesShared : 0; 352 attributes |= symbol.Shared ? WindowsInstallerConstants.MsidbComponentAttributesShared : 0;
353 attributes |= tuple.Transitive ? WindowsInstallerConstants.MsidbComponentAttributesTransitive : 0; 353 attributes |= symbol.Transitive ? WindowsInstallerConstants.MsidbComponentAttributesTransitive : 0;
354 attributes |= tuple.UninstallWhenSuperseded ? WindowsInstallerConstants.MsidbComponentAttributesUninstallOnSupersedence : 0; 354 attributes |= symbol.UninstallWhenSuperseded ? WindowsInstallerConstants.MsidbComponentAttributesUninstallOnSupersedence : 0;
355 attributes |= tuple.Win64 ? WindowsInstallerConstants.MsidbComponentAttributes64bit : 0; 355 attributes |= symbol.Win64 ? WindowsInstallerConstants.MsidbComponentAttributes64bit : 0;
356 356
357 var row = this.CreateRow(tuple, "Component"); 357 var row = this.CreateRow(symbol, "Component");
358 row[0] = tuple.Id.Id; 358 row[0] = symbol.Id.Id;
359 row[1] = tuple.ComponentId; 359 row[1] = symbol.ComponentId;
360 row[2] = tuple.DirectoryRef; 360 row[2] = symbol.DirectoryRef;
361 row[3] = attributes; 361 row[3] = attributes;
362 row[4] = tuple.Condition; 362 row[4] = symbol.Condition;
363 row[5] = tuple.KeyPath; 363 row[5] = symbol.KeyPath;
364 } 364 }
365 365
366 private void AddCustomActionTuple(CustomActionTuple tuple) 366 private void AddCustomActionSymbol(CustomActionSymbol symbol)
367 { 367 {
368 var type = tuple.Win64 ? WindowsInstallerConstants.MsidbCustomActionType64BitScript : 0; 368 var type = symbol.Win64 ? WindowsInstallerConstants.MsidbCustomActionType64BitScript : 0;
369 type |= tuple.IgnoreResult ? WindowsInstallerConstants.MsidbCustomActionTypeContinue : 0; 369 type |= symbol.IgnoreResult ? WindowsInstallerConstants.MsidbCustomActionTypeContinue : 0;
370 type |= tuple.Hidden ? WindowsInstallerConstants.MsidbCustomActionTypeHideTarget : 0; 370 type |= symbol.Hidden ? WindowsInstallerConstants.MsidbCustomActionTypeHideTarget : 0;
371 type |= tuple.Async ? WindowsInstallerConstants.MsidbCustomActionTypeAsync : 0; 371 type |= symbol.Async ? WindowsInstallerConstants.MsidbCustomActionTypeAsync : 0;
372 type |= CustomActionExecutionType.FirstSequence == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeFirstSequence : 0; 372 type |= CustomActionExecutionType.FirstSequence == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeFirstSequence : 0;
373 type |= CustomActionExecutionType.OncePerProcess == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeOncePerProcess : 0; 373 type |= CustomActionExecutionType.OncePerProcess == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeOncePerProcess : 0;
374 type |= CustomActionExecutionType.ClientRepeat == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeClientRepeat : 0; 374 type |= CustomActionExecutionType.ClientRepeat == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeClientRepeat : 0;
375 type |= CustomActionExecutionType.Deferred == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript : 0; 375 type |= CustomActionExecutionType.Deferred == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript : 0;
376 type |= CustomActionExecutionType.Rollback == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript | WindowsInstallerConstants.MsidbCustomActionTypeRollback : 0; 376 type |= CustomActionExecutionType.Rollback == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript | WindowsInstallerConstants.MsidbCustomActionTypeRollback : 0;
377 type |= CustomActionExecutionType.Commit == tuple.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript | WindowsInstallerConstants.MsidbCustomActionTypeCommit : 0; 377 type |= CustomActionExecutionType.Commit == symbol.ExecutionType ? WindowsInstallerConstants.MsidbCustomActionTypeInScript | WindowsInstallerConstants.MsidbCustomActionTypeCommit : 0;
378 type |= CustomActionSourceType.File == tuple.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeSourceFile : 0; 378 type |= CustomActionSourceType.File == symbol.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeSourceFile : 0;
379 type |= CustomActionSourceType.Directory == tuple.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeDirectory : 0; 379 type |= CustomActionSourceType.Directory == symbol.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeDirectory : 0;
380 type |= CustomActionSourceType.Property == tuple.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeProperty : 0; 380 type |= CustomActionSourceType.Property == symbol.SourceType ? WindowsInstallerConstants.MsidbCustomActionTypeProperty : 0;
381 type |= CustomActionTargetType.Dll == tuple.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeDll : 0; 381 type |= CustomActionTargetType.Dll == symbol.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeDll : 0;
382 type |= CustomActionTargetType.Exe == tuple.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeExe : 0; 382 type |= CustomActionTargetType.Exe == symbol.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeExe : 0;
383 type |= CustomActionTargetType.TextData == tuple.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeTextData : 0; 383 type |= CustomActionTargetType.TextData == symbol.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeTextData : 0;
384 type |= CustomActionTargetType.JScript == tuple.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeJScript : 0; 384 type |= CustomActionTargetType.JScript == symbol.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeJScript : 0;
385 type |= CustomActionTargetType.VBScript == tuple.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeVBScript : 0; 385 type |= CustomActionTargetType.VBScript == symbol.TargetType ? WindowsInstallerConstants.MsidbCustomActionTypeVBScript : 0;
386 386
387 if (WindowsInstallerConstants.MsidbCustomActionTypeInScript == (type & WindowsInstallerConstants.MsidbCustomActionTypeInScript)) 387 if (WindowsInstallerConstants.MsidbCustomActionTypeInScript == (type & WindowsInstallerConstants.MsidbCustomActionTypeInScript))
388 { 388 {
389 type |= tuple.Impersonate ? 0 : WindowsInstallerConstants.MsidbCustomActionTypeNoImpersonate; 389 type |= symbol.Impersonate ? 0 : WindowsInstallerConstants.MsidbCustomActionTypeNoImpersonate;
390 type |= tuple.TSAware ? WindowsInstallerConstants.MsidbCustomActionTypeTSAware : 0; 390 type |= symbol.TSAware ? WindowsInstallerConstants.MsidbCustomActionTypeTSAware : 0;
391 } 391 }
392 392
393 var row = this.CreateRow(tuple, "CustomAction"); 393 var row = this.CreateRow(symbol, "CustomAction");
394 row[0] = tuple.Id.Id; 394 row[0] = symbol.Id.Id;
395 row[1] = type; 395 row[1] = type;
396 row[2] = tuple.Source; 396 row[2] = symbol.Source;
397 row[3] = tuple.Target; 397 row[3] = symbol.Target;
398 row[4] = tuple.PatchUninstall ? (int?)WindowsInstallerConstants.MsidbCustomActionTypePatchUninstall : null; 398 row[4] = symbol.PatchUninstall ? (int?)WindowsInstallerConstants.MsidbCustomActionTypePatchUninstall : null;
399 } 399 }
400 400
401 private void AddDialogTuple(DialogTuple tuple) 401 private void AddDialogSymbol(DialogSymbol symbol)
402 { 402 {
403 var attributes = tuple.Visible ? WindowsInstallerConstants.MsidbDialogAttributesVisible : 0; 403 var attributes = symbol.Visible ? WindowsInstallerConstants.MsidbDialogAttributesVisible : 0;
404 attributes |= tuple.Modal ? WindowsInstallerConstants.MsidbDialogAttributesModal : 0; 404 attributes |= symbol.Modal ? WindowsInstallerConstants.MsidbDialogAttributesModal : 0;
405 attributes |= tuple.Minimize ? WindowsInstallerConstants.MsidbDialogAttributesMinimize : 0; 405 attributes |= symbol.Minimize ? WindowsInstallerConstants.MsidbDialogAttributesMinimize : 0;
406 attributes |= tuple.CustomPalette ? WindowsInstallerConstants.MsidbDialogAttributesUseCustomPalette : 0; 406 attributes |= symbol.CustomPalette ? WindowsInstallerConstants.MsidbDialogAttributesUseCustomPalette : 0;
407 attributes |= tuple.ErrorDialog ? WindowsInstallerConstants.MsidbDialogAttributesError : 0; 407 attributes |= symbol.ErrorDialog ? WindowsInstallerConstants.MsidbDialogAttributesError : 0;
408 attributes |= tuple.LeftScroll ? WindowsInstallerConstants.MsidbDialogAttributesLeftScroll : 0; 408 attributes |= symbol.LeftScroll ? WindowsInstallerConstants.MsidbDialogAttributesLeftScroll : 0;
409 attributes |= tuple.KeepModeless ? WindowsInstallerConstants.MsidbDialogAttributesKeepModeless : 0; 409 attributes |= symbol.KeepModeless ? WindowsInstallerConstants.MsidbDialogAttributesKeepModeless : 0;
410 attributes |= tuple.RightAligned ? WindowsInstallerConstants.MsidbDialogAttributesRightAligned : 0; 410 attributes |= symbol.RightAligned ? WindowsInstallerConstants.MsidbDialogAttributesRightAligned : 0;
411 attributes |= tuple.RightToLeft ? WindowsInstallerConstants.MsidbDialogAttributesRTLRO : 0; 411 attributes |= symbol.RightToLeft ? WindowsInstallerConstants.MsidbDialogAttributesRTLRO : 0;
412 attributes |= tuple.SystemModal ? WindowsInstallerConstants.MsidbDialogAttributesSysModal : 0; 412 attributes |= symbol.SystemModal ? WindowsInstallerConstants.MsidbDialogAttributesSysModal : 0;
413 attributes |= tuple.TrackDiskSpace ? WindowsInstallerConstants.MsidbDialogAttributesTrackDiskSpace : 0; 413 attributes |= symbol.TrackDiskSpace ? WindowsInstallerConstants.MsidbDialogAttributesTrackDiskSpace : 0;
414 414
415 var row = this.CreateRow(tuple, "Dialog"); 415 var row = this.CreateRow(symbol, "Dialog");
416 row[0] = tuple.Id.Id; 416 row[0] = symbol.Id.Id;
417 row[1] = tuple.HCentering; 417 row[1] = symbol.HCentering;
418 row[2] = tuple.VCentering; 418 row[2] = symbol.VCentering;
419 row[3] = tuple.Width; 419 row[3] = symbol.Width;
420 row[4] = tuple.Height; 420 row[4] = symbol.Height;
421 row[5] = attributes; 421 row[5] = attributes;
422 row[6] = tuple.Title; 422 row[6] = symbol.Title;
423 row[7] = tuple.FirstControlRef; 423 row[7] = symbol.FirstControlRef;
424 row[8] = tuple.DefaultControlRef; 424 row[8] = symbol.DefaultControlRef;
425 row[9] = tuple.CancelControlRef; 425 row[9] = symbol.CancelControlRef;
426 426
427 this.Output.EnsureTable(this.TableDefinitions["ListBox"]); 427 this.Output.EnsureTable(this.TableDefinitions["ListBox"]);
428 } 428 }
429 429
430 private void AddDirectoryTuple(DirectoryTuple tuple) 430 private void AddDirectorySymbol(DirectorySymbol symbol)
431 { 431 {
432 var sourceName = GetMsiFilenameValue(tuple.SourceShortName, tuple.SourceName); 432 var sourceName = GetMsiFilenameValue(symbol.SourceShortName, symbol.SourceName);
433 var targetName = GetMsiFilenameValue(tuple.ShortName, tuple.Name); 433 var targetName = GetMsiFilenameValue(symbol.ShortName, symbol.Name);
434 434
435 if (String.IsNullOrEmpty(targetName)) 435 if (String.IsNullOrEmpty(targetName))
436 { 436 {
@@ -439,20 +439,20 @@ namespace WixToolset.Core.WindowsInstaller.Bind
439 439
440 var defaultDir = String.IsNullOrEmpty(sourceName) ? targetName : targetName + ":" + sourceName; 440 var defaultDir = String.IsNullOrEmpty(sourceName) ? targetName : targetName + ":" + sourceName;
441 441
442 var row = this.CreateRow(tuple, "Directory"); 442 var row = this.CreateRow(symbol, "Directory");
443 row[0] = tuple.Id.Id; 443 row[0] = symbol.Id.Id;
444 row[1] = tuple.ParentDirectoryRef; 444 row[1] = symbol.ParentDirectoryRef;
445 row[2] = defaultDir; 445 row[2] = defaultDir;
446 } 446 }
447 447
448 private void AddEnvironmentTuple(EnvironmentTuple tuple) 448 private void AddEnvironmentSymbol(EnvironmentSymbol symbol)
449 { 449 {
450 var action = String.Empty; 450 var action = String.Empty;
451 var system = tuple.System ? "*" : String.Empty; 451 var system = symbol.System ? "*" : String.Empty;
452 var uninstall = tuple.Permanent ? String.Empty : "-"; 452 var uninstall = symbol.Permanent ? String.Empty : "-";
453 var value = tuple.Value; 453 var value = symbol.Value;
454 454
455 switch (tuple.Action) 455 switch (symbol.Action)
456 { 456 {
457 case EnvironmentActionType.Create: 457 case EnvironmentActionType.Create:
458 action = "+"; 458 action = "+";
@@ -465,219 +465,219 @@ namespace WixToolset.Core.WindowsInstaller.Bind
465 break; 465 break;
466 } 466 }
467 467
468 switch (tuple.Part) 468 switch (symbol.Part)
469 { 469 {
470 case EnvironmentPartType.First: 470 case EnvironmentPartType.First:
471 value = String.Concat(value, tuple.Separator, "[~]"); 471 value = String.Concat(value, symbol.Separator, "[~]");
472 break; 472 break;
473 case EnvironmentPartType.Last: 473 case EnvironmentPartType.Last:
474 value = String.Concat("[~]", tuple.Separator, value); 474 value = String.Concat("[~]", symbol.Separator, value);
475 break; 475 break;
476 } 476 }
477 477
478 var row = this.CreateRow(tuple, "Environment"); 478 var row = this.CreateRow(symbol, "Environment");
479 row[0] = tuple.Id.Id; 479 row[0] = symbol.Id.Id;
480 row[1] = String.Concat(action, uninstall, system, tuple.Name); 480 row[1] = String.Concat(action, uninstall, system, symbol.Name);
481 row[2] = value; 481 row[2] = value;
482 row[3] = tuple.ComponentRef; 482 row[3] = symbol.ComponentRef;
483 } 483 }
484 484
485 private void AddErrorTuple(ErrorTuple tuple) 485 private void AddErrorSymbol(ErrorSymbol symbol)
486 { 486 {
487 var row = this.CreateRow(tuple, "Error"); 487 var row = this.CreateRow(symbol, "Error");
488 row[0] = Convert.ToInt32(tuple.Id.Id); 488 row[0] = Convert.ToInt32(symbol.Id.Id);
489 row[1] = tuple.Message; 489 row[1] = symbol.Message;
490 } 490 }
491 491
492 private void AddFeatureTuple(FeatureTuple tuple) 492 private void AddFeatureSymbol(FeatureSymbol symbol)
493 { 493 {
494 var attributes = tuple.DisallowAbsent ? WindowsInstallerConstants.MsidbFeatureAttributesUIDisallowAbsent : 0; 494 var attributes = symbol.DisallowAbsent ? WindowsInstallerConstants.MsidbFeatureAttributesUIDisallowAbsent : 0;
495 attributes |= tuple.DisallowAdvertise ? WindowsInstallerConstants.MsidbFeatureAttributesDisallowAdvertise : 0; 495 attributes |= symbol.DisallowAdvertise ? WindowsInstallerConstants.MsidbFeatureAttributesDisallowAdvertise : 0;
496 attributes |= FeatureInstallDefault.FollowParent == tuple.InstallDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFollowParent : 0; 496 attributes |= FeatureInstallDefault.FollowParent == symbol.InstallDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFollowParent : 0;
497 attributes |= FeatureInstallDefault.Source == tuple.InstallDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFavorSource : 0; 497 attributes |= FeatureInstallDefault.Source == symbol.InstallDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFavorSource : 0;
498 attributes |= FeatureTypicalDefault.Advertise == tuple.TypicalDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFavorAdvertise : 0; 498 attributes |= FeatureTypicalDefault.Advertise == symbol.TypicalDefault ? WindowsInstallerConstants.MsidbFeatureAttributesFavorAdvertise : 0;
499 499
500 var row = this.CreateRow(tuple, "Feature"); 500 var row = this.CreateRow(symbol, "Feature");
501 row[0] = tuple.Id.Id; 501 row[0] = symbol.Id.Id;
502 row[1] = tuple.ParentFeatureRef; 502 row[1] = symbol.ParentFeatureRef;
503 row[2] = tuple.Title; 503 row[2] = symbol.Title;
504 row[3] = tuple.Description; 504 row[3] = symbol.Description;
505 row[4] = tuple.Display; 505 row[4] = symbol.Display;
506 row[5] = tuple.Level; 506 row[5] = symbol.Level;
507 row[6] = tuple.DirectoryRef; 507 row[6] = symbol.DirectoryRef;
508 row[7] = attributes; 508 row[7] = attributes;
509 } 509 }
510 510
511 private void AddFileTuple(FileTuple tuple) 511 private void AddFileSymbol(FileSymbol symbol)
512 { 512 {
513 var row = (FileRow)this.CreateRow(tuple, "File"); 513 var row = (FileRow)this.CreateRow(symbol, "File");
514 row.File = tuple.Id.Id; 514 row.File = symbol.Id.Id;
515 row.Component = tuple.ComponentRef; 515 row.Component = symbol.ComponentRef;
516 row.FileName = GetMsiFilenameValue(tuple.ShortName, tuple.Name); 516 row.FileName = GetMsiFilenameValue(symbol.ShortName, symbol.Name);
517 row.FileSize = tuple.FileSize; 517 row.FileSize = symbol.FileSize;
518 row.Version = tuple.Version; 518 row.Version = symbol.Version;
519 row.Language = tuple.Language; 519 row.Language = symbol.Language;
520 row.DiskId = tuple.DiskId ?? 1; // TODO: is 1 the correct thing to default here 520 row.DiskId = symbol.DiskId ?? 1; // TODO: is 1 the correct thing to default here
521 row.Sequence = tuple.Sequence; 521 row.Sequence = symbol.Sequence;
522 row.Source = tuple.Source.Path; 522 row.Source = symbol.Source.Path;
523 523
524 var attributes = (tuple.Attributes & FileTupleAttributes.Checksum) == FileTupleAttributes.Checksum ? WindowsInstallerConstants.MsidbFileAttributesChecksum : 0; 524 var attributes = (symbol.Attributes & FileSymbolAttributes.Checksum) == FileSymbolAttributes.Checksum ? WindowsInstallerConstants.MsidbFileAttributesChecksum : 0;
525 attributes |= (tuple.Attributes & FileTupleAttributes.Compressed) == FileTupleAttributes.Compressed ? WindowsInstallerConstants.MsidbFileAttributesCompressed : 0; 525 attributes |= (symbol.Attributes & FileSymbolAttributes.Compressed) == FileSymbolAttributes.Compressed ? WindowsInstallerConstants.MsidbFileAttributesCompressed : 0;
526 attributes |= (tuple.Attributes & FileTupleAttributes.Uncompressed) == FileTupleAttributes.Uncompressed ? WindowsInstallerConstants.MsidbFileAttributesNoncompressed : 0; 526 attributes |= (symbol.Attributes & FileSymbolAttributes.Uncompressed) == FileSymbolAttributes.Uncompressed ? WindowsInstallerConstants.MsidbFileAttributesNoncompressed : 0;
527 attributes |= (tuple.Attributes & FileTupleAttributes.Hidden) == FileTupleAttributes.Hidden ? WindowsInstallerConstants.MsidbFileAttributesHidden : 0; 527 attributes |= (symbol.Attributes & FileSymbolAttributes.Hidden) == FileSymbolAttributes.Hidden ? WindowsInstallerConstants.MsidbFileAttributesHidden : 0;
528 attributes |= (tuple.Attributes & FileTupleAttributes.ReadOnly) == FileTupleAttributes.ReadOnly ? WindowsInstallerConstants.MsidbFileAttributesReadOnly : 0; 528 attributes |= (symbol.Attributes & FileSymbolAttributes.ReadOnly) == FileSymbolAttributes.ReadOnly ? WindowsInstallerConstants.MsidbFileAttributesReadOnly : 0;
529 attributes |= (tuple.Attributes & FileTupleAttributes.System) == FileTupleAttributes.System ? WindowsInstallerConstants.MsidbFileAttributesSystem : 0; 529 attributes |= (symbol.Attributes & FileSymbolAttributes.System) == FileSymbolAttributes.System ? WindowsInstallerConstants.MsidbFileAttributesSystem : 0;
530 attributes |= (tuple.Attributes & FileTupleAttributes.Vital) == FileTupleAttributes.Vital ? WindowsInstallerConstants.MsidbFileAttributesVital : 0; 530 attributes |= (symbol.Attributes & FileSymbolAttributes.Vital) == FileSymbolAttributes.Vital ? WindowsInstallerConstants.MsidbFileAttributesVital : 0;
531 row.Attributes = attributes; 531 row.Attributes = attributes;
532 532
533 if (tuple.FontTitle != null) 533 if (symbol.FontTitle != null)
534 { 534 {
535 var fontRow = this.CreateRow(tuple, "Font"); 535 var fontRow = this.CreateRow(symbol, "Font");
536 fontRow[0] = tuple.Id.Id; 536 fontRow[0] = symbol.Id.Id;
537 fontRow[1] = tuple.FontTitle; 537 fontRow[1] = symbol.FontTitle;
538 } 538 }
539 539
540 if (tuple.SelfRegCost.HasValue) 540 if (symbol.SelfRegCost.HasValue)
541 { 541 {
542 var selfRegRow = this.CreateRow(tuple, "SelfReg"); 542 var selfRegRow = this.CreateRow(symbol, "SelfReg");
543 selfRegRow[0] = tuple.Id.Id; 543 selfRegRow[0] = symbol.Id.Id;
544 selfRegRow[1] = tuple.SelfRegCost.Value; 544 selfRegRow[1] = symbol.SelfRegCost.Value;
545 } 545 }
546 } 546 }
547 547
548 private void AddIniFileTuple(IniFileTuple tuple) 548 private void AddIniFileSymbol(IniFileSymbol symbol)
549 { 549 {
550 var tableName = (InifFileActionType.AddLine == tuple.Action || InifFileActionType.AddTag == tuple.Action || InifFileActionType.CreateLine == tuple.Action) ? "IniFile" : "RemoveIniFile"; 550 var tableName = (InifFileActionType.AddLine == symbol.Action || InifFileActionType.AddTag == symbol.Action || InifFileActionType.CreateLine == symbol.Action) ? "IniFile" : "RemoveIniFile";
551 551
552 var row = this.CreateRow(tuple, tableName); 552 var row = this.CreateRow(symbol, tableName);
553 row[0] = tuple.Id.Id; 553 row[0] = symbol.Id.Id;
554 row[1] = tuple.FileName; 554 row[1] = symbol.FileName;
555 row[2] = tuple.DirProperty; 555 row[2] = symbol.DirProperty;
556 row[3] = tuple.Section; 556 row[3] = symbol.Section;
557 row[4] = tuple.Key; 557 row[4] = symbol.Key;
558 row[5] = tuple.Value; 558 row[5] = symbol.Value;
559 row[6] = tuple.Action; 559 row[6] = symbol.Action;
560 row[7] = tuple.ComponentRef; 560 row[7] = symbol.ComponentRef;
561 } 561 }
562 562
563 private void AddMediaTuple(MediaTuple tuple) 563 private void AddMediaSymbol(MediaSymbol symbol)
564 { 564 {
565 if (this.Section.Type != SectionType.Module) 565 if (this.Section.Type != SectionType.Module)
566 { 566 {
567 var row = (MediaRow)this.CreateRow(tuple, "Media"); 567 var row = (MediaRow)this.CreateRow(symbol, "Media");
568 row.DiskId = tuple.DiskId; 568 row.DiskId = symbol.DiskId;
569 row.LastSequence = tuple.LastSequence ?? 0; 569 row.LastSequence = symbol.LastSequence ?? 0;
570 row.DiskPrompt = tuple.DiskPrompt; 570 row.DiskPrompt = symbol.DiskPrompt;
571 row.Cabinet = tuple.Cabinet; 571 row.Cabinet = symbol.Cabinet;
572 row.VolumeLabel = tuple.VolumeLabel; 572 row.VolumeLabel = symbol.VolumeLabel;
573 row.Source = tuple.Source; 573 row.Source = symbol.Source;
574 } 574 }
575 } 575 }
576 576
577 private void AddModuleConfigurationTuple(ModuleConfigurationTuple tuple) 577 private void AddModuleConfigurationSymbol(ModuleConfigurationSymbol symbol)
578 { 578 {
579 var row = this.CreateRow(tuple, "ModuleConfiguration"); 579 var row = this.CreateRow(symbol, "ModuleConfiguration");
580 row[0] = tuple.Id.Id; 580 row[0] = symbol.Id.Id;
581 row[1] = tuple.Format; 581 row[1] = symbol.Format;
582 row[2] = tuple.Type; 582 row[2] = symbol.Type;
583 row[3] = tuple.ContextData; 583 row[3] = symbol.ContextData;
584 row[4] = tuple.DefaultValue; 584 row[4] = symbol.DefaultValue;
585 row[5] = (tuple.KeyNoOrphan ? WindowsInstallerConstants.MsidbMsmConfigurableOptionKeyNoOrphan : 0) | 585 row[5] = (symbol.KeyNoOrphan ? WindowsInstallerConstants.MsidbMsmConfigurableOptionKeyNoOrphan : 0) |
586 (tuple.NonNullable ? WindowsInstallerConstants.MsidbMsmConfigurableOptionNonNullable : 0); 586 (symbol.NonNullable ? WindowsInstallerConstants.MsidbMsmConfigurableOptionNonNullable : 0);
587 row[6] = tuple.DisplayName; 587 row[6] = symbol.DisplayName;
588 row[7] = tuple.Description; 588 row[7] = symbol.Description;
589 row[8] = tuple.HelpLocation; 589 row[8] = symbol.HelpLocation;
590 row[9] = tuple.HelpKeyword; 590 row[9] = symbol.HelpKeyword;
591 } 591 }
592 592
593 private void AddMsiEmbeddedUITuple(MsiEmbeddedUITuple tuple) 593 private void AddMsiEmbeddedUISymbol(MsiEmbeddedUISymbol symbol)
594 { 594 {
595 var attributes = tuple.EntryPoint ? WindowsInstallerConstants.MsidbEmbeddedUI : 0; 595 var attributes = symbol.EntryPoint ? WindowsInstallerConstants.MsidbEmbeddedUI : 0;
596 attributes |= tuple.SupportsBasicUI ? WindowsInstallerConstants.MsidbEmbeddedHandlesBasic : 0; 596 attributes |= symbol.SupportsBasicUI ? WindowsInstallerConstants.MsidbEmbeddedHandlesBasic : 0;
597 597
598 var row = this.CreateRow(tuple, "MsiEmbeddedUI"); 598 var row = this.CreateRow(symbol, "MsiEmbeddedUI");
599 row[0] = tuple.Id.Id; 599 row[0] = symbol.Id.Id;
600 row[1] = tuple.FileName; 600 row[1] = symbol.FileName;
601 row[2] = attributes; 601 row[2] = attributes;
602 row[3] = tuple.MessageFilter; 602 row[3] = symbol.MessageFilter;
603 row[4] = tuple.Source; 603 row[4] = symbol.Source;
604 } 604 }
605 605
606 private void AddMsiServiceConfigTuple(MsiServiceConfigTuple tuple) 606 private void AddMsiServiceConfigSymbol(MsiServiceConfigSymbol symbol)
607 { 607 {
608 var events = tuple.OnInstall ? WindowsInstallerConstants.MsidbServiceConfigEventInstall : 0; 608 var events = symbol.OnInstall ? WindowsInstallerConstants.MsidbServiceConfigEventInstall : 0;
609 events |= tuple.OnReinstall ? WindowsInstallerConstants.MsidbServiceConfigEventReinstall : 0; 609 events |= symbol.OnReinstall ? WindowsInstallerConstants.MsidbServiceConfigEventReinstall : 0;
610 events |= tuple.OnUninstall ? WindowsInstallerConstants.MsidbServiceConfigEventUninstall : 0; 610 events |= symbol.OnUninstall ? WindowsInstallerConstants.MsidbServiceConfigEventUninstall : 0;
611 611
612 var row = this.CreateRow(tuple, "MsiServiceConfigFailureActions"); 612 var row = this.CreateRow(symbol, "MsiServiceConfigFailureActions");
613 row[0] = tuple.Id.Id; 613 row[0] = symbol.Id.Id;
614 row[1] = tuple.Name; 614 row[1] = symbol.Name;
615 row[2] = events; 615 row[2] = events;
616 row[3] = tuple.ConfigType; 616 row[3] = symbol.ConfigType;
617 row[4] = tuple.Argument; 617 row[4] = symbol.Argument;
618 row[5] = tuple.ComponentRef; 618 row[5] = symbol.ComponentRef;
619 } 619 }
620 620
621 private void AddMsiServiceConfigFailureActionsTuple(MsiServiceConfigFailureActionsTuple tuple) 621 private void AddMsiServiceConfigFailureActionsSymbol(MsiServiceConfigFailureActionsSymbol symbol)
622 { 622 {
623 var events = tuple.OnInstall ? WindowsInstallerConstants.MsidbServiceConfigEventInstall : 0; 623 var events = symbol.OnInstall ? WindowsInstallerConstants.MsidbServiceConfigEventInstall : 0;
624 events |= tuple.OnReinstall ? WindowsInstallerConstants.MsidbServiceConfigEventReinstall : 0; 624 events |= symbol.OnReinstall ? WindowsInstallerConstants.MsidbServiceConfigEventReinstall : 0;
625 events |= tuple.OnUninstall ? WindowsInstallerConstants.MsidbServiceConfigEventUninstall : 0; 625 events |= symbol.OnUninstall ? WindowsInstallerConstants.MsidbServiceConfigEventUninstall : 0;
626 626
627 var row = this.CreateRow(tuple, "MsiServiceConfig"); 627 var row = this.CreateRow(symbol, "MsiServiceConfig");
628 row[0] = tuple.Id.Id; 628 row[0] = symbol.Id.Id;
629 row[1] = tuple.Name; 629 row[1] = symbol.Name;
630 row[2] = events; 630 row[2] = events;
631 row[3] = tuple.ResetPeriod.HasValue ? tuple.ResetPeriod : null; 631 row[3] = symbol.ResetPeriod.HasValue ? symbol.ResetPeriod : null;
632 row[4] = tuple.RebootMessage ?? "[~]"; 632 row[4] = symbol.RebootMessage ?? "[~]";
633 row[5] = tuple.Command ?? "[~]"; 633 row[5] = symbol.Command ?? "[~]";
634 row[6] = tuple.Actions; 634 row[6] = symbol.Actions;
635 row[7] = tuple.DelayActions; 635 row[7] = symbol.DelayActions;
636 row[8] = tuple.ComponentRef; 636 row[8] = symbol.ComponentRef;
637 } 637 }
638 638
639 private void AddMoveFileTuple(MoveFileTuple tuple) 639 private void AddMoveFileSymbol(MoveFileSymbol symbol)
640 { 640 {
641 var row = this.CreateRow(tuple, "MoveFile"); 641 var row = this.CreateRow(symbol, "MoveFile");
642 row[0] = tuple.Id.Id; 642 row[0] = symbol.Id.Id;
643 row[1] = tuple.ComponentRef; 643 row[1] = symbol.ComponentRef;
644 row[2] = tuple.SourceName; 644 row[2] = symbol.SourceName;
645 row[3] = tuple.DestName; 645 row[3] = symbol.DestName;
646 row[4] = tuple.SourceFolder; 646 row[4] = symbol.SourceFolder;
647 row[5] = tuple.DestFolder; 647 row[5] = symbol.DestFolder;
648 row[6] = tuple.Delete ? WindowsInstallerConstants.MsidbMoveFileOptionsMove : 0; 648 row[6] = symbol.Delete ? WindowsInstallerConstants.MsidbMoveFileOptionsMove : 0;
649 } 649 }
650 650
651 private void AddPropertyTuple(PropertyTuple tuple) 651 private void AddPropertySymbol(PropertySymbol symbol)
652 { 652 {
653 if (String.IsNullOrEmpty(tuple.Value)) 653 if (String.IsNullOrEmpty(symbol.Value))
654 { 654 {
655 return; 655 return;
656 } 656 }
657 657
658 var row = (PropertyRow)this.CreateRow(tuple, "Property"); 658 var row = (PropertyRow)this.CreateRow(symbol, "Property");
659 row.Property = tuple.Id.Id; 659 row.Property = symbol.Id.Id;
660 row.Value = tuple.Value; 660 row.Value = symbol.Value;
661 } 661 }
662 662
663 private void AddRemoveFileTuple(RemoveFileTuple tuple) 663 private void AddRemoveFileSymbol(RemoveFileSymbol symbol)
664 { 664 {
665 var installMode = tuple.OnInstall == true ? WindowsInstallerConstants.MsidbRemoveFileInstallModeOnInstall : 0; 665 var installMode = symbol.OnInstall == true ? WindowsInstallerConstants.MsidbRemoveFileInstallModeOnInstall : 0;
666 installMode |= tuple.OnUninstall == true ? WindowsInstallerConstants.MsidbRemoveFileInstallModeOnRemove : 0; 666 installMode |= symbol.OnUninstall == true ? WindowsInstallerConstants.MsidbRemoveFileInstallModeOnRemove : 0;
667 667
668 var row = this.CreateRow(tuple, "RemoveFile"); 668 var row = this.CreateRow(symbol, "RemoveFile");
669 row[0] = tuple.Id.Id; 669 row[0] = symbol.Id.Id;
670 row[1] = tuple.ComponentRef; 670 row[1] = symbol.ComponentRef;
671 row[2] = tuple.FileName; 671 row[2] = symbol.FileName;
672 row[3] = tuple.DirProperty; 672 row[3] = symbol.DirProperty;
673 row[4] = installMode; 673 row[4] = installMode;
674 } 674 }
675 675
676 private void AddRegistryTuple(RegistryTuple tuple) 676 private void AddRegistrySymbol(RegistrySymbol symbol)
677 { 677 {
678 var value = tuple.Value; 678 var value = symbol.Value;
679 679
680 switch (tuple.ValueType) 680 switch (symbol.ValueType)
681 { 681 {
682 case RegistryValueType.Binary: 682 case RegistryValueType.Binary:
683 value = String.Concat("#x", value); 683 value = String.Concat("#x", value);
@@ -689,7 +689,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
689 value = String.Concat("#", value); 689 value = String.Concat("#", value);
690 break; 690 break;
691 case RegistryValueType.MultiString: 691 case RegistryValueType.MultiString:
692 switch (tuple.ValueAction) 692 switch (symbol.ValueAction)
693 { 693 {
694 case RegistryValueActionType.Append: 694 case RegistryValueActionType.Append:
695 value = String.Concat("[~]", value); 695 value = String.Concat("[~]", value);
@@ -715,164 +715,164 @@ namespace WixToolset.Core.WindowsInstaller.Bind
715 break; 715 break;
716 } 716 }
717 717
718 var row = this.CreateRow(tuple, "Registry"); 718 var row = this.CreateRow(symbol, "Registry");
719 row[0] = tuple.Id.Id; 719 row[0] = symbol.Id.Id;
720 row[1] = tuple.Root; 720 row[1] = symbol.Root;
721 row[2] = tuple.Key; 721 row[2] = symbol.Key;
722 row[3] = tuple.Name; 722 row[3] = symbol.Name;
723 row[4] = value; 723 row[4] = value;
724 row[5] = tuple.ComponentRef; 724 row[5] = symbol.ComponentRef;
725 } 725 }
726 726
727 private void AddRegLocatorTuple(RegLocatorTuple tuple) 727 private void AddRegLocatorSymbol(RegLocatorSymbol symbol)
728 { 728 {
729 var type = (int)tuple.Type; 729 var type = (int)symbol.Type;
730 type |= tuple.Win64 ? WindowsInstallerConstants.MsidbLocatorType64bit : 0; 730 type |= symbol.Win64 ? WindowsInstallerConstants.MsidbLocatorType64bit : 0;
731 731
732 var row = this.CreateRow(tuple, "RegLocator"); 732 var row = this.CreateRow(symbol, "RegLocator");
733 row[0] = tuple.Id.Id; 733 row[0] = symbol.Id.Id;
734 row[1] = tuple.Root; 734 row[1] = symbol.Root;
735 row[2] = tuple.Key; 735 row[2] = symbol.Key;
736 row[3] = tuple.Name; 736 row[3] = symbol.Name;
737 row[4] = type; 737 row[4] = type;
738 } 738 }
739 739
740 private void AddRemoveRegistryTuple(RemoveRegistryTuple tuple) 740 private void AddRemoveRegistrySymbol(RemoveRegistrySymbol symbol)
741 { 741 {
742 if (tuple.Action == RemoveRegistryActionType.RemoveOnInstall) 742 if (symbol.Action == RemoveRegistryActionType.RemoveOnInstall)
743 { 743 {
744 var row = this.CreateRow(tuple, "RemoveRegistry"); 744 var row = this.CreateRow(symbol, "RemoveRegistry");
745 row[0] = tuple.Id.Id; 745 row[0] = symbol.Id.Id;
746 row[1] = tuple.Root; 746 row[1] = symbol.Root;
747 row[2] = tuple.Key; 747 row[2] = symbol.Key;
748 row[3] = tuple.Name; 748 row[3] = symbol.Name;
749 row[4] = tuple.ComponentRef; 749 row[4] = symbol.ComponentRef;
750 } 750 }
751 else // Registry table is used to remove registry keys on uninstall. 751 else // Registry table is used to remove registry keys on uninstall.
752 { 752 {
753 var row = this.CreateRow(tuple, "Registry"); 753 var row = this.CreateRow(symbol, "Registry");
754 row[0] = tuple.Id.Id; 754 row[0] = symbol.Id.Id;
755 row[1] = tuple.Root; 755 row[1] = symbol.Root;
756 row[2] = tuple.Key; 756 row[2] = symbol.Key;
757 row[3] = tuple.Name; 757 row[3] = symbol.Name;
758 row[5] = tuple.ComponentRef; 758 row[5] = symbol.ComponentRef;
759 } 759 }
760 } 760 }
761 761
762 private void AddServiceControlTuple(ServiceControlTuple tuple) 762 private void AddServiceControlSymbol(ServiceControlSymbol symbol)
763 { 763 {
764 var events = tuple.InstallRemove ? WindowsInstallerConstants.MsidbServiceControlEventDelete : 0; 764 var events = symbol.InstallRemove ? WindowsInstallerConstants.MsidbServiceControlEventDelete : 0;
765 events |= tuple.UninstallRemove ? WindowsInstallerConstants.MsidbServiceControlEventUninstallDelete : 0; 765 events |= symbol.UninstallRemove ? WindowsInstallerConstants.MsidbServiceControlEventUninstallDelete : 0;
766 events |= tuple.InstallStart ? WindowsInstallerConstants.MsidbServiceControlEventStart : 0; 766 events |= symbol.InstallStart ? WindowsInstallerConstants.MsidbServiceControlEventStart : 0;
767 events |= tuple.UninstallStart ? WindowsInstallerConstants.MsidbServiceControlEventUninstallStart : 0; 767 events |= symbol.UninstallStart ? WindowsInstallerConstants.MsidbServiceControlEventUninstallStart : 0;
768 events |= tuple.InstallStop ? WindowsInstallerConstants.MsidbServiceControlEventStop : 0; 768 events |= symbol.InstallStop ? WindowsInstallerConstants.MsidbServiceControlEventStop : 0;
769 events |= tuple.UninstallStop ? WindowsInstallerConstants.MsidbServiceControlEventUninstallStop : 0; 769 events |= symbol.UninstallStop ? WindowsInstallerConstants.MsidbServiceControlEventUninstallStop : 0;
770 770
771 var row = this.CreateRow(tuple, "ServiceControl"); 771 var row = this.CreateRow(symbol, "ServiceControl");
772 row[0] = tuple.Id.Id; 772 row[0] = symbol.Id.Id;
773 row[1] = tuple.Name; 773 row[1] = symbol.Name;
774 row[2] = events; 774 row[2] = events;
775 row[3] = tuple.Arguments; 775 row[3] = symbol.Arguments;
776 if (tuple.Wait.HasValue) 776 if (symbol.Wait.HasValue)
777 { 777 {
778 row[4] = tuple.Wait.Value ? 1 : 0; 778 row[4] = symbol.Wait.Value ? 1 : 0;
779 } 779 }
780 row[5] = tuple.ComponentRef; 780 row[5] = symbol.ComponentRef;
781 } 781 }
782 782
783 private void AddServiceInstallTuple(ServiceInstallTuple tuple) 783 private void AddServiceInstallSymbol(ServiceInstallSymbol symbol)
784 { 784 {
785 var errorControl = (int)tuple.ErrorControl; 785 var errorControl = (int)symbol.ErrorControl;
786 errorControl |= tuple.Vital ? WindowsInstallerConstants.MsidbServiceInstallErrorControlVital : 0; 786 errorControl |= symbol.Vital ? WindowsInstallerConstants.MsidbServiceInstallErrorControlVital : 0;
787 787
788 var serviceType = (int)tuple.ServiceType; 788 var serviceType = (int)symbol.ServiceType;
789 serviceType |= tuple.Interactive ? WindowsInstallerConstants.MsidbServiceInstallInteractive : 0; 789 serviceType |= symbol.Interactive ? WindowsInstallerConstants.MsidbServiceInstallInteractive : 0;
790 790
791 var row = this.CreateRow(tuple, "ServiceInstall"); 791 var row = this.CreateRow(symbol, "ServiceInstall");
792 row[0] = tuple.Id.Id; 792 row[0] = symbol.Id.Id;
793 row[1] = tuple.Name; 793 row[1] = symbol.Name;
794 row[2] = tuple.DisplayName; 794 row[2] = symbol.DisplayName;
795 row[3] = serviceType; 795 row[3] = serviceType;
796 row[4] = (int)tuple.StartType; 796 row[4] = (int)symbol.StartType;
797 row[5] = errorControl; 797 row[5] = errorControl;
798 row[6] = tuple.LoadOrderGroup; 798 row[6] = symbol.LoadOrderGroup;
799 row[7] = tuple.Dependencies; 799 row[7] = symbol.Dependencies;
800 row[8] = tuple.StartName; 800 row[8] = symbol.StartName;
801 row[9] = tuple.Password; 801 row[9] = symbol.Password;
802 row[10] = tuple.Arguments; 802 row[10] = symbol.Arguments;
803 row[11] = tuple.ComponentRef; 803 row[11] = symbol.ComponentRef;
804 row[12] = tuple.Description; 804 row[12] = symbol.Description;
805 } 805 }
806 806
807 private void AddShortcutTuple(ShortcutTuple tuple) 807 private void AddShortcutSymbol(ShortcutSymbol symbol)
808 { 808 {
809 var row = this.CreateRow(tuple, "Shortcut"); 809 var row = this.CreateRow(symbol, "Shortcut");
810 row[0] = tuple.Id.Id; 810 row[0] = symbol.Id.Id;
811 row[1] = tuple.DirectoryRef; 811 row[1] = symbol.DirectoryRef;
812 row[2] = GetMsiFilenameValue(tuple.ShortName, tuple.Name); 812 row[2] = GetMsiFilenameValue(symbol.ShortName, symbol.Name);
813 row[3] = tuple.ComponentRef; 813 row[3] = symbol.ComponentRef;
814 row[4] = tuple.Target; 814 row[4] = symbol.Target;
815 row[5] = tuple.Arguments; 815 row[5] = symbol.Arguments;
816 row[6] = tuple.Description; 816 row[6] = symbol.Description;
817 row[7] = tuple.Hotkey; 817 row[7] = symbol.Hotkey;
818 row[8] = tuple.IconRef; 818 row[8] = symbol.IconRef;
819 row[9] = tuple.IconIndex; 819 row[9] = symbol.IconIndex;
820 row[10] = (int?)tuple.Show; 820 row[10] = (int?)symbol.Show;
821 row[11] = tuple.WorkingDirectory; 821 row[11] = symbol.WorkingDirectory;
822 row[12] = tuple.DisplayResourceDll; 822 row[12] = symbol.DisplayResourceDll;
823 row[13] = tuple.DisplayResourceId; 823 row[13] = symbol.DisplayResourceId;
824 row[14] = tuple.DescriptionResourceDll; 824 row[14] = symbol.DescriptionResourceDll;
825 row[15] = tuple.DescriptionResourceId; 825 row[15] = symbol.DescriptionResourceId;
826 } 826 }
827 827
828 private void AddTextStyleTuple(TextStyleTuple tuple) 828 private void AddTextStyleSymbol(TextStyleSymbol symbol)
829 { 829 {
830 var styleBits = tuple.Bold ? WindowsInstallerConstants.MsidbTextStyleStyleBitsBold : 0; 830 var styleBits = symbol.Bold ? WindowsInstallerConstants.MsidbTextStyleStyleBitsBold : 0;
831 styleBits |= tuple.Italic ? WindowsInstallerConstants.MsidbTextStyleStyleBitsItalic : 0; 831 styleBits |= symbol.Italic ? WindowsInstallerConstants.MsidbTextStyleStyleBitsItalic : 0;
832 styleBits |= tuple.Strike ? WindowsInstallerConstants.MsidbTextStyleStyleBitsStrike : 0; 832 styleBits |= symbol.Strike ? WindowsInstallerConstants.MsidbTextStyleStyleBitsStrike : 0;
833 styleBits |= tuple.Underline ? WindowsInstallerConstants.MsidbTextStyleStyleBitsUnderline : 0; 833 styleBits |= symbol.Underline ? WindowsInstallerConstants.MsidbTextStyleStyleBitsUnderline : 0;
834 834
835 long? color = null; 835 long? color = null;
836 836
837 if (tuple.Red.HasValue || tuple.Green.HasValue || tuple.Blue.HasValue) 837 if (symbol.Red.HasValue || symbol.Green.HasValue || symbol.Blue.HasValue)
838 { 838 {
839 color = tuple.Red ?? 0; 839 color = symbol.Red ?? 0;
840 color += (long)(tuple.Green ?? 0) * 256; 840 color += (long)(symbol.Green ?? 0) * 256;
841 color += (long)(tuple.Blue ?? 0) * 65536; 841 color += (long)(symbol.Blue ?? 0) * 65536;
842 } 842 }
843 843
844 var row = this.CreateRow(tuple, "TextStyle"); 844 var row = this.CreateRow(symbol, "TextStyle");
845 row[0] = tuple.Id.Id; 845 row[0] = symbol.Id.Id;
846 row[1] = tuple.FaceName; 846 row[1] = symbol.FaceName;
847 row[2] = tuple.Size; 847 row[2] = symbol.Size;
848 row[3] = color; 848 row[3] = color;
849 row[4] = styleBits == 0 ? null : (int?)styleBits; 849 row[4] = styleBits == 0 ? null : (int?)styleBits;
850 } 850 }
851 851
852 private void AddUpgradeTuple(UpgradeTuple tuple) 852 private void AddUpgradeSymbol(UpgradeSymbol symbol)
853 { 853 {
854 var row = (UpgradeRow)this.CreateRow(tuple, "Upgrade"); 854 var row = (UpgradeRow)this.CreateRow(symbol, "Upgrade");
855 row.UpgradeCode = tuple.UpgradeCode; 855 row.UpgradeCode = symbol.UpgradeCode;
856 row.VersionMin = tuple.VersionMin; 856 row.VersionMin = symbol.VersionMin;
857 row.VersionMax = tuple.VersionMax; 857 row.VersionMax = symbol.VersionMax;
858 row.Language = tuple.Language; 858 row.Language = symbol.Language;
859 row.Remove = tuple.Remove; 859 row.Remove = symbol.Remove;
860 row.ActionProperty = tuple.ActionProperty; 860 row.ActionProperty = symbol.ActionProperty;
861 861
862 var attributes = tuple.MigrateFeatures ? WindowsInstallerConstants.MsidbUpgradeAttributesMigrateFeatures : 0; 862 var attributes = symbol.MigrateFeatures ? WindowsInstallerConstants.MsidbUpgradeAttributesMigrateFeatures : 0;
863 attributes |= tuple.OnlyDetect ? WindowsInstallerConstants.MsidbUpgradeAttributesOnlyDetect : 0; 863 attributes |= symbol.OnlyDetect ? WindowsInstallerConstants.MsidbUpgradeAttributesOnlyDetect : 0;
864 attributes |= tuple.IgnoreRemoveFailures ? WindowsInstallerConstants.MsidbUpgradeAttributesIgnoreRemoveFailure : 0; 864 attributes |= symbol.IgnoreRemoveFailures ? WindowsInstallerConstants.MsidbUpgradeAttributesIgnoreRemoveFailure : 0;
865 attributes |= tuple.VersionMinInclusive ? WindowsInstallerConstants.MsidbUpgradeAttributesVersionMinInclusive : 0; 865 attributes |= symbol.VersionMinInclusive ? WindowsInstallerConstants.MsidbUpgradeAttributesVersionMinInclusive : 0;
866 attributes |= tuple.VersionMaxInclusive ? WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive : 0; 866 attributes |= symbol.VersionMaxInclusive ? WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive : 0;
867 attributes |= tuple.ExcludeLanguages ? WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive : 0; 867 attributes |= symbol.ExcludeLanguages ? WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive : 0;
868 row.Attributes = attributes; 868 row.Attributes = attributes;
869 } 869 }
870 870
871 private void AddWixActionTuple(WixActionTuple tuple) 871 private void AddWixActionSymbol(WixActionSymbol symbol)
872 { 872 {
873 // Get the table definition for the action (and ensure the proper table exists for a module). 873 // Get the table definition for the action (and ensure the proper table exists for a module).
874 string sequenceTableName = null; 874 string sequenceTableName = null;
875 switch (tuple.SequenceTable) 875 switch (symbol.SequenceTable)
876 { 876 {
877 case SequenceTable.AdminExecuteSequence: 877 case SequenceTable.AdminExecuteSequence:
878 if (OutputType.Module == this.Output.Type) 878 if (OutputType.Module == this.Output.Type)
@@ -932,60 +932,60 @@ namespace WixToolset.Core.WindowsInstaller.Bind
932 } 932 }
933 933
934 // create the action sequence row in the output 934 // create the action sequence row in the output
935 var row = this.CreateRow(tuple, sequenceTableName); 935 var row = this.CreateRow(symbol, sequenceTableName);
936 936
937 if (SectionType.Module == this.Section.Type) 937 if (SectionType.Module == this.Section.Type)
938 { 938 {
939 row[0] = tuple.Action; 939 row[0] = symbol.Action;
940 if (0 != tuple.Sequence) 940 if (0 != symbol.Sequence)
941 { 941 {
942 row[1] = tuple.Sequence; 942 row[1] = symbol.Sequence;
943 } 943 }
944 else 944 else
945 { 945 {
946 var after = (null == tuple.Before); 946 var after = (null == symbol.Before);
947 row[2] = after ? tuple.After : tuple.Before; 947 row[2] = after ? symbol.After : symbol.Before;
948 row[3] = after ? 1 : 0; 948 row[3] = after ? 1 : 0;
949 } 949 }
950 row[4] = tuple.Condition; 950 row[4] = symbol.Condition;
951 } 951 }
952 else 952 else
953 { 953 {
954 row[0] = tuple.Action; 954 row[0] = symbol.Action;
955 row[1] = tuple.Condition; 955 row[1] = symbol.Condition;
956 row[2] = tuple.Sequence; 956 row[2] = symbol.Sequence;
957 } 957 }
958 } 958 }
959 959
960 private void IndexCustomTableCellTuple(WixCustomTableCellTuple wixCustomTableCellTuple, Dictionary<string, List<WixCustomTableCellTuple>> cellsByTableAndRowId) 960 private void IndexCustomTableCellSymbol(WixCustomTableCellSymbol wixCustomTableCellSymbol, Dictionary<string, List<WixCustomTableCellSymbol>> cellsByTableAndRowId)
961 { 961 {
962 var tableAndRowId = wixCustomTableCellTuple.TableRef + "/" + wixCustomTableCellTuple.RowId; 962 var tableAndRowId = wixCustomTableCellSymbol.TableRef + "/" + wixCustomTableCellSymbol.RowId;
963 if (!cellsByTableAndRowId.TryGetValue(tableAndRowId, out var cells)) 963 if (!cellsByTableAndRowId.TryGetValue(tableAndRowId, out var cells))
964 { 964 {
965 cells = new List<WixCustomTableCellTuple>(); 965 cells = new List<WixCustomTableCellSymbol>();
966 cellsByTableAndRowId.Add(tableAndRowId, cells); 966 cellsByTableAndRowId.Add(tableAndRowId, cells);
967 } 967 }
968 968
969 cells.Add(wixCustomTableCellTuple); 969 cells.Add(wixCustomTableCellSymbol);
970 } 970 }
971 971
972 private void AddIndexedCellTuples(Dictionary<string, List<WixCustomTableCellTuple>> cellsByTableAndRowId) 972 private void AddIndexedCellSymbols(Dictionary<string, List<WixCustomTableCellSymbol>> cellsByTableAndRowId)
973 { 973 {
974 foreach (var rowOfCells in cellsByTableAndRowId.Values) 974 foreach (var rowOfCells in cellsByTableAndRowId.Values)
975 { 975 {
976 var firstCellTuple = rowOfCells[0]; 976 var firstCellSymbol = rowOfCells[0];
977 var customTableDefinition = this.TableDefinitions[firstCellTuple.TableRef]; 977 var customTableDefinition = this.TableDefinitions[firstCellSymbol.TableRef];
978 978
979 if (customTableDefinition.Unreal) 979 if (customTableDefinition.Unreal)
980 { 980 {
981 continue; 981 continue;
982 } 982 }
983 983
984 var customRow = this.CreateRow(firstCellTuple, customTableDefinition); 984 var customRow = this.CreateRow(firstCellSymbol, customTableDefinition);
985 var customRowFieldsByColumnName = customRow.Fields.ToDictionary(f => f.Column.Name); 985 var customRowFieldsByColumnName = customRow.Fields.ToDictionary(f => f.Column.Name);
986 986
987#if TODO // SectionId seems like a good thing to preserve. 987#if TODO // SectionId seems like a good thing to preserve.
988 customRow.SectionId = tuple.SectionId; 988 customRow.SectionId = symbol.SectionId;
989#endif 989#endif
990 foreach (var cell in rowOfCells) 990 foreach (var cell in rowOfCells)
991 { 991 {
@@ -1037,23 +1037,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1037 { 1037 {
1038 if (!customTableDefinition.Columns[i].Nullable && (null == customRow.Fields[i].Data || 0 == customRow.Fields[i].Data.ToString().Length)) 1038 if (!customTableDefinition.Columns[i].Nullable && (null == customRow.Fields[i].Data || 0 == customRow.Fields[i].Data.ToString().Length))
1039 { 1039 {
1040 this.Messaging.Write(ErrorMessages.NoDataForColumn(firstCellTuple.SourceLineNumbers, customTableDefinition.Columns[i].Name, customTableDefinition.Name)); 1040 this.Messaging.Write(ErrorMessages.NoDataForColumn(firstCellSymbol.SourceLineNumbers, customTableDefinition.Columns[i].Name, customTableDefinition.Name));
1041 } 1041 }
1042 } 1042 }
1043 } 1043 }
1044 } 1044 }
1045 1045
1046 private void AddWixEnsureTableTuple(WixEnsureTableTuple tuple) 1046 private void AddWixEnsureTableSymbol(WixEnsureTableSymbol symbol)
1047 { 1047 {
1048 var tableDefinition = this.TableDefinitions[tuple.Table]; 1048 var tableDefinition = this.TableDefinitions[symbol.Table];
1049 this.Output.EnsureTable(tableDefinition); 1049 this.Output.EnsureTable(tableDefinition);
1050 } 1050 }
1051 1051
1052 private bool AddTupleFromExtension(IntermediateTuple tuple) 1052 private bool AddSymbolFromExtension(IntermediateSymbol symbol)
1053 { 1053 {
1054 foreach (var extension in this.BackendExtensions) 1054 foreach (var extension in this.BackendExtensions)
1055 { 1055 {
1056 if (extension.TryAddTupleToOutput(this.Section, tuple, this.Output, this.TableDefinitions)) 1056 if (extension.TryAddSymbolToOutput(this.Section, symbol, this.Output, this.TableDefinitions))
1057 { 1057 {
1058 return true; 1058 return true;
1059 } 1059 }
@@ -1062,8 +1062,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1062 return false; 1062 return false;
1063 } 1063 }
1064 1064
1065 private bool AddTupleDefaultly(IntermediateTuple tuple) => 1065 private bool AddSymbolDefaultly(IntermediateSymbol symbol) =>
1066 this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(this.Section, tuple, this.Output, this.TableDefinitions); 1066 this.BackendHelper.TryAddSymbolToOutputMatchingTableDefinitions(this.Section, symbol, this.Output, this.TableDefinitions);
1067 1067
1068 private static OutputType SectionTypeToOutputType(SectionType type) 1068 private static OutputType SectionTypeToOutputType(SectionType type)
1069 { 1069 {
@@ -1085,11 +1085,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
1085 } 1085 }
1086 } 1086 }
1087 1087
1088 private Row CreateRow(IntermediateTuple tuple, string tableDefinitionName) => 1088 private Row CreateRow(IntermediateSymbol symbol, string tableDefinitionName) =>
1089 this.CreateRow(tuple, this.TableDefinitions[tableDefinitionName]); 1089 this.CreateRow(symbol, this.TableDefinitions[tableDefinitionName]);
1090 1090
1091 private Row CreateRow(IntermediateTuple tuple, TableDefinition tableDefinition) => 1091 private Row CreateRow(IntermediateSymbol symbol, TableDefinition tableDefinition) =>
1092 this.BackendHelper.CreateRow(this.Section, tuple, this.Output, tableDefinition); 1092 this.BackendHelper.CreateRow(this.Section, symbol, this.Output, tableDefinition);
1093 1093
1094 private static string GetMsiFilenameValue(string shortName, string longName) 1094 private static string GetMsiFilenameValue(string shortName, string longName)
1095 { 1095 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreatePatchTransformsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreatePatchTransformsCommand.cs
index f65f885b..76e6dd56 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreatePatchTransformsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreatePatchTransformsCommand.cs
@@ -9,7 +9,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
9 using WixToolset.Core.WindowsInstaller.Msi; 9 using WixToolset.Core.WindowsInstaller.Msi;
10 using WixToolset.Core.WindowsInstaller.Unbind; 10 using WixToolset.Core.WindowsInstaller.Unbind;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using WixToolset.Data.WindowsInstaller; 13 using WixToolset.Data.WindowsInstaller;
14 using WixToolset.Extensibility.Services; 14 using WixToolset.Extensibility.Services;
15 15
@@ -34,16 +34,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
34 { 34 {
35 var patchTransforms = new List<PatchTransform>(); 35 var patchTransforms = new List<PatchTransform>();
36 36
37 var tuples = this.Intermediate.Sections.SelectMany(s => s.Tuples).OfType<WixPatchBaselineTuple>(); 37 var symbols = this.Intermediate.Sections.SelectMany(s => s.Symbols).OfType<WixPatchBaselineSymbol>();
38 38
39 foreach (var tuple in tuples) 39 foreach (var symbol in symbols)
40 { 40 {
41 WindowsInstallerData transform; 41 WindowsInstallerData transform;
42 42
43 if (tuple.TransformFile is null) 43 if (symbol.TransformFile is null)
44 { 44 {
45 var baselineData = this.GetData(tuple.BaselineFile.Path); 45 var baselineData = this.GetData(symbol.BaselineFile.Path);
46 var updateData = this.GetData(tuple.UpdateFile.Path); 46 var updateData = this.GetData(symbol.UpdateFile.Path);
47 47
48 var command = new GenerateTransformCommand(this.Messaging, baselineData, updateData, preserveUnchangedRows: true, showPedanticMessages: false); 48 var command = new GenerateTransformCommand(this.Messaging, baselineData, updateData, preserveUnchangedRows: true, showPedanticMessages: false);
49 transform = command.Execute(); 49 transform = command.Execute();
@@ -52,11 +52,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
52 { 52 {
53 var exportBasePath = Path.Combine(this.IntermediateFolder, "_trans"); // TODO: come up with a better path. 53 var exportBasePath = Path.Combine(this.IntermediateFolder, "_trans"); // TODO: come up with a better path.
54 54
55 var command = new UnbindTransformCommand(this.Messaging, tuple.TransformFile.Path, exportBasePath, this.IntermediateFolder); 55 var command = new UnbindTransformCommand(this.Messaging, symbol.TransformFile.Path, exportBasePath, this.IntermediateFolder);
56 transform = command.Execute(); 56 transform = command.Execute();
57 } 57 }
58 58
59 patchTransforms.Add(new PatchTransform(tuple.Id.Id, transform)); 59 patchTransforms.Add(new PatchTransform(symbol.Id.Id, transform));
60 } 60 }
61 61
62 this.PatchTransforms = patchTransforms; 62 this.PatchTransforms = patchTransforms;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs
index 5b4fe9e5..0a042f48 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/CreateSpecialPropertiesCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 10
11 internal class CreateSpecialPropertiesCommand 11 internal class CreateSpecialPropertiesCommand
12 { 12 {
@@ -24,7 +24,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
24 var secureProperties = new SortedSet<string>(); 24 var secureProperties = new SortedSet<string>();
25 var hiddenProperties = new SortedSet<string>(); 25 var hiddenProperties = new SortedSet<string>();
26 26
27 foreach (var wixPropertyRow in this.Section.Tuples.OfType<WixPropertyTuple>()) 27 foreach (var wixPropertyRow in this.Section.Symbols.OfType<WixPropertySymbol>())
28 { 28 {
29 if (wixPropertyRow.Admin) 29 if (wixPropertyRow.Admin)
30 { 30 {
@@ -43,7 +43,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
43 } 43 }
44 44
45 // Hide properties for in-script custom actions that have HideTarget set. 45 // Hide properties for in-script custom actions that have HideTarget set.
46 var hideTargetCustomActions = this.Section.Tuples.OfType<CustomActionTuple>().Where( 46 var hideTargetCustomActions = this.Section.Symbols.OfType<CustomActionSymbol>().Where(
47 ca => ca.Hidden 47 ca => ca.Hidden
48 && (ca.ExecutionType == CustomActionExecutionType.Deferred 48 && (ca.ExecutionType == CustomActionExecutionType.Deferred
49 || ca.ExecutionType == CustomActionExecutionType.Commit 49 || ca.ExecutionType == CustomActionExecutionType.Commit
@@ -52,12 +52,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
52 hiddenProperties.UnionWith(hideTargetCustomActions); 52 hiddenProperties.UnionWith(hideTargetCustomActions);
53 53
54 // Ensure upgrade action properties are secure. 54 // Ensure upgrade action properties are secure.
55 var actionProperties = this.Section.Tuples.OfType<UpgradeTuple>().Select(u => u.ActionProperty); 55 var actionProperties = this.Section.Symbols.OfType<UpgradeSymbol>().Select(u => u.ActionProperty);
56 secureProperties.UnionWith(actionProperties); 56 secureProperties.UnionWith(actionProperties);
57 57
58 if (0 < adminProperties.Count) 58 if (0 < adminProperties.Count)
59 { 59 {
60 this.Section.AddTuple(new PropertyTuple(null, new Identifier(AccessModifier.Private, "AdminProperties")) 60 this.Section.AddSymbol(new PropertySymbol(null, new Identifier(AccessModifier.Private, "AdminProperties"))
61 { 61 {
62 Value = String.Join(";", adminProperties), 62 Value = String.Join(";", adminProperties),
63 }); 63 });
@@ -65,7 +65,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
65 65
66 if (0 < secureProperties.Count) 66 if (0 < secureProperties.Count)
67 { 67 {
68 this.Section.AddTuple(new PropertyTuple(null, new Identifier(AccessModifier.Private, "SecureCustomProperties")) 68 this.Section.AddSymbol(new PropertySymbol(null, new Identifier(AccessModifier.Private, "SecureCustomProperties"))
69 { 69 {
70 Value = String.Join(";", secureProperties), 70 Value = String.Join(";", secureProperties),
71 }); 71 });
@@ -73,7 +73,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
73 73
74 if (0 < hiddenProperties.Count) 74 if (0 < hiddenProperties.Count)
75 { 75 {
76 this.Section.AddTuple(new PropertyTuple(null, new Identifier(AccessModifier.Private, "MsiHiddenProperties")) 76 this.Section.AddSymbol(new PropertySymbol(null, new Identifier(AccessModifier.Private, "MsiHiddenProperties"))
77 { 77 {
78 Value = String.Join(";", hiddenProperties) 78 Value = String.Join(";", hiddenProperties)
79 }); 79 });
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
index 792a13a9..37bda235 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ExtractMergeModuleFilesCommand.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Core.Native; 13 using WixToolset.Core.Native;
14 using WixToolset.Core.Bind; 14 using WixToolset.Core.Bind;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using WixToolset.Extensibility.Services; 16 using WixToolset.Extensibility.Services;
17 using WixToolset.Core.WindowsInstaller.Msi; 17 using WixToolset.Core.WindowsInstaller.Msi;
18 18
@@ -21,10 +21,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
21 /// </summary> 21 /// </summary>
22 internal class ExtractMergeModuleFilesCommand 22 internal class ExtractMergeModuleFilesCommand
23 { 23 {
24 public ExtractMergeModuleFilesCommand(IMessaging messaging, IEnumerable<WixMergeTuple> wixMergeTuples, IEnumerable<FileFacade> fileFacades, int installerVersion, string intermediateFolder, bool suppressLayout) 24 public ExtractMergeModuleFilesCommand(IMessaging messaging, IEnumerable<WixMergeSymbol> wixMergeSymbols, IEnumerable<FileFacade> fileFacades, int installerVersion, string intermediateFolder, bool suppressLayout)
25 { 25 {
26 this.Messaging = messaging; 26 this.Messaging = messaging;
27 this.WixMergeTuples = wixMergeTuples; 27 this.WixMergeSymbols = wixMergeSymbols;
28 this.FileFacades = fileFacades; 28 this.FileFacades = fileFacades;
29 this.OutputInstallerVersion = installerVersion; 29 this.OutputInstallerVersion = installerVersion;
30 this.IntermediateFolder = intermediateFolder; 30 this.IntermediateFolder = intermediateFolder;
@@ -33,7 +33,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
33 33
34 private IMessaging Messaging { get; } 34 private IMessaging Messaging { get; }
35 35
36 private IEnumerable<WixMergeTuple> WixMergeTuples { get; } 36 private IEnumerable<WixMergeSymbol> WixMergeSymbols { get; }
37 37
38 private IEnumerable<FileFacade> FileFacades { get; } 38 private IEnumerable<FileFacade> FileFacades { get; }
39 39
@@ -61,7 +61,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
61 // is a lot more costly for the common cases. 61 // is a lot more costly for the common cases.
62 var indexedFileFacades = this.FileFacades.ToDictionary(f => f.Id, StringComparer.Ordinal); 62 var indexedFileFacades = this.FileFacades.ToDictionary(f => f.Id, StringComparer.Ordinal);
63 63
64 foreach (var wixMergeRow in this.WixMergeTuples) 64 foreach (var wixMergeRow in this.WixMergeSymbols)
65 { 65 {
66 var containsFiles = this.CreateFacadesForMergeModuleFiles(wixMergeRow, mergeModulesFileFacades, indexedFileFacades); 66 var containsFiles = this.CreateFacadesForMergeModuleFiles(wixMergeRow, mergeModulesFileFacades, indexedFileFacades);
67 67
@@ -75,7 +75,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
75 this.MergeModulesFileFacades = mergeModulesFileFacades; 75 this.MergeModulesFileFacades = mergeModulesFileFacades;
76 } 76 }
77 77
78 private bool CreateFacadesForMergeModuleFiles(WixMergeTuple wixMergeRow, List<FileFacade> mergeModulesFileFacades, Dictionary<string, FileFacade> indexedFileFacades) 78 private bool CreateFacadesForMergeModuleFiles(WixMergeSymbol wixMergeRow, List<FileFacade> mergeModulesFileFacades, Dictionary<string, FileFacade> indexedFileFacades)
79 { 79 {
80 var containsFiles = false; 80 var containsFiles = false;
81 81
@@ -96,13 +96,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
96 // NOTE: this is very tricky - the merge module file rows are not added to the 96 // NOTE: this is very tricky - the merge module file rows are not added to the
97 // file table because they should not be created via idt import. Instead, these 97 // file table because they should not be created via idt import. Instead, these
98 // rows are created by merging in the actual modules. 98 // rows are created by merging in the actual modules.
99 var fileTuple = new FileTuple(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1])); 99 var fileSymbol = new FileSymbol(wixMergeRow.SourceLineNumbers, new Identifier(AccessModifier.Private, record[1]));
100 fileTuple.Attributes = wixMergeRow.FileAttributes; 100 fileSymbol.Attributes = wixMergeRow.FileAttributes;
101 fileTuple.DirectoryRef = record[2]; 101 fileSymbol.DirectoryRef = record[2];
102 fileTuple.DiskId = wixMergeRow.DiskId; 102 fileSymbol.DiskId = wixMergeRow.DiskId;
103 fileTuple.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) }; 103 fileSymbol.Source = new IntermediateFieldPathValue { Path = Path.Combine(this.IntermediateFolder, wixMergeRow.Id.Id, record[1]) };
104 104
105 var mergeModuleFileFacade = new FileFacade(true, fileTuple); 105 var mergeModuleFileFacade = new FileFacade(true, fileSymbol);
106 106
107 // If case-sensitive collision with another merge module or a user-authored file identifier. 107 // If case-sensitive collision with another merge module or a user-authored file identifier.
108 if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.Id, out var collidingFacade)) 108 if (indexedFileFacades.TryGetValue(mergeModuleFileFacade.Id, out var collidingFacade))
@@ -159,7 +159,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
159 return containsFiles; 159 return containsFiles;
160 } 160 }
161 161
162 private void ExtractFilesFromMergeModule(IMsmMerge2 merge, WixMergeTuple wixMergeRow) 162 private void ExtractFilesFromMergeModule(IMsmMerge2 merge, WixMergeSymbol wixMergeRow)
163 { 163 {
164 var moduleOpen = false; 164 var moduleOpen = false;
165 short mergeLanguage; 165 short mergeLanguage;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/GenerateTransformCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/GenerateTransformCommand.cs
index fc713954..121ffb1b 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/GenerateTransformCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/GenerateTransformCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller
7 using System.Globalization; 7 using System.Globalization;
8 using WixToolset.Core.WindowsInstaller.Msi; 8 using WixToolset.Core.WindowsInstaller.Msi;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Data.WindowsInstaller.Rows; 12 using WixToolset.Data.WindowsInstaller.Rows;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/GetFileFacadesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/GetFileFacadesCommand.cs
index 55171da4..c918e866 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/GetFileFacadesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/GetFileFacadesCommand.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 12
13 internal class GetFileFacadesCommand 13 internal class GetFileFacadesCommand
14 { 14 {
@@ -25,10 +25,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
25 { 25 {
26 var facades = new List<FileFacade>(); 26 var facades = new List<FileFacade>();
27 27
28 var assemblyFile = this.Section.Tuples.OfType<AssemblyTuple>().ToDictionary(t => t.Id.Id); 28 var assemblyFile = this.Section.Symbols.OfType<AssemblySymbol>().ToDictionary(t => t.Id.Id);
29 //var deltaPatchFiles = this.Section.Tuples.OfType<WixDeltaPatchFileTuple>().ToDictionary(t => t.Id.Id); 29 //var deltaPatchFiles = this.Section.Symbols.OfType<WixDeltaPatchFileSymbol>().ToDictionary(t => t.Id.Id);
30 30
31 foreach (var file in this.Section.Tuples.OfType<FileTuple>()) 31 foreach (var file in this.Section.Symbols.OfType<FileSymbol>())
32 { 32 {
33 assemblyFile.TryGetValue(file.Id.Id, out var assembly); 33 assemblyFile.TryGetValue(file.Id.Id, out var assembly);
34 34
@@ -49,13 +49,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
49 /// <summary> 49 /// <summary>
50 /// Merge data from the WixPatchSymbolPaths rows into the WixDeltaPatchFile rows. 50 /// Merge data from the WixPatchSymbolPaths rows into the WixDeltaPatchFile rows.
51 /// </summary> 51 /// </summary>
52 public void ResolveDeltaPatchSymbolPaths(Dictionary<string, WixDeltaPatchFileTuple> deltaPatchFiles, IEnumerable<FileFacade> facades) 52 public void ResolveDeltaPatchSymbolPaths(Dictionary<string, WixDeltaPatchFileSymbol> deltaPatchFiles, IEnumerable<FileFacade> facades)
53 { 53 {
54 ILookup<string, FileFacade> filesByComponent = null; 54 ILookup<string, FileFacade> filesByComponent = null;
55 ILookup<string, FileFacade> filesByDirectory = null; 55 ILookup<string, FileFacade> filesByDirectory = null;
56 ILookup<string, FileFacade> filesByDiskId = null; 56 ILookup<string, FileFacade> filesByDiskId = null;
57 57
58 foreach (var row in this.Section.Tuples.OfType<WixDeltaPatchSymbolPathsTuple>().OrderBy(r => r.SymbolType)) 58 foreach (var row in this.Section.Symbols.OfType<WixDeltaPatchSymbolPathsSymbol>().OrderBy(r => r.SymbolType))
59 { 59 {
60 switch (row.SymbolType) 60 switch (row.SymbolType)
61 { 61 {
@@ -119,7 +119,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
119 /// <param name="row">Row from the WixPatchSymbolsPaths table.</param> 119 /// <param name="row">Row from the WixPatchSymbolsPaths table.</param>
120 /// <param name="file">FileRow into which to set symbol information.</param> 120 /// <param name="file">FileRow into which to set symbol information.</param>
121 /// <comment>This includes PreviousData as well.</comment> 121 /// <comment>This includes PreviousData as well.</comment>
122 private void MergeSymbolPaths(WixDeltaPatchSymbolPathsTuple row, WixDeltaPatchFileTuple file) 122 private void MergeSymbolPaths(WixDeltaPatchSymbolPathsSymbol row, WixDeltaPatchFileSymbol file)
123 { 123 {
124 if (file.SymbolPaths is null) 124 if (file.SymbolPaths is null)
125 { 125 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs
index 0312ab44..2eb95bc5 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.Globalization; 7 using System.Globalization;
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -32,13 +32,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
32 public TableDefinitionCollection Execute() 32 public TableDefinitionCollection Execute()
33 { 33 {
34 var tableDefinitions = new TableDefinitionCollection(WindowsInstallerTableDefinitions.All); 34 var tableDefinitions = new TableDefinitionCollection(WindowsInstallerTableDefinitions.All);
35 var customColumnsById = this.Section.Tuples.OfType<WixCustomTableColumnTuple>().ToDictionary(t => t.Id.Id); 35 var customColumnsById = this.Section.Symbols.OfType<WixCustomTableColumnSymbol>().ToDictionary(t => t.Id.Id);
36 36
37 if (customColumnsById.Any()) 37 if (customColumnsById.Any())
38 { 38 {
39 foreach (var tuple in this.Section.Tuples.OfType<WixCustomTableTuple>()) 39 foreach (var symbol in this.Section.Symbols.OfType<WixCustomTableSymbol>())
40 { 40 {
41 var customTableDefinition = this.CreateCustomTable(tuple, customColumnsById); 41 var customTableDefinition = this.CreateCustomTable(symbol, customColumnsById);
42 tableDefinitions.Add(customTableDefinition); 42 tableDefinitions.Add(customTableDefinition);
43 } 43 }
44 } 44 }
@@ -60,14 +60,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
60 return this.TableDefinitions; 60 return this.TableDefinitions;
61 } 61 }
62 62
63 private TableDefinition CreateCustomTable(WixCustomTableTuple tuple, Dictionary<string, WixCustomTableColumnTuple> customColumnsById) 63 private TableDefinition CreateCustomTable(WixCustomTableSymbol symbol, Dictionary<string, WixCustomTableColumnSymbol> customColumnsById)
64 { 64 {
65 var columnNames = tuple.ColumnNamesSeparated; 65 var columnNames = symbol.ColumnNamesSeparated;
66 var columns = new List<ColumnDefinition>(columnNames.Length); 66 var columns = new List<ColumnDefinition>(columnNames.Length);
67 67
68 foreach (var name in columnNames) 68 foreach (var name in columnNames)
69 { 69 {
70 var column = customColumnsById[tuple.Id.Id + "/" + name]; 70 var column = customColumnsById[symbol.Id.Id + "/" + name];
71 71
72 var type = ColumnType.Unknown; 72 var type = ColumnType.Unknown;
73 73
@@ -208,7 +208,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
208 columns.Add(columnDefinition); 208 columns.Add(columnDefinition);
209 } 209 }
210 210
211 var customTable = new TableDefinition(tuple.Id.Id, null, columns, tuple.Unreal); 211 var customTable = new TableDefinition(symbol.Id.Id, null, columns, symbol.Unreal);
212 return customTable; 212 return customTable;
213 } 213 }
214 } 214 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
index 1f85a33f..80684e7c 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
@@ -13,7 +13,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
13 using WixToolset.Core.Native; 13 using WixToolset.Core.Native;
14 using WixToolset.Core.WindowsInstaller.Msi; 14 using WixToolset.Core.WindowsInstaller.Msi;
15 using WixToolset.Data; 15 using WixToolset.Data;
16 using WixToolset.Data.Tuples; 16 using WixToolset.Data.Symbols;
17 using WixToolset.Data.WindowsInstaller; 17 using WixToolset.Data.WindowsInstaller;
18 using WixToolset.Extensibility.Services; 18 using WixToolset.Extensibility.Services;
19 19
@@ -46,8 +46,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
46 46
47 public void Execute() 47 public void Execute()
48 { 48 {
49 var wixMergeTuples = this.Section.Tuples.OfType<WixMergeTuple>().ToList(); 49 var wixMergeSymbols = this.Section.Symbols.OfType<WixMergeSymbol>().ToList();
50 if (!wixMergeTuples.Any()) 50 if (!wixMergeSymbols.Any())
51 { 51 {
52 return; 52 return;
53 } 53 }
@@ -69,10 +69,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
69 merge.OpenDatabase(this.OutputPath); 69 merge.OpenDatabase(this.OutputPath);
70 databaseOpen = true; 70 databaseOpen = true;
71 71
72 var featureModulesByMergeId = this.Section.Tuples.OfType<WixFeatureModulesTuple>().GroupBy(t => t.WixMergeRef).ToDictionary(g => g.Key); 72 var featureModulesByMergeId = this.Section.Symbols.OfType<WixFeatureModulesSymbol>().GroupBy(t => t.WixMergeRef).ToDictionary(g => g.Key);
73 73
74 // process all the merge rows 74 // process all the merge rows
75 foreach (var wixMergeRow in wixMergeTuples) 75 foreach (var wixMergeRow in wixMergeSymbols)
76 { 76 {
77 var moduleOpen = false; 77 var moduleOpen = false;
78 78
@@ -217,7 +217,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
217 using (var db = new Database(this.OutputPath, OpenDatabase.Direct)) 217 using (var db = new Database(this.OutputPath, OpenDatabase.Direct))
218 { 218 {
219 // Suppress individual actions. 219 // Suppress individual actions.
220 foreach (var suppressAction in this.Section.Tuples.OfType<WixSuppressActionTuple>()) 220 foreach (var suppressAction in this.Section.Symbols.OfType<WixSuppressActionSymbol>())
221 { 221 {
222 var tableName = suppressAction.SequenceTable.WindowsInstallerTableName(); 222 var tableName = suppressAction.SequenceTable.WindowsInstallerTableName();
223 if (db.TableExists(tableName)) 223 if (db.TableExists(tableName))
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
index 8b459d69..66ca502d 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ModularizeCommand.cs
@@ -10,18 +10,18 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using System.Text; 10 using System.Text;
11 using System.Text.RegularExpressions; 11 using System.Text.RegularExpressions;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 15
16 internal class ModularizeCommand 16 internal class ModularizeCommand
17 { 17 {
18 public ModularizeCommand(WindowsInstallerData output, string modularizationSuffix, IEnumerable<WixSuppressModularizationTuple> suppressTuples) 18 public ModularizeCommand(WindowsInstallerData output, string modularizationSuffix, IEnumerable<WixSuppressModularizationSymbol> suppressSymbols)
19 { 19 {
20 this.Output = output; 20 this.Output = output;
21 this.ModularizationSuffix = modularizationSuffix; 21 this.ModularizationSuffix = modularizationSuffix;
22 22
23 // Gather all the unique suppress modularization identifiers. 23 // Gather all the unique suppress modularization identifiers.
24 this.SuppressModularizationIdentifiers = new HashSet<string>(suppressTuples.Select(s => s.Id.Id)); 24 this.SuppressModularizationIdentifiers = new HashSet<string>(suppressSymbols.Select(s => s.Id.Id));
25 } 25 }
26 26
27 private WindowsInstallerData Output { get; } 27 private WindowsInstallerData Output { get; }
@@ -144,17 +144,17 @@ namespace WixToolset.Core.WindowsInstaller.Bind
144 { 144 {
145 Debug.Assert(ColumnModularizeType.Condition == modularizeType); 145 Debug.Assert(ColumnModularizeType.Condition == modularizeType);
146 146
147 // This heinous looking regular expression is actually quite an elegant way 147 // This heinous looking regular expression is actually quite an elegant way
148 // to shred the entire condition into the identifiers that need to be 148 // to shred the entire condition into the identifiers that need to be
149 // modularized. Let's break it down piece by piece: 149 // modularized. Let's break it down piece by piece:
150 // 150 //
151 // 1. Look for the operators: NOT, EQV, XOR, OR, AND, IMP (plus a space). Note that the 151 // 1. Look for the operators: NOT, EQV, XOR, OR, AND, IMP (plus a space). Note that the
152 // regular expression is case insensitive so we don't have to worry about 152 // regular expression is case insensitive so we don't have to worry about
153 // all the permutations of these strings. 153 // all the permutations of these strings.
154 // 2. Look for quoted strings. Quoted strings are just text and are ignored 154 // 2. Look for quoted strings. Quoted strings are just text and are ignored
155 // outright. 155 // outright.
156 // 3. Look for environment variables. These look like identifiers we might 156 // 3. Look for environment variables. These look like identifiers we might
157 // otherwise be interested in but start with a percent sign. Like quoted 157 // otherwise be interested in but start with a percent sign. Like quoted
158 // strings these enviroment variable references are ignored outright. 158 // strings these enviroment variable references are ignored outright.
159 // 4. Match all identifiers that are things that need to be modularized. Note 159 // 4. Match all identifiers that are things that need to be modularized. Note
160 // the special characters (!, $, ?, &) that denote Component and Feature states. 160 // the special characters (!, $, ?, &) that denote Component and Feature states.
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
index 13d47215..ab5ebd4b 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ProcessUncompressedFilesCommand.cs
@@ -9,7 +9,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
9 using WixToolset.Core.Bind; 9 using WixToolset.Core.Bind;
10 using WixToolset.Core.WindowsInstaller.Msi; 10 using WixToolset.Core.WindowsInstaller.Msi;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using WixToolset.Extensibility.Data; 13 using WixToolset.Extensibility.Data;
14 using WixToolset.Extensibility.Services; 14 using WixToolset.Extensibility.Services;
15 15
@@ -41,7 +41,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
41 41
42 public bool LongNamesInImage { private get; set; } 42 public bool LongNamesInImage { private get; set; }
43 43
44 public Func<MediaTuple, string, string, string> ResolveMedia { private get; set; } 44 public Func<MediaSymbol, string, string, string> ResolveMedia { private get; set; }
45 45
46 public IEnumerable<IFileTransfer> FileTransfers { get; private set; } 46 public IEnumerable<IFileTransfer> FileTransfers { get; private set; }
47 47
@@ -55,7 +55,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
55 55
56 var directories = new Dictionary<string, IResolvedDirectory>(); 56 var directories = new Dictionary<string, IResolvedDirectory>();
57 57
58 var mediaRows = this.Section.Tuples.OfType<MediaTuple>().ToDictionary(t => t.DiskId); 58 var mediaRows = this.Section.Symbols.OfType<MediaSymbol>().ToDictionary(t => t.DiskId);
59 59
60 using (var db = new Database(this.DatabasePath, OpenDatabase.ReadOnly)) 60 using (var db = new Database(this.DatabasePath, OpenDatabase.ReadOnly))
61 { 61 {
@@ -78,11 +78,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
78 // for each file in the array of uncompressed files 78 // for each file in the array of uncompressed files
79 foreach (FileFacade facade in this.FileFacades) 79 foreach (FileFacade facade in this.FileFacades)
80 { 80 {
81 var mediaTuple = mediaRows[facade.DiskId]; 81 var mediaSymbol = mediaRows[facade.DiskId];
82 string relativeFileLayoutPath = null; 82 string relativeFileLayoutPath = null;
83 string mediaLayoutFolder = mediaTuple.Layout; 83 string mediaLayoutFolder = mediaSymbol.Layout;
84 84
85 var mediaLayoutDirectory = this.ResolveMedia(mediaTuple, mediaLayoutFolder, this.LayoutDirectory); 85 var mediaLayoutDirectory = this.ResolveMedia(mediaSymbol, mediaLayoutFolder, this.LayoutDirectory);
86 86
87 // setup up the query record and find the appropriate file in the 87 // setup up the query record and find the appropriate file in the
88 // previously executed file view 88 // previously executed file view
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
index a5055209..7f43da9a 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
@@ -7,12 +7,12 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.Globalization; 7 using System.Globalization;
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
13 13
14 /// <summary> 14 /// <summary>
15 /// Set sequence numbers for all the actions and create tuples in the output object. 15 /// Set sequence numbers for all the actions and create symbols in the output object.
16 /// </summary> 16 /// </summary>
17 internal class SequenceActionsCommand 17 internal class SequenceActionsCommand
18 { 18 {
@@ -32,38 +32,38 @@ namespace WixToolset.Core.WindowsInstaller.Bind
32 32
33 public void Execute() 33 public void Execute()
34 { 34 {
35 var requiredActionTuples = new Dictionary<string, WixActionTuple>(); 35 var requiredActionSymbols = new Dictionary<string, WixActionSymbol>();
36 36
37 // Get the standard actions required based on tuples in the section. 37 // Get the standard actions required based on symbols in the section.
38 var overridableActionTuples = this.GetRequiredStandardActions(); 38 var overridableActionSymbols = this.GetRequiredStandardActions();
39 39
40 // Index all the action tuples and look for collisions. 40 // Index all the action symbols and look for collisions.
41 foreach (var actionTuple in this.Section.Tuples.OfType<WixActionTuple>()) 41 foreach (var actionSymbol in this.Section.Symbols.OfType<WixActionSymbol>())
42 { 42 {
43 if (actionTuple.Overridable) // overridable action 43 if (actionSymbol.Overridable) // overridable action
44 { 44 {
45 if (overridableActionTuples.TryGetValue(actionTuple.Id.Id, out var collidingActionTuple)) 45 if (overridableActionSymbols.TryGetValue(actionSymbol.Id.Id, out var collidingActionSymbol))
46 { 46 {
47 this.Messaging.Write(ErrorMessages.OverridableActionCollision(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 47 this.Messaging.Write(ErrorMessages.OverridableActionCollision(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
48 if (null != collidingActionTuple.SourceLineNumbers) 48 if (null != collidingActionSymbol.SourceLineNumbers)
49 { 49 {
50 this.Messaging.Write(ErrorMessages.OverridableActionCollision2(collidingActionTuple.SourceLineNumbers)); 50 this.Messaging.Write(ErrorMessages.OverridableActionCollision2(collidingActionSymbol.SourceLineNumbers));
51 } 51 }
52 } 52 }
53 else 53 else
54 { 54 {
55 overridableActionTuples.Add(actionTuple.Id.Id, actionTuple); 55 overridableActionSymbols.Add(actionSymbol.Id.Id, actionSymbol);
56 } 56 }
57 } 57 }
58 else // unsequenced or sequenced action. 58 else // unsequenced or sequenced action.
59 { 59 {
60 // Unsequenced action (allowed for certain standard actions). 60 // Unsequenced action (allowed for certain standard actions).
61 if (null == actionTuple.Before && null == actionTuple.After && !actionTuple.Sequence.HasValue) 61 if (null == actionSymbol.Before && null == actionSymbol.After && !actionSymbol.Sequence.HasValue)
62 { 62 {
63 if (WindowsInstallerStandard.TryGetStandardAction(actionTuple.Id.Id, out var standardAction)) 63 if (WindowsInstallerStandard.TryGetStandardAction(actionSymbol.Id.Id, out var standardAction))
64 { 64 {
65 // Populate the sequence from the standard action 65 // Populate the sequence from the standard action
66 actionTuple.Sequence = standardAction.Sequence; 66 actionSymbol.Sequence = standardAction.Sequence;
67 } 67 }
68 else // not a supported unscheduled action. 68 else // not a supported unscheduled action.
69 { 69 {
@@ -71,109 +71,109 @@ namespace WixToolset.Core.WindowsInstaller.Bind
71 } 71 }
72 } 72 }
73 73
74 if (requiredActionTuples.TryGetValue(actionTuple.Id.Id, out var collidingActionTuple)) 74 if (requiredActionSymbols.TryGetValue(actionSymbol.Id.Id, out var collidingActionSymbol))
75 { 75 {
76 this.Messaging.Write(ErrorMessages.ActionCollision(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 76 this.Messaging.Write(ErrorMessages.ActionCollision(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
77 if (null != collidingActionTuple.SourceLineNumbers) 77 if (null != collidingActionSymbol.SourceLineNumbers)
78 { 78 {
79 this.Messaging.Write(ErrorMessages.ActionCollision2(collidingActionTuple.SourceLineNumbers)); 79 this.Messaging.Write(ErrorMessages.ActionCollision2(collidingActionSymbol.SourceLineNumbers));
80 } 80 }
81 } 81 }
82 else 82 else
83 { 83 {
84 requiredActionTuples.Add(actionTuple.Id.Id, actionTuple); 84 requiredActionSymbols.Add(actionSymbol.Id.Id, actionSymbol);
85 } 85 }
86 } 86 }
87 } 87 }
88 88
89 // Add the overridable action tuples that are not overridden to the required action tuples. 89 // Add the overridable action symbols that are not overridden to the required action symbols.
90 foreach (var actionTuple in overridableActionTuples.Values) 90 foreach (var actionSymbol in overridableActionSymbols.Values)
91 { 91 {
92 if (!requiredActionTuples.ContainsKey(actionTuple.Id.Id)) 92 if (!requiredActionSymbols.ContainsKey(actionSymbol.Id.Id))
93 { 93 {
94 requiredActionTuples.Add(actionTuple.Id.Id, actionTuple); 94 requiredActionSymbols.Add(actionSymbol.Id.Id, actionSymbol);
95 } 95 }
96 } 96 }
97 97
98 // Suppress the required actions that are overridable. 98 // Suppress the required actions that are overridable.
99 foreach (var suppressActionTuple in this.Section.Tuples.OfType<WixSuppressActionTuple>()) 99 foreach (var suppressActionSymbol in this.Section.Symbols.OfType<WixSuppressActionSymbol>())
100 { 100 {
101 var key = suppressActionTuple.Id.Id; 101 var key = suppressActionSymbol.Id.Id;
102 102
103 // If there is an overridable tuple to suppress; suppress it. There is no warning if there 103 // If there is an overridable symbol to suppress; suppress it. There is no warning if there
104 // is no action to suppress because the action may be suppressed from a merge module in 104 // is no action to suppress because the action may be suppressed from a merge module in
105 // the binder. 105 // the binder.
106 if (requiredActionTuples.TryGetValue(key, out var requiredActionTuple)) 106 if (requiredActionSymbols.TryGetValue(key, out var requiredActionSymbol))
107 { 107 {
108 if (requiredActionTuple.Overridable) 108 if (requiredActionSymbol.Overridable)
109 { 109 {
110 this.Messaging.Write(WarningMessages.SuppressAction(suppressActionTuple.SourceLineNumbers, suppressActionTuple.Action, suppressActionTuple.SequenceTable.ToString())); 110 this.Messaging.Write(WarningMessages.SuppressAction(suppressActionSymbol.SourceLineNumbers, suppressActionSymbol.Action, suppressActionSymbol.SequenceTable.ToString()));
111 if (null != requiredActionTuple.SourceLineNumbers) 111 if (null != requiredActionSymbol.SourceLineNumbers)
112 { 112 {
113 this.Messaging.Write(WarningMessages.SuppressAction2(requiredActionTuple.SourceLineNumbers)); 113 this.Messaging.Write(WarningMessages.SuppressAction2(requiredActionSymbol.SourceLineNumbers));
114 } 114 }
115 115
116 requiredActionTuples.Remove(key); 116 requiredActionSymbols.Remove(key);
117 } 117 }
118 else // suppressing a non-overridable action tuple 118 else // suppressing a non-overridable action symbol
119 { 119 {
120 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction(suppressActionTuple.SourceLineNumbers, suppressActionTuple.SequenceTable.ToString(), suppressActionTuple.Action)); 120 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction(suppressActionSymbol.SourceLineNumbers, suppressActionSymbol.SequenceTable.ToString(), suppressActionSymbol.Action));
121 if (null != requiredActionTuple.SourceLineNumbers) 121 if (null != requiredActionSymbol.SourceLineNumbers)
122 { 122 {
123 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction2(requiredActionTuple.SourceLineNumbers)); 123 this.Messaging.Write(ErrorMessages.SuppressNonoverridableAction2(requiredActionSymbol.SourceLineNumbers));
124 } 124 }
125 } 125 }
126 } 126 }
127 } 127 }
128 128
129 // Build up dependency trees of the relatively scheduled actions. 129 // Build up dependency trees of the relatively scheduled actions.
130 // Use ToList() to create a copy of the required action tuples so that new tuples can 130 // Use ToList() to create a copy of the required action symbols so that new symbols can
131 // be added while enumerating. 131 // be added while enumerating.
132 foreach (var actionTuple in requiredActionTuples.Values.ToList()) 132 foreach (var actionSymbol in requiredActionSymbols.Values.ToList())
133 { 133 {
134 if (!actionTuple.Sequence.HasValue) 134 if (!actionSymbol.Sequence.HasValue)
135 { 135 {
136 // check for standard actions that don't have a sequence number in a merge module 136 // check for standard actions that don't have a sequence number in a merge module
137 if (SectionType.Module == this.Section.Type && WindowsInstallerStandard.IsStandardAction(actionTuple.Action)) 137 if (SectionType.Module == this.Section.Type && WindowsInstallerStandard.IsStandardAction(actionSymbol.Action))
138 { 138 {
139 this.Messaging.Write(ErrorMessages.StandardActionRelativelyScheduledInModule(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 139 this.Messaging.Write(ErrorMessages.StandardActionRelativelyScheduledInModule(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
140 } 140 }
141 141
142 this.SequenceActionTuple(actionTuple, requiredActionTuples); 142 this.SequenceActionSymbol(actionSymbol, requiredActionSymbols);
143 } 143 }
144 else if (SectionType.Module == this.Section.Type && 0 < actionTuple.Sequence && !WindowsInstallerStandard.IsStandardAction(actionTuple.Action)) // check for custom actions and dialogs that have a sequence number 144 else if (SectionType.Module == this.Section.Type && 0 < actionSymbol.Sequence && !WindowsInstallerStandard.IsStandardAction(actionSymbol.Action)) // check for custom actions and dialogs that have a sequence number
145 { 145 {
146 this.Messaging.Write(ErrorMessages.CustomActionSequencedInModule(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 146 this.Messaging.Write(ErrorMessages.CustomActionSequencedInModule(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
147 } 147 }
148 } 148 }
149 149
150 // Look for standard actions with sequence restrictions that aren't necessarily scheduled based 150 // Look for standard actions with sequence restrictions that aren't necessarily scheduled based
151 // on the presence of a particular table. 151 // on the presence of a particular table.
152 if (requiredActionTuples.ContainsKey("InstallExecuteSequence/DuplicateFiles") && !requiredActionTuples.ContainsKey("InstallExecuteSequence/InstallFiles")) 152 if (requiredActionSymbols.ContainsKey("InstallExecuteSequence/DuplicateFiles") && !requiredActionSymbols.ContainsKey("InstallExecuteSequence/InstallFiles"))
153 { 153 {
154 WindowsInstallerStandard.TryGetStandardAction("InstallExecuteSequence/InstallFiles", out var standardAction); 154 WindowsInstallerStandard.TryGetStandardAction("InstallExecuteSequence/InstallFiles", out var standardAction);
155 requiredActionTuples.Add(standardAction.Id.Id, standardAction); 155 requiredActionSymbols.Add(standardAction.Id.Id, standardAction);
156 } 156 }
157 157
158 // Schedule actions. 158 // Schedule actions.
159 List<WixActionTuple> scheduledActionTuples; 159 List<WixActionSymbol> scheduledActionSymbols;
160 if (SectionType.Module == this.Section.Type) 160 if (SectionType.Module == this.Section.Type)
161 { 161 {
162 scheduledActionTuples = requiredActionTuples.Values.ToList(); 162 scheduledActionSymbols = requiredActionSymbols.Values.ToList();
163 } 163 }
164 else 164 else
165 { 165 {
166 scheduledActionTuples = this.ScheduleActions(requiredActionTuples); 166 scheduledActionSymbols = this.ScheduleActions(requiredActionSymbols);
167 } 167 }
168 168
169 // Remove all existing WixActionTuples from the section then add the 169 // Remove all existing WixActionSymbols from the section then add the
170 // scheduled actions back to the section. Note: we add the indices in 170 // scheduled actions back to the section. Note: we add the indices in
171 // reverse order to make it easy to remove them from the list later. 171 // reverse order to make it easy to remove them from the list later.
172 var removeIndices = new List<int>(); 172 var removeIndices = new List<int>();
173 for (var i = this.Section.Tuples.Count - 1; i >= 0; --i) 173 for (var i = this.Section.Symbols.Count - 1; i >= 0; --i)
174 { 174 {
175 var tuple = this.Section.Tuples[i]; 175 var symbol = this.Section.Symbols[i];
176 if (tuple.Definition.Type == TupleDefinitionType.WixAction) 176 if (symbol.Definition.Type == SymbolDefinitionType.WixAction)
177 { 177 {
178 removeIndices.Add(i); 178 removeIndices.Add(i);
179 } 179 }
@@ -181,164 +181,164 @@ namespace WixToolset.Core.WindowsInstaller.Bind
181 181
182 foreach (var removeIndex in removeIndices) 182 foreach (var removeIndex in removeIndices)
183 { 183 {
184 this.Section.Tuples.RemoveAt(removeIndex); 184 this.Section.Symbols.RemoveAt(removeIndex);
185 } 185 }
186 186
187 foreach (var action in scheduledActionTuples) 187 foreach (var action in scheduledActionSymbols)
188 { 188 {
189 this.Section.AddTuple(action); 189 this.Section.AddSymbol(action);
190 } 190 }
191 } 191 }
192 192
193 private Dictionary<string, WixActionTuple> GetRequiredStandardActions() 193 private Dictionary<string, WixActionSymbol> GetRequiredStandardActions()
194 { 194 {
195 var overridableActionTuples = new Dictionary<string, WixActionTuple>(); 195 var overridableActionSymbols = new Dictionary<string, WixActionSymbol>();
196 196
197 var requiredActionIds = this.GetRequiredActionIds(); 197 var requiredActionIds = this.GetRequiredActionIds();
198 198
199 foreach (var actionId in requiredActionIds) 199 foreach (var actionId in requiredActionIds)
200 { 200 {
201 WindowsInstallerStandard.TryGetStandardAction(actionId, out var standardAction); 201 WindowsInstallerStandard.TryGetStandardAction(actionId, out var standardAction);
202 overridableActionTuples.Add(standardAction.Id.Id, standardAction); 202 overridableActionSymbols.Add(standardAction.Id.Id, standardAction);
203 } 203 }
204 204
205 return overridableActionTuples; 205 return overridableActionSymbols;
206 } 206 }
207 207
208 private List<WixActionTuple> ScheduleActions(Dictionary<string, WixActionTuple> requiredActionTuples) 208 private List<WixActionSymbol> ScheduleActions(Dictionary<string, WixActionSymbol> requiredActionSymbols)
209 { 209 {
210 var scheduledActionTuples = new List<WixActionTuple>(); 210 var scheduledActionSymbols = new List<WixActionSymbol>();
211 211
212 // Process each sequence table individually. 212 // Process each sequence table individually.
213 foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable))) 213 foreach (SequenceTable sequenceTable in Enum.GetValues(typeof(SequenceTable)))
214 { 214 {
215 // Create a collection of just the action tuples in this sequence 215 // Create a collection of just the action symbols in this sequence
216 var sequenceActionTuples = requiredActionTuples.Values.Where(a => a.SequenceTable == sequenceTable).ToList(); 216 var sequenceActionSymbols = requiredActionSymbols.Values.Where(a => a.SequenceTable == sequenceTable).ToList();
217 217
218 // Schedule the absolutely scheduled actions (by sorting them by their sequence numbers). 218 // Schedule the absolutely scheduled actions (by sorting them by their sequence numbers).
219 var absoluteActionTuples = new List<WixActionTuple>(); 219 var absoluteActionSymbols = new List<WixActionSymbol>();
220 foreach (var actionTuple in sequenceActionTuples) 220 foreach (var actionSymbol in sequenceActionSymbols)
221 { 221 {
222 if (actionTuple.Sequence.HasValue) 222 if (actionSymbol.Sequence.HasValue)
223 { 223 {
224 // Look for sequence number collisions 224 // Look for sequence number collisions
225 foreach (var sequenceScheduledActionTuple in absoluteActionTuples) 225 foreach (var sequenceScheduledActionSymbol in absoluteActionSymbols)
226 { 226 {
227 if (sequenceScheduledActionTuple.Sequence == actionTuple.Sequence) 227 if (sequenceScheduledActionSymbol.Sequence == actionSymbol.Sequence)
228 { 228 {
229 this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action, sequenceScheduledActionTuple.Action, actionTuple.Sequence ?? 0)); 229 this.Messaging.Write(WarningMessages.ActionSequenceCollision(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action, sequenceScheduledActionSymbol.Action, actionSymbol.Sequence ?? 0));
230 if (null != sequenceScheduledActionTuple.SourceLineNumbers) 230 if (null != sequenceScheduledActionSymbol.SourceLineNumbers)
231 { 231 {
232 this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionTuple.SourceLineNumbers)); 232 this.Messaging.Write(WarningMessages.ActionSequenceCollision2(sequenceScheduledActionSymbol.SourceLineNumbers));
233 } 233 }
234 } 234 }
235 } 235 }
236 236
237 absoluteActionTuples.Add(actionTuple); 237 absoluteActionSymbols.Add(actionSymbol);
238 } 238 }
239 } 239 }
240 240
241 absoluteActionTuples.Sort((x, y) => (x.Sequence ?? 0).CompareTo(y.Sequence ?? 0)); 241 absoluteActionSymbols.Sort((x, y) => (x.Sequence ?? 0).CompareTo(y.Sequence ?? 0));
242 242
243 // Schedule the relatively scheduled actions (by resolving the dependency trees). 243 // Schedule the relatively scheduled actions (by resolving the dependency trees).
244 var previousUsedSequence = 0; 244 var previousUsedSequence = 0;
245 var relativeActionTuples = new List<WixActionTuple>(); 245 var relativeActionSymbols = new List<WixActionSymbol>();
246 for (int j = 0; j < absoluteActionTuples.Count; j++) 246 for (int j = 0; j < absoluteActionSymbols.Count; j++)
247 { 247 {
248 var absoluteActionTuple = absoluteActionTuples[j]; 248 var absoluteActionSymbol = absoluteActionSymbols[j];
249 249
250 // Get all the relatively scheduled action tuples occuring before and after this absolutely scheduled action tuple. 250 // Get all the relatively scheduled action symbols occuring before and after this absolutely scheduled action symbol.
251 var relativeActions = this.GetAllRelativeActionsForSequenceType(sequenceTable, absoluteActionTuple); 251 var relativeActions = this.GetAllRelativeActionsForSequenceType(sequenceTable, absoluteActionSymbol);
252 252
253 // Check for relatively scheduled actions occuring before/after a special action 253 // Check for relatively scheduled actions occuring before/after a special action
254 // (those actions with a negative sequence number). 254 // (those actions with a negative sequence number).
255 if (absoluteActionTuple.Sequence < 0 && (relativeActions.PreviousActions.Any() || relativeActions.NextActions.Any())) 255 if (absoluteActionSymbol.Sequence < 0 && (relativeActions.PreviousActions.Any() || relativeActions.NextActions.Any()))
256 { 256 {
257 // Create errors for all the before actions. 257 // Create errors for all the before actions.
258 foreach (var actionTuple in relativeActions.PreviousActions) 258 foreach (var actionSymbol in relativeActions.PreviousActions)
259 { 259 {
260 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action, absoluteActionTuple.Action)); 260 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action, absoluteActionSymbol.Action));
261 } 261 }
262 262
263 // Create errors for all the after actions. 263 // Create errors for all the after actions.
264 foreach (var actionTuple in relativeActions.NextActions) 264 foreach (var actionSymbol in relativeActions.NextActions)
265 { 265 {
266 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action, absoluteActionTuple.Action)); 266 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action, absoluteActionSymbol.Action));
267 } 267 }
268 268
269 // If there is source line information for the absolutely scheduled action display it 269 // If there is source line information for the absolutely scheduled action display it
270 if (absoluteActionTuple.SourceLineNumbers != null) 270 if (absoluteActionSymbol.SourceLineNumbers != null)
271 { 271 {
272 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction2(absoluteActionTuple.SourceLineNumbers)); 272 this.Messaging.Write(ErrorMessages.ActionScheduledRelativeToTerminationAction2(absoluteActionSymbol.SourceLineNumbers));
273 } 273 }
274 274
275 continue; 275 continue;
276 } 276 }
277 277
278 // Schedule the action tuples before this one. 278 // Schedule the action symbols before this one.
279 var unusedSequence = absoluteActionTuple.Sequence - 1; 279 var unusedSequence = absoluteActionSymbol.Sequence - 1;
280 for (var i = relativeActions.PreviousActions.Count - 1; i >= 0; i--) 280 for (var i = relativeActions.PreviousActions.Count - 1; i >= 0; i--)
281 { 281 {
282 var relativeActionTuple = relativeActions.PreviousActions[i]; 282 var relativeActionSymbol = relativeActions.PreviousActions[i];
283 283
284 // look for collisions 284 // look for collisions
285 if (unusedSequence == previousUsedSequence) 285 if (unusedSequence == previousUsedSequence)
286 { 286 {
287 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionTuple.SourceLineNumbers, relativeActionTuple.SequenceTable.ToString(), relativeActionTuple.Action, absoluteActionTuple.Action)); 287 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionSymbol.SourceLineNumbers, relativeActionSymbol.SequenceTable.ToString(), relativeActionSymbol.Action, absoluteActionSymbol.Action));
288 if (absoluteActionTuple.SourceLineNumbers != null) 288 if (absoluteActionSymbol.SourceLineNumbers != null)
289 { 289 {
290 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionTuple.SourceLineNumbers)); 290 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionSymbol.SourceLineNumbers));
291 } 291 }
292 292
293 unusedSequence++; 293 unusedSequence++;
294 } 294 }
295 295
296 relativeActionTuple.Sequence = unusedSequence; 296 relativeActionSymbol.Sequence = unusedSequence;
297 relativeActionTuples.Add(relativeActionTuple); 297 relativeActionSymbols.Add(relativeActionSymbol);
298 298
299 unusedSequence--; 299 unusedSequence--;
300 } 300 }
301 301
302 // Determine the next used action sequence number. 302 // Determine the next used action sequence number.
303 var nextUsedSequence = Int16.MaxValue + 1; 303 var nextUsedSequence = Int16.MaxValue + 1;
304 if (absoluteActionTuples.Count > j + 1) 304 if (absoluteActionSymbols.Count > j + 1)
305 { 305 {
306 nextUsedSequence = absoluteActionTuples[j + 1].Sequence ?? 0; 306 nextUsedSequence = absoluteActionSymbols[j + 1].Sequence ?? 0;
307 } 307 }
308 308
309 // Schedule the action tuples after this one. 309 // Schedule the action symbols after this one.
310 unusedSequence = absoluteActionTuple.Sequence + 1; 310 unusedSequence = absoluteActionSymbol.Sequence + 1;
311 for (var i = 0; i < relativeActions.NextActions.Count; i++) 311 for (var i = 0; i < relativeActions.NextActions.Count; i++)
312 { 312 {
313 var relativeActionTuple = relativeActions.NextActions[i]; 313 var relativeActionSymbol = relativeActions.NextActions[i];
314 314
315 if (unusedSequence == nextUsedSequence) 315 if (unusedSequence == nextUsedSequence)
316 { 316 {
317 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionTuple.SourceLineNumbers, relativeActionTuple.SequenceTable.ToString(), relativeActionTuple.Action, absoluteActionTuple.Action)); 317 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber(relativeActionSymbol.SourceLineNumbers, relativeActionSymbol.SequenceTable.ToString(), relativeActionSymbol.Action, absoluteActionSymbol.Action));
318 if (absoluteActionTuple.SourceLineNumbers != null) 318 if (absoluteActionSymbol.SourceLineNumbers != null)
319 { 319 {
320 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionTuple.SourceLineNumbers)); 320 this.Messaging.Write(ErrorMessages.NoUniqueActionSequenceNumber2(absoluteActionSymbol.SourceLineNumbers));
321 } 321 }
322 322
323 unusedSequence--; 323 unusedSequence--;
324 } 324 }
325 325
326 relativeActionTuple.Sequence = unusedSequence; 326 relativeActionSymbol.Sequence = unusedSequence;
327 relativeActionTuples.Add(relativeActionTuple); 327 relativeActionSymbols.Add(relativeActionSymbol);
328 328
329 unusedSequence++; 329 unusedSequence++;
330 } 330 }
331 331
332 // keep track of this sequence number as the previous used sequence number for the next iteration 332 // keep track of this sequence number as the previous used sequence number for the next iteration
333 previousUsedSequence = absoluteActionTuple.Sequence ?? 0; 333 previousUsedSequence = absoluteActionSymbol.Sequence ?? 0;
334 } 334 }
335 335
336 // add the absolutely and relatively scheduled actions to the list of scheduled actions 336 // add the absolutely and relatively scheduled actions to the list of scheduled actions
337 scheduledActionTuples.AddRange(absoluteActionTuples); 337 scheduledActionSymbols.AddRange(absoluteActionSymbols);
338 scheduledActionTuples.AddRange(relativeActionTuples); 338 scheduledActionSymbols.AddRange(relativeActionSymbols);
339 } 339 }
340 340
341 return scheduledActionTuples; 341 return scheduledActionSymbols;
342 } 342 }
343 343
344 private IEnumerable<string> GetRequiredActionIds() 344 private IEnumerable<string> GetRequiredActionIds()
@@ -396,16 +396,16 @@ namespace WixToolset.Core.WindowsInstaller.Bind
396 set.Add("InstallUISequence/ValidateProductID"); 396 set.Add("InstallUISequence/ValidateProductID");
397 } 397 }
398 398
399 // Gather the required actions for each tuple type. 399 // Gather the required actions for each symbol type.
400 foreach (var tupleType in this.Section.Tuples.Select(t => t.Definition.Type).Distinct()) 400 foreach (var symbolType in this.Section.Symbols.Select(t => t.Definition.Type).Distinct())
401 { 401 {
402 switch (tupleType) 402 switch (symbolType)
403 { 403 {
404 case TupleDefinitionType.AppSearch: 404 case SymbolDefinitionType.AppSearch:
405 set.Add("InstallExecuteSequence/AppSearch"); 405 set.Add("InstallExecuteSequence/AppSearch");
406 set.Add("InstallUISequence/AppSearch"); 406 set.Add("InstallUISequence/AppSearch");
407 break; 407 break;
408 case TupleDefinitionType.CCPSearch: 408 case SymbolDefinitionType.CCPSearch:
409 set.Add("InstallExecuteSequence/AppSearch"); 409 set.Add("InstallExecuteSequence/AppSearch");
410 set.Add("InstallExecuteSequence/CCPSearch"); 410 set.Add("InstallExecuteSequence/CCPSearch");
411 set.Add("InstallExecuteSequence/RMCCPSearch"); 411 set.Add("InstallExecuteSequence/RMCCPSearch");
@@ -413,40 +413,40 @@ namespace WixToolset.Core.WindowsInstaller.Bind
413 set.Add("InstallUISequence/CCPSearch"); 413 set.Add("InstallUISequence/CCPSearch");
414 set.Add("InstallUISequence/RMCCPSearch"); 414 set.Add("InstallUISequence/RMCCPSearch");
415 break; 415 break;
416 case TupleDefinitionType.Class: 416 case SymbolDefinitionType.Class:
417 set.Add("AdvertiseExecuteSequence/RegisterClassInfo"); 417 set.Add("AdvertiseExecuteSequence/RegisterClassInfo");
418 set.Add("InstallExecuteSequence/RegisterClassInfo"); 418 set.Add("InstallExecuteSequence/RegisterClassInfo");
419 set.Add("InstallExecuteSequence/UnregisterClassInfo"); 419 set.Add("InstallExecuteSequence/UnregisterClassInfo");
420 break; 420 break;
421 case TupleDefinitionType.Complus: 421 case SymbolDefinitionType.Complus:
422 set.Add("InstallExecuteSequence/RegisterComPlus"); 422 set.Add("InstallExecuteSequence/RegisterComPlus");
423 set.Add("InstallExecuteSequence/UnregisterComPlus"); 423 set.Add("InstallExecuteSequence/UnregisterComPlus");
424 break; 424 break;
425 case TupleDefinitionType.CreateFolder: 425 case SymbolDefinitionType.CreateFolder:
426 set.Add("InstallExecuteSequence/CreateFolders"); 426 set.Add("InstallExecuteSequence/CreateFolders");
427 set.Add("InstallExecuteSequence/RemoveFolders"); 427 set.Add("InstallExecuteSequence/RemoveFolders");
428 break; 428 break;
429 case TupleDefinitionType.DuplicateFile: 429 case SymbolDefinitionType.DuplicateFile:
430 set.Add("InstallExecuteSequence/DuplicateFiles"); 430 set.Add("InstallExecuteSequence/DuplicateFiles");
431 set.Add("InstallExecuteSequence/RemoveDuplicateFiles"); 431 set.Add("InstallExecuteSequence/RemoveDuplicateFiles");
432 break; 432 break;
433 case TupleDefinitionType.Environment: 433 case SymbolDefinitionType.Environment:
434 set.Add("InstallExecuteSequence/WriteEnvironmentStrings"); 434 set.Add("InstallExecuteSequence/WriteEnvironmentStrings");
435 set.Add("InstallExecuteSequence/RemoveEnvironmentStrings"); 435 set.Add("InstallExecuteSequence/RemoveEnvironmentStrings");
436 break; 436 break;
437 case TupleDefinitionType.Extension: 437 case SymbolDefinitionType.Extension:
438 set.Add("AdvertiseExecuteSequence/RegisterExtensionInfo"); 438 set.Add("AdvertiseExecuteSequence/RegisterExtensionInfo");
439 set.Add("InstallExecuteSequence/RegisterExtensionInfo"); 439 set.Add("InstallExecuteSequence/RegisterExtensionInfo");
440 set.Add("InstallExecuteSequence/UnregisterExtensionInfo"); 440 set.Add("InstallExecuteSequence/UnregisterExtensionInfo");
441 break; 441 break;
442 case TupleDefinitionType.File: 442 case SymbolDefinitionType.File:
443 set.Add("InstallExecuteSequence/InstallFiles"); 443 set.Add("InstallExecuteSequence/InstallFiles");
444 set.Add("InstallExecuteSequence/RemoveFiles"); 444 set.Add("InstallExecuteSequence/RemoveFiles");
445 445
446 var foundFont = false; 446 var foundFont = false;
447 var foundSelfReg = false; 447 var foundSelfReg = false;
448 var foundBindPath = false; 448 var foundBindPath = false;
449 foreach (var file in this.Section.Tuples.OfType<FileTuple>()) 449 foreach (var file in this.Section.Symbols.OfType<FileSymbol>())
450 { 450 {
451 if (!foundFont && !String.IsNullOrEmpty(file.FontTitle)) 451 if (!foundFont && !String.IsNullOrEmpty(file.FontTitle))
452 { 452 {
@@ -469,83 +469,83 @@ namespace WixToolset.Core.WindowsInstaller.Bind
469 } 469 }
470 } 470 }
471 break; 471 break;
472 case TupleDefinitionType.IniFile: 472 case SymbolDefinitionType.IniFile:
473 set.Add("InstallExecuteSequence/WriteIniValues"); 473 set.Add("InstallExecuteSequence/WriteIniValues");
474 set.Add("InstallExecuteSequence/RemoveIniValues"); 474 set.Add("InstallExecuteSequence/RemoveIniValues");
475 break; 475 break;
476 case TupleDefinitionType.IsolatedComponent: 476 case SymbolDefinitionType.IsolatedComponent:
477 set.Add("InstallExecuteSequence/IsolateComponents"); 477 set.Add("InstallExecuteSequence/IsolateComponents");
478 break; 478 break;
479 case TupleDefinitionType.LaunchCondition: 479 case SymbolDefinitionType.LaunchCondition:
480 set.Add("InstallExecuteSequence/LaunchConditions"); 480 set.Add("InstallExecuteSequence/LaunchConditions");
481 set.Add("InstallUISequence/LaunchConditions"); 481 set.Add("InstallUISequence/LaunchConditions");
482 break; 482 break;
483 case TupleDefinitionType.MIME: 483 case SymbolDefinitionType.MIME:
484 set.Add("AdvertiseExecuteSequence/RegisterMIMEInfo"); 484 set.Add("AdvertiseExecuteSequence/RegisterMIMEInfo");
485 set.Add("InstallExecuteSequence/RegisterMIMEInfo"); 485 set.Add("InstallExecuteSequence/RegisterMIMEInfo");
486 set.Add("InstallExecuteSequence/UnregisterMIMEInfo"); 486 set.Add("InstallExecuteSequence/UnregisterMIMEInfo");
487 break; 487 break;
488 case TupleDefinitionType.MoveFile: 488 case SymbolDefinitionType.MoveFile:
489 set.Add("InstallExecuteSequence/MoveFiles"); 489 set.Add("InstallExecuteSequence/MoveFiles");
490 break; 490 break;
491 case TupleDefinitionType.Assembly: 491 case SymbolDefinitionType.Assembly:
492 set.Add("AdvertiseExecuteSequence/MsiPublishAssemblies"); 492 set.Add("AdvertiseExecuteSequence/MsiPublishAssemblies");
493 set.Add("InstallExecuteSequence/MsiPublishAssemblies"); 493 set.Add("InstallExecuteSequence/MsiPublishAssemblies");
494 set.Add("InstallExecuteSequence/MsiUnpublishAssemblies"); 494 set.Add("InstallExecuteSequence/MsiUnpublishAssemblies");
495 break; 495 break;
496 case TupleDefinitionType.MsiServiceConfig: 496 case SymbolDefinitionType.MsiServiceConfig:
497 case TupleDefinitionType.MsiServiceConfigFailureActions: 497 case SymbolDefinitionType.MsiServiceConfigFailureActions:
498 set.Add("InstallExecuteSequence/MsiConfigureServices"); 498 set.Add("InstallExecuteSequence/MsiConfigureServices");
499 break; 499 break;
500 case TupleDefinitionType.ODBCDataSource: 500 case SymbolDefinitionType.ODBCDataSource:
501 case TupleDefinitionType.ODBCTranslator: 501 case SymbolDefinitionType.ODBCTranslator:
502 case TupleDefinitionType.ODBCDriver: 502 case SymbolDefinitionType.ODBCDriver:
503 set.Add("InstallExecuteSequence/SetODBCFolders"); 503 set.Add("InstallExecuteSequence/SetODBCFolders");
504 set.Add("InstallExecuteSequence/InstallODBC"); 504 set.Add("InstallExecuteSequence/InstallODBC");
505 set.Add("InstallExecuteSequence/RemoveODBC"); 505 set.Add("InstallExecuteSequence/RemoveODBC");
506 break; 506 break;
507 case TupleDefinitionType.ProgId: 507 case SymbolDefinitionType.ProgId:
508 set.Add("AdvertiseExecuteSequence/RegisterProgIdInfo"); 508 set.Add("AdvertiseExecuteSequence/RegisterProgIdInfo");
509 set.Add("InstallExecuteSequence/RegisterProgIdInfo"); 509 set.Add("InstallExecuteSequence/RegisterProgIdInfo");
510 set.Add("InstallExecuteSequence/UnregisterProgIdInfo"); 510 set.Add("InstallExecuteSequence/UnregisterProgIdInfo");
511 break; 511 break;
512 case TupleDefinitionType.PublishComponent: 512 case SymbolDefinitionType.PublishComponent:
513 set.Add("AdvertiseExecuteSequence/PublishComponents"); 513 set.Add("AdvertiseExecuteSequence/PublishComponents");
514 set.Add("InstallExecuteSequence/PublishComponents"); 514 set.Add("InstallExecuteSequence/PublishComponents");
515 set.Add("InstallExecuteSequence/UnpublishComponents"); 515 set.Add("InstallExecuteSequence/UnpublishComponents");
516 break; 516 break;
517 case TupleDefinitionType.Registry: 517 case SymbolDefinitionType.Registry:
518 case TupleDefinitionType.RemoveRegistry: 518 case SymbolDefinitionType.RemoveRegistry:
519 set.Add("InstallExecuteSequence/WriteRegistryValues"); 519 set.Add("InstallExecuteSequence/WriteRegistryValues");
520 set.Add("InstallExecuteSequence/RemoveRegistryValues"); 520 set.Add("InstallExecuteSequence/RemoveRegistryValues");
521 break; 521 break;
522 case TupleDefinitionType.RemoveFile: 522 case SymbolDefinitionType.RemoveFile:
523 set.Add("InstallExecuteSequence/RemoveFiles"); 523 set.Add("InstallExecuteSequence/RemoveFiles");
524 break; 524 break;
525 case TupleDefinitionType.ServiceControl: 525 case SymbolDefinitionType.ServiceControl:
526 set.Add("InstallExecuteSequence/StartServices"); 526 set.Add("InstallExecuteSequence/StartServices");
527 set.Add("InstallExecuteSequence/StopServices"); 527 set.Add("InstallExecuteSequence/StopServices");
528 set.Add("InstallExecuteSequence/DeleteServices"); 528 set.Add("InstallExecuteSequence/DeleteServices");
529 break; 529 break;
530 case TupleDefinitionType.ServiceInstall: 530 case SymbolDefinitionType.ServiceInstall:
531 set.Add("InstallExecuteSequence/InstallServices"); 531 set.Add("InstallExecuteSequence/InstallServices");
532 break; 532 break;
533 case TupleDefinitionType.Shortcut: 533 case SymbolDefinitionType.Shortcut:
534 set.Add("AdvertiseExecuteSequence/CreateShortcuts"); 534 set.Add("AdvertiseExecuteSequence/CreateShortcuts");
535 set.Add("InstallExecuteSequence/CreateShortcuts"); 535 set.Add("InstallExecuteSequence/CreateShortcuts");
536 set.Add("InstallExecuteSequence/RemoveShortcuts"); 536 set.Add("InstallExecuteSequence/RemoveShortcuts");
537 break; 537 break;
538 case TupleDefinitionType.TypeLib: 538 case SymbolDefinitionType.TypeLib:
539 set.Add("InstallExecuteSequence/RegisterTypeLibraries"); 539 set.Add("InstallExecuteSequence/RegisterTypeLibraries");
540 set.Add("InstallExecuteSequence/UnregisterTypeLibraries"); 540 set.Add("InstallExecuteSequence/UnregisterTypeLibraries");
541 break; 541 break;
542 case TupleDefinitionType.Upgrade: 542 case SymbolDefinitionType.Upgrade:
543 set.Add("InstallExecuteSequence/FindRelatedProducts"); 543 set.Add("InstallExecuteSequence/FindRelatedProducts");
544 set.Add("InstallUISequence/FindRelatedProducts"); 544 set.Add("InstallUISequence/FindRelatedProducts");
545 545
546 // Only add the MigrateFeatureStates action if MigrateFeature attribute is set on 546 // Only add the MigrateFeatureStates action if MigrateFeature attribute is set on
547 // at least one UpgradeVersion element. 547 // at least one UpgradeVersion element.
548 if (this.Section.Tuples.OfType<UpgradeTuple>().Any(t => t.MigrateFeatures)) 548 if (this.Section.Symbols.OfType<UpgradeSymbol>().Any(t => t.MigrateFeatures))
549 { 549 {
550 set.Add("InstallExecuteSequence/MigrateFeatureStates"); 550 set.Add("InstallExecuteSequence/MigrateFeatureStates");
551 set.Add("InstallUISequence/MigrateFeatureStates"); 551 set.Add("InstallUISequence/MigrateFeatureStates");
@@ -557,7 +557,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
557 return set; 557 return set;
558 } 558 }
559 559
560 private IEnumerable<WixActionTuple> GetActions(SequenceTable sequence, string[] actionNames) 560 private IEnumerable<WixActionSymbol> GetActions(SequenceTable sequence, string[] actionNames)
561 { 561 {
562 foreach (var action in WindowsInstallerStandard.StandardActions()) 562 foreach (var action in WindowsInstallerStandard.StandardActions())
563 { 563 {
@@ -571,64 +571,64 @@ namespace WixToolset.Core.WindowsInstaller.Bind
571 /// <summary> 571 /// <summary>
572 /// Sequence an action before or after a standard action. 572 /// Sequence an action before or after a standard action.
573 /// </summary> 573 /// </summary>
574 /// <param name="actionTuple">The action tuple to be sequenced.</param> 574 /// <param name="actionSymbol">The action symbol to be sequenced.</param>
575 /// <param name="requiredActionTuples">Collection of actions which must be included.</param> 575 /// <param name="requiredActionSymbols">Collection of actions which must be included.</param>
576 private void SequenceActionTuple(WixActionTuple actionTuple, Dictionary<string, WixActionTuple> requiredActionTuples) 576 private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary<string, WixActionSymbol> requiredActionSymbols)
577 { 577 {
578 var after = false; 578 var after = false;
579 579
580 if (actionTuple.After != null) 580 if (actionSymbol.After != null)
581 { 581 {
582 after = true; 582 after = true;
583 } 583 }
584 else if (actionTuple.Before == null) 584 else if (actionSymbol.Before == null)
585 { 585 {
586 throw new InvalidOperationException("Found an action with no Sequence, Before, or After column set."); 586 throw new InvalidOperationException("Found an action with no Sequence, Before, or After column set.");
587 } 587 }
588 588
589 var parentActionName = (after ? actionTuple.After : actionTuple.Before); 589 var parentActionName = (after ? actionSymbol.After : actionSymbol.Before);
590 var parentActionKey = actionTuple.SequenceTable.ToString() + "/" + parentActionName; 590 var parentActionKey = actionSymbol.SequenceTable.ToString() + "/" + parentActionName;
591 591
592 if (!requiredActionTuples.TryGetValue(parentActionKey, out var parentActionTuple)) 592 if (!requiredActionSymbols.TryGetValue(parentActionKey, out var parentActionSymbol))
593 { 593 {
594 // If the missing parent action is a standard action (with a suggested sequence number), add it. 594 // If the missing parent action is a standard action (with a suggested sequence number), add it.
595 if (WindowsInstallerStandard.TryGetStandardAction(parentActionKey, out parentActionTuple)) 595 if (WindowsInstallerStandard.TryGetStandardAction(parentActionKey, out parentActionSymbol))
596 { 596 {
597 // Create a clone to avoid modifying the static copy of the object. 597 // Create a clone to avoid modifying the static copy of the object.
598 // TODO: consider this: parentActionTuple = parentActionTuple.Clone(); 598 // TODO: consider this: parentActionSymbol = parentActionSymbol.Clone();
599 599
600 requiredActionTuples.Add(parentActionTuple.Id.Id, parentActionTuple); 600 requiredActionSymbols.Add(parentActionSymbol.Id.Id, parentActionSymbol);
601 } 601 }
602 else 602 else
603 { 603 {
604 throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, "Found an action with a non-existent {0} action: {1}.", (after ? "After" : "Before"), parentActionName)); 604 throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, "Found an action with a non-existent {0} action: {1}.", (after ? "After" : "Before"), parentActionName));
605 } 605 }
606 } 606 }
607 else if (actionTuple == parentActionTuple || this.ContainsChildActionTuple(actionTuple, parentActionTuple)) // cycle detected 607 else if (actionSymbol == parentActionSymbol || this.ContainsChildActionSymbol(actionSymbol, parentActionSymbol)) // cycle detected
608 { 608 {
609 throw new WixException(ErrorMessages.ActionCircularDependency(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action, parentActionTuple.Action)); 609 throw new WixException(ErrorMessages.ActionCircularDependency(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action, parentActionSymbol.Action));
610 } 610 }
611 611
612 // Add this action to the appropriate list of dependent action tuples. 612 // Add this action to the appropriate list of dependent action symbols.
613 var relativeActions = this.GetRelativeActions(parentActionTuple); 613 var relativeActions = this.GetRelativeActions(parentActionSymbol);
614 var relatedTuples = (after ? relativeActions.NextActions : relativeActions.PreviousActions); 614 var relatedSymbols = (after ? relativeActions.NextActions : relativeActions.PreviousActions);
615 relatedTuples.Add(actionTuple); 615 relatedSymbols.Add(actionSymbol);
616 } 616 }
617 617
618 private bool ContainsChildActionTuple(WixActionTuple childTuple, WixActionTuple parentTuple) 618 private bool ContainsChildActionSymbol(WixActionSymbol childSymbol, WixActionSymbol parentSymbol)
619 { 619 {
620 var result = false; 620 var result = false;
621 621
622 if (this.RelativeActionsForActions.TryGetValue(childTuple.Id.Id, out var relativeActions)) 622 if (this.RelativeActionsForActions.TryGetValue(childSymbol.Id.Id, out var relativeActions))
623 { 623 {
624 result = relativeActions.NextActions.Any(a => a.SequenceTable == parentTuple.SequenceTable && a.Id.Id == parentTuple.Id.Id) || 624 result = relativeActions.NextActions.Any(a => a.SequenceTable == parentSymbol.SequenceTable && a.Id.Id == parentSymbol.Id.Id) ||
625 relativeActions.PreviousActions.Any(a => a.SequenceTable == parentTuple.SequenceTable && a.Id.Id == parentTuple.Id.Id); 625 relativeActions.PreviousActions.Any(a => a.SequenceTable == parentSymbol.SequenceTable && a.Id.Id == parentSymbol.Id.Id);
626 } 626 }
627 627
628 return result; 628 return result;
629 } 629 }
630 630
631 private RelativeActions GetRelativeActions(WixActionTuple action) 631 private RelativeActions GetRelativeActions(WixActionSymbol action)
632 { 632 {
633 if (!this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var relativeActions)) 633 if (!this.RelativeActionsForActions.TryGetValue(action.Id.Id, out var relativeActions))
634 { 634 {
@@ -639,7 +639,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
639 return relativeActions; 639 return relativeActions;
640 } 640 }
641 641
642 private RelativeActions GetAllRelativeActionsForSequenceType(SequenceTable sequenceType, WixActionTuple action) 642 private RelativeActions GetAllRelativeActionsForSequenceType(SequenceTable sequenceType, WixActionSymbol action)
643 { 643 {
644 var relativeActions = new RelativeActions(); 644 var relativeActions = new RelativeActions();
645 645
@@ -653,7 +653,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
653 return relativeActions; 653 return relativeActions;
654 } 654 }
655 655
656 private void RecurseRelativeActionsForSequenceType(SequenceTable sequenceType, List<WixActionTuple> actions, List<WixActionTuple> visitedActions) 656 private void RecurseRelativeActionsForSequenceType(SequenceTable sequenceType, List<WixActionSymbol> actions, List<WixActionSymbol> visitedActions)
657 { 657 {
658 foreach (var action in actions.Where(a => a.SequenceTable == sequenceType)) 658 foreach (var action in actions.Where(a => a.SequenceTable == sequenceType))
659 { 659 {
@@ -673,9 +673,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
673 673
674 private class RelativeActions 674 private class RelativeActions
675 { 675 {
676 public List<WixActionTuple> PreviousActions { get; } = new List<WixActionTuple>(); 676 public List<WixActionSymbol> PreviousActions { get; } = new List<WixActionSymbol>();
677 677
678 public List<WixActionTuple> NextActions { get; } = new List<WixActionTuple>(); 678 public List<WixActionSymbol> NextActions { get; } = new List<WixActionSymbol>();
679 } 679 }
680 } 680 }
681} 681}
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
index 75bcfe17..938627ed 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
11 using WixToolset.Core.Bind; 11 using WixToolset.Core.Bind;
12 using WixToolset.Core.WindowsInstaller.Msi; 12 using WixToolset.Core.WindowsInstaller.Msi;
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Symbols;
15 using WixToolset.Extensibility.Services; 15 using WixToolset.Extensibility.Services;
16 16
17 /// <summary> 17 /// <summary>
@@ -43,15 +43,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
43 43
44 public void Execute() 44 public void Execute()
45 { 45 {
46 var assemblyNameTuples = this.Section.Tuples.OfType<MsiAssemblyNameTuple>().ToDictionary(t => t.Id.Id); 46 var assemblyNameSymbols = this.Section.Symbols.OfType<MsiAssemblyNameSymbol>().ToDictionary(t => t.Id.Id);
47 47
48 foreach (var file in this.UpdateFileFacades) 48 foreach (var file in this.UpdateFileFacades)
49 { 49 {
50 this.UpdateFileFacade(file, assemblyNameTuples); 50 this.UpdateFileFacade(file, assemblyNameSymbols);
51 } 51 }
52 } 52 }
53 53
54 private void UpdateFileFacade(FileFacade facade, Dictionary<string, MsiAssemblyNameTuple> assemblyNameTuples) 54 private void UpdateFileFacade(FileFacade facade, Dictionary<string, MsiAssemblyNameSymbol> assemblyNameSymbols)
55 { 55 {
56 FileInfo fileInfo = null; 56 FileInfo fileInfo = null;
57 try 57 try
@@ -155,7 +155,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
155 155
156 if (null == facade.Hash) 156 if (null == facade.Hash)
157 { 157 {
158 facade.Hash = this.Section.AddTuple(new MsiFileHashTuple(facade.SourceLineNumber, facade.Identifier)); 158 facade.Hash = this.Section.AddSymbol(new MsiFileHashSymbol(facade.SourceLineNumber, facade.Identifier));
159 } 159 }
160 160
161 facade.Hash.Options = 0; 161 facade.Hash.Options = 0;
@@ -220,23 +220,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
220 { 220 {
221 var assemblyName = AssemblyNameReader.ReadAssembly(facade.SourceLineNumber, fileInfo.FullName, version); 221 var assemblyName = AssemblyNameReader.ReadAssembly(facade.SourceLineNumber, fileInfo.FullName, version);
222 222
223 this.SetMsiAssemblyName(assemblyNameTuples, facade, "name", assemblyName.Name); 223 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "name", assemblyName.Name);
224 this.SetMsiAssemblyName(assemblyNameTuples, facade, "culture", assemblyName.Culture); 224 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "culture", assemblyName.Culture);
225 this.SetMsiAssemblyName(assemblyNameTuples, facade, "version", assemblyName.Version); 225 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "version", assemblyName.Version);
226 226
227 if (!String.IsNullOrEmpty(assemblyName.Architecture)) 227 if (!String.IsNullOrEmpty(assemblyName.Architecture))
228 { 228 {
229 this.SetMsiAssemblyName(assemblyNameTuples, facade, "processorArchitecture", assemblyName.Architecture); 229 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "processorArchitecture", assemblyName.Architecture);
230 } 230 }
231 // TODO: WiX v3 seemed to do this but not clear it should actually be done. 231 // TODO: WiX v3 seemed to do this but not clear it should actually be done.
232 //else if (!String.IsNullOrEmpty(file.WixFile.ProcessorArchitecture)) 232 //else if (!String.IsNullOrEmpty(file.WixFile.ProcessorArchitecture))
233 //{ 233 //{
234 // this.SetMsiAssemblyName(assemblyNameTuples, file, "processorArchitecture", file.WixFile.ProcessorArchitecture); 234 // this.SetMsiAssemblyName(assemblyNameSymbols, file, "processorArchitecture", file.WixFile.ProcessorArchitecture);
235 //} 235 //}
236 236
237 if (assemblyName.StrongNamedSigned) 237 if (assemblyName.StrongNamedSigned)
238 { 238 {
239 this.SetMsiAssemblyName(assemblyNameTuples, facade, "publicKeyToken", assemblyName.PublicKeyToken); 239 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "publicKeyToken", assemblyName.PublicKeyToken);
240 } 240 }
241 else if (facade.AssemblyApplicationFileRef == null) 241 else if (facade.AssemblyApplicationFileRef == null)
242 { 242 {
@@ -245,7 +245,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
245 245
246 if (!String.IsNullOrEmpty(assemblyName.FileVersion)) 246 if (!String.IsNullOrEmpty(assemblyName.FileVersion))
247 { 247 {
248 this.SetMsiAssemblyName(assemblyNameTuples, facade, "fileVersion", assemblyName.FileVersion); 248 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "fileVersion", assemblyName.FileVersion);
249 } 249 }
250 250
251 // add the assembly name to the information cache 251 // add the assembly name to the information cache
@@ -276,27 +276,27 @@ namespace WixToolset.Core.WindowsInstaller.Bind
276 276
277 if (!String.IsNullOrEmpty(assemblyName.Name)) 277 if (!String.IsNullOrEmpty(assemblyName.Name))
278 { 278 {
279 this.SetMsiAssemblyName(assemblyNameTuples, facade, "name", assemblyName.Name); 279 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "name", assemblyName.Name);
280 } 280 }
281 281
282 if (!String.IsNullOrEmpty(assemblyName.Version)) 282 if (!String.IsNullOrEmpty(assemblyName.Version))
283 { 283 {
284 this.SetMsiAssemblyName(assemblyNameTuples, facade, "version", assemblyName.Version); 284 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "version", assemblyName.Version);
285 } 285 }
286 286
287 if (!String.IsNullOrEmpty(assemblyName.Type)) 287 if (!String.IsNullOrEmpty(assemblyName.Type))
288 { 288 {
289 this.SetMsiAssemblyName(assemblyNameTuples, facade, "type", assemblyName.Type); 289 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "type", assemblyName.Type);
290 } 290 }
291 291
292 if (!String.IsNullOrEmpty(assemblyName.Architecture)) 292 if (!String.IsNullOrEmpty(assemblyName.Architecture))
293 { 293 {
294 this.SetMsiAssemblyName(assemblyNameTuples, facade, "processorArchitecture", assemblyName.Architecture); 294 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "processorArchitecture", assemblyName.Architecture);
295 } 295 }
296 296
297 if (!String.IsNullOrEmpty(assemblyName.PublicKeyToken)) 297 if (!String.IsNullOrEmpty(assemblyName.PublicKeyToken))
298 { 298 {
299 this.SetMsiAssemblyName(assemblyNameTuples, facade, "publicKeyToken", assemblyName.PublicKeyToken); 299 this.SetMsiAssemblyName(assemblyNameSymbols, facade, "publicKeyToken", assemblyName.PublicKeyToken);
300 } 300 }
301 } 301 }
302 catch (WixException e) 302 catch (WixException e)
@@ -310,11 +310,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
310 /// Set an MsiAssemblyName row. If it was directly authored, override the value, otherwise 310 /// Set an MsiAssemblyName row. If it was directly authored, override the value, otherwise
311 /// create a new row. 311 /// create a new row.
312 /// </summary> 312 /// </summary>
313 /// <param name="assemblyNameTuples">MsiAssemblyName table.</param> 313 /// <param name="assemblyNameSymbols">MsiAssemblyName table.</param>
314 /// <param name="facade">FileFacade containing the assembly read for the MsiAssemblyName row.</param> 314 /// <param name="facade">FileFacade containing the assembly read for the MsiAssemblyName row.</param>
315 /// <param name="name">MsiAssemblyName name.</param> 315 /// <param name="name">MsiAssemblyName name.</param>
316 /// <param name="value">MsiAssemblyName value.</param> 316 /// <param name="value">MsiAssemblyName value.</param>
317 private void SetMsiAssemblyName(Dictionary<string, MsiAssemblyNameTuple> assemblyNameTuples, FileFacade facade, string name, string value) 317 private void SetMsiAssemblyName(Dictionary<string, MsiAssemblyNameSymbol> assemblyNameSymbols, FileFacade facade, string name, string value)
318 { 318 {
319 // check for null value (this can occur when grabbing the file version from an assembly without one) 319 // check for null value (this can occur when grabbing the file version from an assembly without one)
320 if (String.IsNullOrEmpty(value)) 320 if (String.IsNullOrEmpty(value))
@@ -333,9 +333,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
333 333
334 // override directly authored value 334 // override directly authored value
335 var lookup = String.Concat(facade.ComponentRef, "/", name); 335 var lookup = String.Concat(facade.ComponentRef, "/", name);
336 if (!assemblyNameTuples.TryGetValue(lookup, out var assemblyNameTuple)) 336 if (!assemblyNameSymbols.TryGetValue(lookup, out var assemblyNameSymbol))
337 { 337 {
338 assemblyNameTuple = this.Section.AddTuple(new MsiAssemblyNameTuple(facade.SourceLineNumber, new Identifier(AccessModifier.Private, facade.ComponentRef, name)) 338 assemblyNameSymbol = this.Section.AddSymbol(new MsiAssemblyNameSymbol(facade.SourceLineNumber, new Identifier(AccessModifier.Private, facade.ComponentRef, name))
339 { 339 {
340 ComponentRef = facade.ComponentRef, 340 ComponentRef = facade.ComponentRef,
341 Name = name, 341 Name = name,
@@ -344,15 +344,15 @@ namespace WixToolset.Core.WindowsInstaller.Bind
344 344
345 if (null == facade.AssemblyNames) 345 if (null == facade.AssemblyNames)
346 { 346 {
347 facade.AssemblyNames = new List<MsiAssemblyNameTuple>(); 347 facade.AssemblyNames = new List<MsiAssemblyNameSymbol>();
348 } 348 }
349 349
350 facade.AssemblyNames.Add(assemblyNameTuple); 350 facade.AssemblyNames.Add(assemblyNameSymbol);
351 351
352 assemblyNameTuples.Add(assemblyNameTuple.Id.Id, assemblyNameTuple); 352 assemblyNameSymbols.Add(assemblyNameSymbol.Id.Id, assemblyNameSymbol);
353 } 353 }
354 354
355 assemblyNameTuple.Value = value; 355 assemblyNameSymbol.Value = value;
356 356
357 if (this.VariableCache != null) 357 if (this.VariableCache != null)
358 { 358 {
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFromTextFilesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFromTextFilesCommand.cs
index 4d09ff6b..66a648cc 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFromTextFilesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateFromTextFilesCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.IO; 6 using System.IO;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 using WixToolset.Extensibility.Services; 10 using WixToolset.Extensibility.Services;
11 11
12 internal class UpdateFromTextFilesCommand 12 internal class UpdateFromTextFilesCommand
@@ -23,17 +23,17 @@ namespace WixToolset.Core.WindowsInstaller.Bind
23 23
24 public void Execute() 24 public void Execute()
25 { 25 {
26 foreach (var bbControl in this.Section.Tuples.OfType<BBControlTuple>().Where(t => t.SourceFile != null)) 26 foreach (var bbControl in this.Section.Symbols.OfType<BBControlSymbol>().Where(t => t.SourceFile != null))
27 { 27 {
28 bbControl.Text = this.ReadTextFile(bbControl.SourceLineNumbers, bbControl.SourceFile.Path); 28 bbControl.Text = this.ReadTextFile(bbControl.SourceLineNumbers, bbControl.SourceFile.Path);
29 } 29 }
30 30
31 foreach (var control in this.Section.Tuples.OfType<ControlTuple>().Where(t => t.SourceFile != null)) 31 foreach (var control in this.Section.Symbols.OfType<ControlSymbol>().Where(t => t.SourceFile != null))
32 { 32 {
33 control.Text = this.ReadTextFile(control.SourceLineNumbers, control.SourceFile.Path); 33 control.Text = this.ReadTextFile(control.SourceLineNumbers, control.SourceFile.Path);
34 } 34 }
35 35
36 foreach (var customAction in this.Section.Tuples.OfType<CustomActionTuple>().Where(c => c.ScriptFile != null)) 36 foreach (var customAction in this.Section.Symbols.OfType<CustomActionSymbol>().Where(c => c.ScriptFile != null))
37 { 37 {
38 customAction.Target = this.ReadTextFile(customAction.SourceLineNumbers, customAction.ScriptFile.Path); 38 customAction.Target = this.ReadTextFile(customAction.SourceLineNumbers, customAction.ScriptFile.Path);
39 } 39 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs
index bf28b279..d3f2b9ea 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.Linq; 6 using System.Linq;
7 using WixToolset.Core.Bind; 7 using WixToolset.Core.Bind;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 10
11 internal class UpdateMediaSequencesCommand 11 internal class UpdateMediaSequencesCommand
12 { 12 {
@@ -22,7 +22,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
22 22
23 public void Execute() 23 public void Execute()
24 { 24 {
25 var mediaRows = this.Section.Tuples.OfType<MediaTuple>().ToDictionary(t => t.DiskId); 25 var mediaRows = this.Section.Symbols.OfType<MediaSymbol>().ToDictionary(t => t.DiskId);
26 26
27 // Calculate sequence numbers and media disk id layout for all file media information objects. 27 // Calculate sequence numbers and media disk id layout for all file media information objects.
28 if (SectionType.Module == this.Section.Type) 28 if (SectionType.Module == this.Section.Type)
@@ -37,25 +37,25 @@ namespace WixToolset.Core.WindowsInstaller.Bind
37 else 37 else
38 { 38 {
39 var lastSequence = 0; 39 var lastSequence = 0;
40 MediaTuple mediaTuple = null; 40 MediaSymbol mediaSymbol = null;
41 var patchGroups = new Dictionary<int, List<FileFacade>>(); 41 var patchGroups = new Dictionary<int, List<FileFacade>>();
42 42
43 // sequence the non-patch-added files 43 // sequence the non-patch-added files
44 foreach (var facade in this.FileFacades) 44 foreach (var facade in this.FileFacades)
45 { 45 {
46 if (null == mediaTuple) 46 if (null == mediaSymbol)
47 { 47 {
48 mediaTuple = mediaRows[facade.DiskId]; 48 mediaSymbol = mediaRows[facade.DiskId];
49 if (SectionType.Patch == this.Section.Type) 49 if (SectionType.Patch == this.Section.Type)
50 { 50 {
51 // patch Media cannot start at zero 51 // patch Media cannot start at zero
52 lastSequence = mediaTuple.LastSequence ?? 1; 52 lastSequence = mediaSymbol.LastSequence ?? 1;
53 } 53 }
54 } 54 }
55 else if (mediaTuple.DiskId != facade.DiskId) 55 else if (mediaSymbol.DiskId != facade.DiskId)
56 { 56 {
57 mediaTuple.LastSequence = lastSequence; 57 mediaSymbol.LastSequence = lastSequence;
58 mediaTuple = mediaRows[facade.DiskId]; 58 mediaSymbol = mediaRows[facade.DiskId];
59 } 59 }
60 60
61 if (facade.PatchGroup.HasValue) 61 if (facade.PatchGroup.HasValue)
@@ -74,10 +74,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
74 } 74 }
75 } 75 }
76 76
77 if (null != mediaTuple) 77 if (null != mediaSymbol)
78 { 78 {
79 mediaTuple.LastSequence = lastSequence; 79 mediaSymbol.LastSequence = lastSequence;
80 mediaTuple = null; 80 mediaSymbol = null;
81 } 81 }
82 82
83 // sequence the patch-added files 83 // sequence the patch-added files
@@ -85,23 +85,23 @@ namespace WixToolset.Core.WindowsInstaller.Bind
85 { 85 {
86 foreach (var facade in patchGroup) 86 foreach (var facade in patchGroup)
87 { 87 {
88 if (null == mediaTuple) 88 if (null == mediaSymbol)
89 { 89 {
90 mediaTuple = mediaRows[facade.DiskId]; 90 mediaSymbol = mediaRows[facade.DiskId];
91 } 91 }
92 else if (mediaTuple.DiskId != facade.DiskId) 92 else if (mediaSymbol.DiskId != facade.DiskId)
93 { 93 {
94 mediaTuple.LastSequence = lastSequence; 94 mediaSymbol.LastSequence = lastSequence;
95 mediaTuple = mediaRows[facade.DiskId]; 95 mediaSymbol = mediaRows[facade.DiskId];
96 } 96 }
97 97
98 facade.Sequence = ++lastSequence; 98 facade.Sequence = ++lastSequence;
99 } 99 }
100 } 100 }
101 101
102 if (null != mediaTuple) 102 if (null != mediaSymbol)
103 { 103 {
104 mediaTuple.LastSequence = lastSequence; 104 mediaSymbol.LastSequence = lastSequence;
105 } 105 }
106 } 106 }
107 } 107 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateTransformsWithFileFacades.cs b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateTransformsWithFileFacades.cs
index 2af45e77..944fb224 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/UpdateTransformsWithFileFacades.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/UpdateTransformsWithFileFacades.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Core.Bind; 8 using WixToolset.Core.Bind;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Data.WindowsInstaller; 11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Data.WindowsInstaller.Rows; 12 using WixToolset.Data.WindowsInstaller.Rows;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -307,9 +307,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
307 ref duplicateFilesSequence); 307 ref duplicateFilesSequence);
308 if (!hasPatchFilesAction) 308 if (!hasPatchFilesAction)
309 { 309 {
310 WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionTuple); 310 WindowsInstallerStandard.TryGetStandardAction(tableName, "PatchFiles", out var patchFilesActionSymbol);
311 311
312 var sequence = patchFilesActionTuple.Sequence; 312 var sequence = patchFilesActionSymbol.Sequence;
313 313
314 // Test for default sequence value's appropriateness 314 // Test for default sequence value's appropriateness
315 if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence)) 315 if (installFilesSequence >= sequence || (0 != duplicateFilesSequence && duplicateFilesSequence <= sequence))
@@ -318,14 +318,14 @@ namespace WixToolset.Core.WindowsInstaller.Bind
318 { 318 {
319 if (duplicateFilesSequence < installFilesSequence) 319 if (duplicateFilesSequence < installFilesSequence)
320 { 320 {
321 throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionTuple.Action)); 321 throw new WixException(ErrorMessages.InsertInvalidSequenceActionOrder(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
322 } 322 }
323 else 323 else
324 { 324 {
325 sequence = (duplicateFilesSequence + installFilesSequence) / 2; 325 sequence = (duplicateFilesSequence + installFilesSequence) / 2;
326 if (installFilesSequence == sequence || duplicateFilesSequence == sequence) 326 if (installFilesSequence == sequence || duplicateFilesSequence == sequence)
327 { 327 {
328 throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionTuple.Action)); 328 throw new WixException(ErrorMessages.InsertSequenceNoSpace(mainFileRow.SourceLineNumbers, tableName, "InstallFiles", "DuplicateFiles", patchFilesActionSymbol.Action));
329 } 329 }
330 } 330 }
331 } 331 }
@@ -342,8 +342,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
342 } 342 }
343 343
344 var patchAction = sequenceTable.CreateRow(null); 344 var patchAction = sequenceTable.CreateRow(null);
345 patchAction[0] = patchFilesActionTuple.Action; 345 patchAction[0] = patchFilesActionSymbol.Action;
346 patchAction[1] = patchFilesActionTuple.Condition; 346 patchAction[1] = patchFilesActionSymbol.Condition;
347 patchAction[2] = sequence; 347 patchAction[2] = sequence;
348 patchAction.Operation = RowOperation.Add; 348 patchAction.Operation = RowOperation.Add;
349 } 349 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Bind/ValidateComponentGuidsCommand.cs b/src/WixToolset.Core.WindowsInstaller/Bind/ValidateComponentGuidsCommand.cs
index 020a83fc..5cad9247 100644
--- a/src/WixToolset.Core.WindowsInstaller/Bind/ValidateComponentGuidsCommand.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Bind/ValidateComponentGuidsCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Linq; 7 using System.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 using WixToolset.Extensibility.Services; 10 using WixToolset.Extensibility.Services;
11 11
12 /// <summary> 12 /// <summary>
@@ -32,30 +32,30 @@ namespace WixToolset.Core.WindowsInstaller.Bind
32 { 32 {
33 var componentGuidConditions = new Dictionary<string, bool>(); 33 var componentGuidConditions = new Dictionary<string, bool>();
34 34
35 foreach (var componentTuple in this.Section.Tuples.OfType<ComponentTuple>()) 35 foreach (var componentSymbol in this.Section.Symbols.OfType<ComponentSymbol>())
36 { 36 {
37 // We don't care about unmanaged components and if there's a * GUID remaining, 37 // We don't care about unmanaged components and if there's a * GUID remaining,
38 // there's already an error that prevented it from being replaced with a real GUID. 38 // there's already an error that prevented it from being replaced with a real GUID.
39 if (!String.IsNullOrEmpty(componentTuple.ComponentId) && "*" != componentTuple.ComponentId) 39 if (!String.IsNullOrEmpty(componentSymbol.ComponentId) && "*" != componentSymbol.ComponentId)
40 { 40 {
41 var thisComponentHasCondition = !String.IsNullOrEmpty(componentTuple.Condition); 41 var thisComponentHasCondition = !String.IsNullOrEmpty(componentSymbol.Condition);
42 var allComponentsHaveConditions = thisComponentHasCondition; 42 var allComponentsHaveConditions = thisComponentHasCondition;
43 43
44 if (componentGuidConditions.TryGetValue(componentTuple.ComponentId, out var alreadyCheckedCondition)) 44 if (componentGuidConditions.TryGetValue(componentSymbol.ComponentId, out var alreadyCheckedCondition))
45 { 45 {
46 allComponentsHaveConditions = thisComponentHasCondition && alreadyCheckedCondition; 46 allComponentsHaveConditions = thisComponentHasCondition && alreadyCheckedCondition;
47 47
48 if (allComponentsHaveConditions) 48 if (allComponentsHaveConditions)
49 { 49 {
50 this.Messaging.Write(WarningMessages.DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(componentTuple.SourceLineNumbers, componentTuple.Id.Id, componentTuple.ComponentId)); 50 this.Messaging.Write(WarningMessages.DuplicateComponentGuidsMustHaveMutuallyExclusiveConditions(componentSymbol.SourceLineNumbers, componentSymbol.Id.Id, componentSymbol.ComponentId));
51 } 51 }
52 else 52 else
53 { 53 {
54 this.Messaging.Write(ErrorMessages.DuplicateComponentGuids(componentTuple.SourceLineNumbers, componentTuple.Id.Id, componentTuple.ComponentId)); 54 this.Messaging.Write(ErrorMessages.DuplicateComponentGuids(componentSymbol.SourceLineNumbers, componentSymbol.Id.Id, componentSymbol.ComponentId));
55 } 55 }
56 } 56 }
57 57
58 componentGuidConditions[componentTuple.ComponentId] = allComponentsHaveConditions; 58 componentGuidConditions[componentSymbol.ComponentId] = allComponentsHaveConditions;
59 } 59 }
60 } 60 }
61 } 61 }
diff --git a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs
index 7c3fd6be..72985c1c 100644
--- a/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs
@@ -14,7 +14,7 @@ namespace WixToolset.Core.WindowsInstaller
14 using System.Xml.Linq; 14 using System.Xml.Linq;
15 using WixToolset.Core; 15 using WixToolset.Core;
16 using WixToolset.Data; 16 using WixToolset.Data;
17 using WixToolset.Data.Tuples; 17 using WixToolset.Data.Symbols;
18 using WixToolset.Data.WindowsInstaller; 18 using WixToolset.Data.WindowsInstaller;
19 using WixToolset.Data.WindowsInstaller.Rows; 19 using WixToolset.Data.WindowsInstaller.Rows;
20 using WixToolset.Extensibility; 20 using WixToolset.Extensibility;
@@ -92,7 +92,7 @@ namespace WixToolset.Core.WindowsInstaller
92 92
93 private OutputType OutputType { get; set; } 93 private OutputType OutputType { get; set; }
94 94
95 private Dictionary<string, WixActionTuple> StandardActions { get; } 95 private Dictionary<string, WixActionSymbol> StandardActions { get; }
96 96
97 /// <summary> 97 /// <summary>
98 /// Decompile the database file. 98 /// Decompile the database file.
@@ -262,23 +262,23 @@ namespace WixToolset.Core.WindowsInstaller
262 /// <summary> 262 /// <summary>
263 /// Creates an action element. 263 /// Creates an action element.
264 /// </summary> 264 /// </summary>
265 /// <param name="actionTuple">The action from which the element should be created.</param> 265 /// <param name="actionSymbol">The action from which the element should be created.</param>
266 private void CreateActionElement(WixActionTuple actionTuple) 266 private void CreateActionElement(WixActionSymbol actionSymbol)
267 { 267 {
268 Wix.ISchemaElement actionElement = null; 268 Wix.ISchemaElement actionElement = null;
269 269
270 if (null != this.core.GetIndexedElement("CustomAction", actionTuple.Action)) // custom action 270 if (null != this.core.GetIndexedElement("CustomAction", actionSymbol.Action)) // custom action
271 { 271 {
272 var custom = new Wix.Custom(); 272 var custom = new Wix.Custom();
273 273
274 custom.Action = actionTuple.Action; 274 custom.Action = actionSymbol.Action;
275 275
276 if (null != actionTuple.Condition) 276 if (null != actionSymbol.Condition)
277 { 277 {
278 custom.Content = actionTuple.Condition; 278 custom.Content = actionSymbol.Condition;
279 } 279 }
280 280
281 switch (actionTuple.Sequence) 281 switch (actionSymbol.Sequence)
282 { 282 {
283 case (-4): 283 case (-4):
284 custom.OnExit = Wix.ExitType.suspend; 284 custom.OnExit = Wix.ExitType.suspend;
@@ -293,35 +293,35 @@ namespace WixToolset.Core.WindowsInstaller
293 custom.OnExit = Wix.ExitType.success; 293 custom.OnExit = Wix.ExitType.success;
294 break; 294 break;
295 default: 295 default:
296 if (null != actionTuple.Before) 296 if (null != actionSymbol.Before)
297 { 297 {
298 custom.Before = actionTuple.Before; 298 custom.Before = actionSymbol.Before;
299 } 299 }
300 else if (null != actionTuple.After) 300 else if (null != actionSymbol.After)
301 { 301 {
302 custom.After = actionTuple.After; 302 custom.After = actionSymbol.After;
303 } 303 }
304 else if (actionTuple.Sequence.HasValue) 304 else if (actionSymbol.Sequence.HasValue)
305 { 305 {
306 custom.Sequence = actionTuple.Sequence.Value; 306 custom.Sequence = actionSymbol.Sequence.Value;
307 } 307 }
308 break; 308 break;
309 } 309 }
310 310
311 actionElement = custom; 311 actionElement = custom;
312 } 312 }
313 else if (null != this.core.GetIndexedElement("Dialog", actionTuple.Action)) // dialog 313 else if (null != this.core.GetIndexedElement("Dialog", actionSymbol.Action)) // dialog
314 { 314 {
315 var show = new Wix.Show(); 315 var show = new Wix.Show();
316 316
317 show.Dialog = actionTuple.Action; 317 show.Dialog = actionSymbol.Action;
318 318
319 if (null != actionTuple.Condition) 319 if (null != actionSymbol.Condition)
320 { 320 {
321 show.Content = actionTuple.Condition; 321 show.Content = actionSymbol.Condition;
322 } 322 }
323 323
324 switch (actionTuple.Sequence) 324 switch (actionSymbol.Sequence)
325 { 325 {
326 case (-4): 326 case (-4):
327 show.OnExit = Wix.ExitType.suspend; 327 show.OnExit = Wix.ExitType.suspend;
@@ -336,17 +336,17 @@ namespace WixToolset.Core.WindowsInstaller
336 show.OnExit = Wix.ExitType.success; 336 show.OnExit = Wix.ExitType.success;
337 break; 337 break;
338 default: 338 default:
339 if (null != actionTuple.Before) 339 if (null != actionSymbol.Before)
340 { 340 {
341 show.Before = actionTuple.Before; 341 show.Before = actionSymbol.Before;
342 } 342 }
343 else if (null != actionTuple.After) 343 else if (null != actionSymbol.After)
344 { 344 {
345 show.After = actionTuple.After; 345 show.After = actionSymbol.After;
346 } 346 }
347 else if (actionTuple.Sequence.HasValue) 347 else if (actionSymbol.Sequence.HasValue)
348 { 348 {
349 show.Sequence = actionTuple.Sequence.Value; 349 show.Sequence = actionSymbol.Sequence.Value;
350 } 350 }
351 break; 351 break;
352 } 352 }
@@ -355,18 +355,18 @@ namespace WixToolset.Core.WindowsInstaller
355 } 355 }
356 else // possibly a standard action without suggested sequence information 356 else // possibly a standard action without suggested sequence information
357 { 357 {
358 actionElement = this.CreateStandardActionElement(actionTuple); 358 actionElement = this.CreateStandardActionElement(actionSymbol);
359 } 359 }
360 360
361 // add the action element to the appropriate sequence element 361 // add the action element to the appropriate sequence element
362 if (null != actionElement) 362 if (null != actionElement)
363 { 363 {
364 var sequenceTable = actionTuple.SequenceTable.ToString(); 364 var sequenceTable = actionSymbol.SequenceTable.ToString();
365 var sequenceElement = (Wix.IParentElement)this.sequenceElements[sequenceTable]; 365 var sequenceElement = (Wix.IParentElement)this.sequenceElements[sequenceTable];
366 366
367 if (null == sequenceElement) 367 if (null == sequenceElement)
368 { 368 {
369 switch (actionTuple.SequenceTable) 369 switch (actionSymbol.SequenceTable)
370 { 370 {
371 case SequenceTable.AdminExecuteSequence: 371 case SequenceTable.AdminExecuteSequence:
372 sequenceElement = new Wix.AdminExecuteSequence(); 372 sequenceElement = new Wix.AdminExecuteSequence();
@@ -397,7 +397,7 @@ namespace WixToolset.Core.WindowsInstaller
397 } 397 }
398 catch (System.ArgumentException) // action/dialog is not valid for this sequence 398 catch (System.ArgumentException) // action/dialog is not valid for this sequence
399 { 399 {
400 this.Messaging.Write(WarningMessages.IllegalActionInSequence(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 400 this.Messaging.Write(WarningMessages.IllegalActionInSequence(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
401 } 401 }
402 } 402 }
403 } 403 }
@@ -405,40 +405,40 @@ namespace WixToolset.Core.WindowsInstaller
405 /// <summary> 405 /// <summary>
406 /// Creates a standard action element. 406 /// Creates a standard action element.
407 /// </summary> 407 /// </summary>
408 /// <param name="actionTuple">The action row from which the element should be created.</param> 408 /// <param name="actionSymbol">The action row from which the element should be created.</param>
409 /// <returns>The created element.</returns> 409 /// <returns>The created element.</returns>
410 private Wix.ISchemaElement CreateStandardActionElement(WixActionTuple actionTuple) 410 private Wix.ISchemaElement CreateStandardActionElement(WixActionSymbol actionSymbol)
411 { 411 {
412 Wix.ActionSequenceType actionElement = null; 412 Wix.ActionSequenceType actionElement = null;
413 413
414 switch (actionTuple.Action) 414 switch (actionSymbol.Action)
415 { 415 {
416 case "AllocateRegistrySpace": 416 case "AllocateRegistrySpace":
417 actionElement = new Wix.AllocateRegistrySpace(); 417 actionElement = new Wix.AllocateRegistrySpace();
418 break; 418 break;
419 case "AppSearch": 419 case "AppSearch":
420 this.StandardActions.TryGetValue(actionTuple.Id.Id, out var appSearchActionRow); 420 this.StandardActions.TryGetValue(actionSymbol.Id.Id, out var appSearchActionRow);
421 421
422 if (null != actionTuple.Before || null != actionTuple.After || (null != appSearchActionRow && actionTuple.Sequence != appSearchActionRow.Sequence)) 422 if (null != actionSymbol.Before || null != actionSymbol.After || (null != appSearchActionRow && actionSymbol.Sequence != appSearchActionRow.Sequence))
423 { 423 {
424 var appSearch = new Wix.AppSearch(); 424 var appSearch = new Wix.AppSearch();
425 425
426 if (null != actionTuple.Condition) 426 if (null != actionSymbol.Condition)
427 { 427 {
428 appSearch.Content = actionTuple.Condition; 428 appSearch.Content = actionSymbol.Condition;
429 } 429 }
430 430
431 if (null != actionTuple.Before) 431 if (null != actionSymbol.Before)
432 { 432 {
433 appSearch.Before = actionTuple.Before; 433 appSearch.Before = actionSymbol.Before;
434 } 434 }
435 else if (null != actionTuple.After) 435 else if (null != actionSymbol.After)
436 { 436 {
437 appSearch.After = actionTuple.After; 437 appSearch.After = actionSymbol.After;
438 } 438 }
439 else if (actionTuple.Sequence.HasValue) 439 else if (actionSymbol.Sequence.HasValue)
440 { 440 {
441 appSearch.Sequence = actionTuple.Sequence.Value; 441 appSearch.Sequence = actionSymbol.Sequence.Value;
442 } 442 }
443 443
444 return appSearch; 444 return appSearch;
@@ -449,7 +449,7 @@ namespace WixToolset.Core.WindowsInstaller
449 break; 449 break;
450 case "CCPSearch": 450 case "CCPSearch":
451 var ccpSearch = new Wix.CCPSearch(); 451 var ccpSearch = new Wix.CCPSearch();
452 Decompiler.SequenceRelativeAction(actionTuple, ccpSearch); 452 Decompiler.SequenceRelativeAction(actionSymbol, ccpSearch);
453 return ccpSearch; 453 return ccpSearch;
454 case "CostFinalize": 454 case "CostFinalize":
455 actionElement = new Wix.CostFinalize(); 455 actionElement = new Wix.CostFinalize();
@@ -468,7 +468,7 @@ namespace WixToolset.Core.WindowsInstaller
468 break; 468 break;
469 case "DisableRollback": 469 case "DisableRollback":
470 var disableRollback = new Wix.DisableRollback(); 470 var disableRollback = new Wix.DisableRollback();
471 Decompiler.SequenceRelativeAction(actionTuple, disableRollback); 471 Decompiler.SequenceRelativeAction(actionSymbol, disableRollback);
472 return disableRollback; 472 return disableRollback;
473 case "DuplicateFiles": 473 case "DuplicateFiles":
474 actionElement = new Wix.DuplicateFiles(); 474 actionElement = new Wix.DuplicateFiles();
@@ -481,22 +481,22 @@ namespace WixToolset.Core.WindowsInstaller
481 break; 481 break;
482 case "FindRelatedProducts": 482 case "FindRelatedProducts":
483 var findRelatedProducts = new Wix.FindRelatedProducts(); 483 var findRelatedProducts = new Wix.FindRelatedProducts();
484 Decompiler.SequenceRelativeAction(actionTuple, findRelatedProducts); 484 Decompiler.SequenceRelativeAction(actionSymbol, findRelatedProducts);
485 return findRelatedProducts; 485 return findRelatedProducts;
486 case "ForceReboot": 486 case "ForceReboot":
487 var forceReboot = new Wix.ForceReboot(); 487 var forceReboot = new Wix.ForceReboot();
488 Decompiler.SequenceRelativeAction(actionTuple, forceReboot); 488 Decompiler.SequenceRelativeAction(actionSymbol, forceReboot);
489 return forceReboot; 489 return forceReboot;
490 case "InstallAdminPackage": 490 case "InstallAdminPackage":
491 actionElement = new Wix.InstallAdminPackage(); 491 actionElement = new Wix.InstallAdminPackage();
492 break; 492 break;
493 case "InstallExecute": 493 case "InstallExecute":
494 var installExecute = new Wix.InstallExecute(); 494 var installExecute = new Wix.InstallExecute();
495 Decompiler.SequenceRelativeAction(actionTuple, installExecute); 495 Decompiler.SequenceRelativeAction(actionSymbol, installExecute);
496 return installExecute; 496 return installExecute;
497 case "InstallExecuteAgain": 497 case "InstallExecuteAgain":
498 var installExecuteAgain = new Wix.InstallExecuteAgain(); 498 var installExecuteAgain = new Wix.InstallExecuteAgain();
499 Decompiler.SequenceRelativeAction(actionTuple, installExecuteAgain); 499 Decompiler.SequenceRelativeAction(actionSymbol, installExecuteAgain);
500 return installExecuteAgain; 500 return installExecuteAgain;
501 case "InstallFiles": 501 case "InstallFiles":
502 actionElement = new Wix.InstallFiles(); 502 actionElement = new Wix.InstallFiles();
@@ -521,7 +521,7 @@ namespace WixToolset.Core.WindowsInstaller
521 break; 521 break;
522 case "LaunchConditions": 522 case "LaunchConditions":
523 var launchConditions = new Wix.LaunchConditions(); 523 var launchConditions = new Wix.LaunchConditions();
524 Decompiler.SequenceRelativeAction(actionTuple, launchConditions); 524 Decompiler.SequenceRelativeAction(actionSymbol, launchConditions);
525 return launchConditions; 525 return launchConditions;
526 case "MigrateFeatureStates": 526 case "MigrateFeatureStates":
527 actionElement = new Wix.MigrateFeatureStates(); 527 actionElement = new Wix.MigrateFeatureStates();
@@ -585,7 +585,7 @@ namespace WixToolset.Core.WindowsInstaller
585 break; 585 break;
586 case "RemoveExistingProducts": 586 case "RemoveExistingProducts":
587 var removeExistingProducts = new Wix.RemoveExistingProducts(); 587 var removeExistingProducts = new Wix.RemoveExistingProducts();
588 Decompiler.SequenceRelativeAction(actionTuple, removeExistingProducts); 588 Decompiler.SequenceRelativeAction(actionSymbol, removeExistingProducts);
589 return removeExistingProducts; 589 return removeExistingProducts;
590 case "RemoveFiles": 590 case "RemoveFiles":
591 actionElement = new Wix.RemoveFiles(); 591 actionElement = new Wix.RemoveFiles();
@@ -607,15 +607,15 @@ namespace WixToolset.Core.WindowsInstaller
607 break; 607 break;
608 case "ResolveSource": 608 case "ResolveSource":
609 var resolveSource = new Wix.ResolveSource(); 609 var resolveSource = new Wix.ResolveSource();
610 Decompiler.SequenceRelativeAction(actionTuple, resolveSource); 610 Decompiler.SequenceRelativeAction(actionSymbol, resolveSource);
611 return resolveSource; 611 return resolveSource;
612 case "RMCCPSearch": 612 case "RMCCPSearch":
613 var rmccpSearch = new Wix.RMCCPSearch(); 613 var rmccpSearch = new Wix.RMCCPSearch();
614 Decompiler.SequenceRelativeAction(actionTuple, rmccpSearch); 614 Decompiler.SequenceRelativeAction(actionSymbol, rmccpSearch);
615 return rmccpSearch; 615 return rmccpSearch;
616 case "ScheduleReboot": 616 case "ScheduleReboot":
617 var scheduleReboot = new Wix.ScheduleReboot(); 617 var scheduleReboot = new Wix.ScheduleReboot();
618 Decompiler.SequenceRelativeAction(actionTuple, scheduleReboot); 618 Decompiler.SequenceRelativeAction(actionSymbol, scheduleReboot);
619 return scheduleReboot; 619 return scheduleReboot;
620 case "SelfRegModules": 620 case "SelfRegModules":
621 actionElement = new Wix.SelfRegModules(); 621 actionElement = new Wix.SelfRegModules();
@@ -672,13 +672,13 @@ namespace WixToolset.Core.WindowsInstaller
672 actionElement = new Wix.WriteRegistryValues(); 672 actionElement = new Wix.WriteRegistryValues();
673 break; 673 break;
674 default: 674 default:
675 this.Messaging.Write(WarningMessages.UnknownAction(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 675 this.Messaging.Write(WarningMessages.UnknownAction(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
676 return null; 676 return null;
677 } 677 }
678 678
679 if (actionElement != null) 679 if (actionElement != null)
680 { 680 {
681 this.SequenceStandardAction(actionTuple, actionElement); 681 this.SequenceStandardAction(actionSymbol, actionElement);
682 } 682 }
683 683
684 return actionElement; 684 return actionElement;
@@ -687,48 +687,48 @@ namespace WixToolset.Core.WindowsInstaller
687 /// <summary> 687 /// <summary>
688 /// Applies the condition and sequence to a standard action element based on the action row data. 688 /// Applies the condition and sequence to a standard action element based on the action row data.
689 /// </summary> 689 /// </summary>
690 /// <param name="actionTuple">Action data from the database.</param> 690 /// <param name="actionSymbol">Action data from the database.</param>
691 /// <param name="actionElement">Element to be sequenced.</param> 691 /// <param name="actionElement">Element to be sequenced.</param>
692 private void SequenceStandardAction(WixActionTuple actionTuple, Wix.ActionSequenceType actionElement) 692 private void SequenceStandardAction(WixActionSymbol actionSymbol, Wix.ActionSequenceType actionElement)
693 { 693 {
694 if (null != actionTuple.Condition) 694 if (null != actionSymbol.Condition)
695 { 695 {
696 actionElement.Content = actionTuple.Condition; 696 actionElement.Content = actionSymbol.Condition;
697 } 697 }
698 698
699 if ((null != actionTuple.Before || null != actionTuple.After) && 0 == actionTuple.Sequence) 699 if ((null != actionSymbol.Before || null != actionSymbol.After) && 0 == actionSymbol.Sequence)
700 { 700 {
701 this.Messaging.Write(WarningMessages.DecompiledStandardActionRelativelyScheduledInModule(actionTuple.SourceLineNumbers, actionTuple.SequenceTable.ToString(), actionTuple.Action)); 701 this.Messaging.Write(WarningMessages.DecompiledStandardActionRelativelyScheduledInModule(actionSymbol.SourceLineNumbers, actionSymbol.SequenceTable.ToString(), actionSymbol.Action));
702 } 702 }
703 else if (actionTuple.Sequence.HasValue) 703 else if (actionSymbol.Sequence.HasValue)
704 { 704 {
705 actionElement.Sequence = actionTuple.Sequence.Value; 705 actionElement.Sequence = actionSymbol.Sequence.Value;
706 } 706 }
707 } 707 }
708 708
709 /// <summary> 709 /// <summary>
710 /// Applies the condition and relative sequence to an action element based on the action row data. 710 /// Applies the condition and relative sequence to an action element based on the action row data.
711 /// </summary> 711 /// </summary>
712 /// <param name="actionTuple">Action data from the database.</param> 712 /// <param name="actionSymbol">Action data from the database.</param>
713 /// <param name="actionElement">Element to be sequenced.</param> 713 /// <param name="actionElement">Element to be sequenced.</param>
714 private static void SequenceRelativeAction(WixActionTuple actionTuple, Wix.ActionModuleSequenceType actionElement) 714 private static void SequenceRelativeAction(WixActionSymbol actionSymbol, Wix.ActionModuleSequenceType actionElement)
715 { 715 {
716 if (null != actionTuple.Condition) 716 if (null != actionSymbol.Condition)
717 { 717 {
718 actionElement.Content = actionTuple.Condition; 718 actionElement.Content = actionSymbol.Condition;
719 } 719 }
720 720
721 if (null != actionTuple.Before) 721 if (null != actionSymbol.Before)
722 { 722 {
723 actionElement.Before = actionTuple.Before; 723 actionElement.Before = actionSymbol.Before;
724 } 724 }
725 else if (null != actionTuple.After) 725 else if (null != actionSymbol.After)
726 { 726 {
727 actionElement.After = actionTuple.After; 727 actionElement.After = actionSymbol.After;
728 } 728 }
729 else if (actionTuple.Sequence.HasValue) 729 else if (actionSymbol.Sequence.HasValue)
730 { 730 {
731 actionElement.Sequence = actionTuple.Sequence.Value; 731 actionElement.Sequence = actionSymbol.Sequence.Value;
732 } 732 }
733 } 733 }
734 734
@@ -2507,53 +2507,53 @@ namespace WixToolset.Core.WindowsInstaller
2507 2507
2508 if (null != table) 2508 if (null != table)
2509 { 2509 {
2510 var actionTuples = new List<WixActionTuple>(); 2510 var actionSymbols = new List<WixActionSymbol>();
2511 var needAbsoluteScheduling = this.SuppressRelativeActionSequencing; 2511 var needAbsoluteScheduling = this.SuppressRelativeActionSequencing;
2512 var nonSequencedActionRows = new Dictionary<string, WixActionTuple>(); 2512 var nonSequencedActionRows = new Dictionary<string, WixActionSymbol>();
2513 var suppressedRelativeActionRows = new Dictionary<string, WixActionTuple>(); 2513 var suppressedRelativeActionRows = new Dictionary<string, WixActionSymbol>();
2514 2514
2515 // create a sorted array of actions in this table 2515 // create a sorted array of actions in this table
2516 foreach (var row in table.Rows) 2516 foreach (var row in table.Rows)
2517 { 2517 {
2518 var action = row.FieldAsString(0); 2518 var action = row.FieldAsString(0);
2519 var actionTuple = new WixActionTuple(null, new Identifier(AccessModifier.Public, sequenceTable, action)); 2519 var actionSymbol = new WixActionSymbol(null, new Identifier(AccessModifier.Public, sequenceTable, action));
2520 2520
2521 actionTuple.Action = action; 2521 actionSymbol.Action = action;
2522 2522
2523 if (null != row[1]) 2523 if (null != row[1])
2524 { 2524 {
2525 actionTuple.Condition = Convert.ToString(row[1]); 2525 actionSymbol.Condition = Convert.ToString(row[1]);
2526 } 2526 }
2527 2527
2528 actionTuple.Sequence = Convert.ToInt32(row[2]); 2528 actionSymbol.Sequence = Convert.ToInt32(row[2]);
2529 2529
2530 actionTuple.SequenceTable = sequenceTable; 2530 actionSymbol.SequenceTable = sequenceTable;
2531 2531
2532 actionTuples.Add(actionTuple); 2532 actionSymbols.Add(actionSymbol);
2533 } 2533 }
2534 actionTuples = actionTuples.OrderBy(t => t.Sequence).ToList(); 2534 actionSymbols = actionSymbols.OrderBy(t => t.Sequence).ToList();
2535 2535
2536 for (var i = 0; i < actionTuples.Count && !needAbsoluteScheduling; i++) 2536 for (var i = 0; i < actionSymbols.Count && !needAbsoluteScheduling; i++)
2537 { 2537 {
2538 var actionTuple = actionTuples[i]; 2538 var actionSymbol = actionSymbols[i];
2539 this.StandardActions.TryGetValue(actionTuple.Id.Id, out var standardActionRow); 2539 this.StandardActions.TryGetValue(actionSymbol.Id.Id, out var standardActionRow);
2540 2540
2541 // create actions for custom actions, dialogs, AppSearch when its moved, and standard actions with non-standard conditions 2541 // create actions for custom actions, dialogs, AppSearch when its moved, and standard actions with non-standard conditions
2542 if ("AppSearch" == actionTuple.Action || null == standardActionRow || actionTuple.Condition != standardActionRow.Condition) 2542 if ("AppSearch" == actionSymbol.Action || null == standardActionRow || actionSymbol.Condition != standardActionRow.Condition)
2543 { 2543 {
2544 WixActionTuple previousActionTuple = null; 2544 WixActionSymbol previousActionSymbol = null;
2545 WixActionTuple nextActionTuple = null; 2545 WixActionSymbol nextActionSymbol = null;
2546 2546
2547 // find the previous action row if there is one 2547 // find the previous action row if there is one
2548 if (0 <= i - 1) 2548 if (0 <= i - 1)
2549 { 2549 {
2550 previousActionTuple = actionTuples[i - 1]; 2550 previousActionSymbol = actionSymbols[i - 1];
2551 } 2551 }
2552 2552
2553 // find the next action row if there is one 2553 // find the next action row if there is one
2554 if (actionTuples.Count > i + 1) 2554 if (actionSymbols.Count > i + 1)
2555 { 2555 {
2556 nextActionTuple = actionTuples[i + 1]; 2556 nextActionSymbol = actionSymbols[i + 1];
2557 } 2557 }
2558 2558
2559 // the logic for setting the before or after attribute for an action: 2559 // the logic for setting the before or after attribute for an action:
@@ -2565,47 +2565,47 @@ namespace WixToolset.Core.WindowsInstaller
2565 // 6. If this action is AppSearch and has all standard information, ignore it. 2565 // 6. If this action is AppSearch and has all standard information, ignore it.
2566 // 7. If this action is standard and has a non-standard condition, create the action without any scheduling information. 2566 // 7. If this action is standard and has a non-standard condition, create the action without any scheduling information.
2567 // 8. Everything must be absolutely sequenced. 2567 // 8. Everything must be absolutely sequenced.
2568 if ((null != previousActionTuple && actionTuple.Sequence == previousActionTuple.Sequence) || (null != nextActionTuple && actionTuple.Sequence == nextActionTuple.Sequence)) 2568 if ((null != previousActionSymbol && actionSymbol.Sequence == previousActionSymbol.Sequence) || (null != nextActionSymbol && actionSymbol.Sequence == nextActionSymbol.Sequence))
2569 { 2569 {
2570 needAbsoluteScheduling = true; 2570 needAbsoluteScheduling = true;
2571 } 2571 }
2572 else if (null != nextActionTuple && this.StandardActions.ContainsKey(nextActionTuple.Id.Id) && actionTuple.Sequence + 1 == nextActionTuple.Sequence) 2572 else if (null != nextActionSymbol && this.StandardActions.ContainsKey(nextActionSymbol.Id.Id) && actionSymbol.Sequence + 1 == nextActionSymbol.Sequence)
2573 { 2573 {
2574 actionTuple.Before = nextActionTuple.Action; 2574 actionSymbol.Before = nextActionSymbol.Action;
2575 } 2575 }
2576 else if (null != previousActionTuple && this.StandardActions.ContainsKey(previousActionTuple.Id.Id) && actionTuple.Sequence - 1 == previousActionTuple.Sequence) 2576 else if (null != previousActionSymbol && this.StandardActions.ContainsKey(previousActionSymbol.Id.Id) && actionSymbol.Sequence - 1 == previousActionSymbol.Sequence)
2577 { 2577 {
2578 actionTuple.After = previousActionTuple.Action; 2578 actionSymbol.After = previousActionSymbol.Action;
2579 } 2579 }
2580 else if (null == standardActionRow && null != previousActionTuple && actionTuple.Sequence - 1 == previousActionTuple.Sequence && previousActionTuple.Before != actionTuple.Action) 2580 else if (null == standardActionRow && null != previousActionSymbol && actionSymbol.Sequence - 1 == previousActionSymbol.Sequence && previousActionSymbol.Before != actionSymbol.Action)
2581 { 2581 {
2582 actionTuple.After = previousActionTuple.Action; 2582 actionSymbol.After = previousActionSymbol.Action;
2583 } 2583 }
2584 else if (null == standardActionRow && null != previousActionTuple && actionTuple.Sequence != previousActionTuple.Sequence && null != nextActionTuple && actionTuple.Sequence + 1 == nextActionTuple.Sequence) 2584 else if (null == standardActionRow && null != previousActionSymbol && actionSymbol.Sequence != previousActionSymbol.Sequence && null != nextActionSymbol && actionSymbol.Sequence + 1 == nextActionSymbol.Sequence)
2585 { 2585 {
2586 actionTuple.Before = nextActionTuple.Action; 2586 actionSymbol.Before = nextActionSymbol.Action;
2587 } 2587 }
2588 else if ("AppSearch" == actionTuple.Action && null != standardActionRow && actionTuple.Sequence == standardActionRow.Sequence && actionTuple.Condition == standardActionRow.Condition) 2588 else if ("AppSearch" == actionSymbol.Action && null != standardActionRow && actionSymbol.Sequence == standardActionRow.Sequence && actionSymbol.Condition == standardActionRow.Condition)
2589 { 2589 {
2590 // ignore an AppSearch row which has the WiX standard sequence and a standard condition 2590 // ignore an AppSearch row which has the WiX standard sequence and a standard condition
2591 } 2591 }
2592 else if (null != standardActionRow && actionTuple.Condition != standardActionRow.Condition) // standard actions get their standard sequence numbers 2592 else if (null != standardActionRow && actionSymbol.Condition != standardActionRow.Condition) // standard actions get their standard sequence numbers
2593 { 2593 {
2594 nonSequencedActionRows.Add(actionTuple.Id.Id, actionTuple); 2594 nonSequencedActionRows.Add(actionSymbol.Id.Id, actionSymbol);
2595 } 2595 }
2596 else if (0 < actionTuple.Sequence) 2596 else if (0 < actionSymbol.Sequence)
2597 { 2597 {
2598 needAbsoluteScheduling = true; 2598 needAbsoluteScheduling = true;
2599 } 2599 }
2600 } 2600 }
2601 else 2601 else
2602 { 2602 {
2603 suppressedRelativeActionRows.Add(actionTuple.Id.Id, actionTuple); 2603 suppressedRelativeActionRows.Add(actionSymbol.Id.Id, actionSymbol);
2604 } 2604 }
2605 } 2605 }
2606 2606
2607 // create the actions now that we know if they must be absolutely or relatively scheduled 2607 // create the actions now that we know if they must be absolutely or relatively scheduled
2608 foreach (var actionRow in actionTuples) 2608 foreach (var actionRow in actionSymbols)
2609 { 2609 {
2610 var key = actionRow.Id.Id; 2610 var key = actionRow.Id.Id;
2611 2611
@@ -2650,7 +2650,7 @@ namespace WixToolset.Core.WindowsInstaller
2650 { 2650 {
2651 foreach (var row in table.Rows) 2651 foreach (var row in table.Rows)
2652 { 2652 {
2653 var actionRow = new WixActionTuple(null, new Identifier(AccessModifier.Public, sequenceTable, row.FieldAsString(0))); 2653 var actionRow = new WixActionSymbol(null, new Identifier(AccessModifier.Public, sequenceTable, row.FieldAsString(0)));
2654 2654
2655 actionRow.Action = row.FieldAsString(0); 2655 actionRow.Action = row.FieldAsString(0);
2656 2656
diff --git a/src/WixToolset.Core.WindowsInstaller/Differ.cs b/src/WixToolset.Core.WindowsInstaller/Differ.cs
index 0e1a7315..304d0152 100644
--- a/src/WixToolset.Core.WindowsInstaller/Differ.cs
+++ b/src/WixToolset.Core.WindowsInstaller/Differ.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core.WindowsInstaller
10 using System.Globalization; 10 using System.Globalization;
11 using WixToolset.Core.WindowsInstaller.Msi; 11 using WixToolset.Core.WindowsInstaller.Msi;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Data.WindowsInstaller.Rows; 15 using WixToolset.Data.WindowsInstaller.Rows;
16 using WixToolset.Extensibility; 16 using WixToolset.Extensibility;
diff --git a/src/WixToolset.Core.WindowsInstaller/ExtensibilityServices/WindowsInstallerBackendHelper.cs b/src/WixToolset.Core.WindowsInstaller/ExtensibilityServices/WindowsInstallerBackendHelper.cs
index a1df335c..0082bc7c 100644
--- a/src/WixToolset.Core.WindowsInstaller/ExtensibilityServices/WindowsInstallerBackendHelper.cs
+++ b/src/WixToolset.Core.WindowsInstaller/ExtensibilityServices/WindowsInstallerBackendHelper.cs
@@ -9,34 +9,34 @@ namespace WixToolset.Core.WindowsInstaller.ExtensibilityServices
9 9
10 internal class WindowsInstallerBackendHelper : IWindowsInstallerBackendHelper 10 internal class WindowsInstallerBackendHelper : IWindowsInstallerBackendHelper
11 { 11 {
12 public Row CreateRow(IntermediateSection section, IntermediateTuple tuple, WindowsInstallerData output, TableDefinition tableDefinition) 12 public Row CreateRow(IntermediateSection section, IntermediateSymbol symbol, WindowsInstallerData output, TableDefinition tableDefinition)
13 { 13 {
14 var table = output.EnsureTable(tableDefinition); 14 var table = output.EnsureTable(tableDefinition);
15 15
16 var row = table.CreateRow(tuple.SourceLineNumbers); 16 var row = table.CreateRow(symbol.SourceLineNumbers);
17 row.SectionId = section.Id; 17 row.SectionId = section.Id;
18 18
19 return row; 19 return row;
20 } 20 }
21 21
22 public bool TryAddTupleToOutputMatchingTableDefinitions(IntermediateSection section, IntermediateTuple tuple, WindowsInstallerData output, TableDefinitionCollection tableDefinitions) 22 public bool TryAddSymbolToOutputMatchingTableDefinitions(IntermediateSection section, IntermediateSymbol symbol, WindowsInstallerData output, TableDefinitionCollection tableDefinitions)
23 { 23 {
24 var tableDefinition = tableDefinitions.FirstOrDefault(t => t.TupleDefinition?.Name == tuple.Definition.Name); 24 var tableDefinition = tableDefinitions.FirstOrDefault(t => t.SymbolDefinition?.Name == symbol.Definition.Name);
25 if (tableDefinition == null) 25 if (tableDefinition == null)
26 { 26 {
27 return false; 27 return false;
28 } 28 }
29 29
30 var row = this.CreateRow(section, tuple, output, tableDefinition); 30 var row = this.CreateRow(section, symbol, output, tableDefinition);
31 var rowOffset = 0; 31 var rowOffset = 0;
32 32
33 if (tableDefinition.TupleIdIsPrimaryKey) 33 if (tableDefinition.SymbolIdIsPrimaryKey)
34 { 34 {
35 row[0] = tuple.Id.Id; 35 row[0] = symbol.Id.Id;
36 rowOffset = 1; 36 rowOffset = 1;
37 } 37 }
38 38
39 for (var i = 0; i < tuple.Fields.Length; ++i) 39 for (var i = 0; i < symbol.Fields.Length; ++i)
40 { 40 {
41 if (i < tableDefinition.Columns.Length) 41 if (i < tableDefinition.Columns.Length)
42 { 42 {
@@ -45,11 +45,11 @@ namespace WixToolset.Core.WindowsInstaller.ExtensibilityServices
45 switch (column.Type) 45 switch (column.Type)
46 { 46 {
47 case ColumnType.Number: 47 case ColumnType.Number:
48 row[i + rowOffset] = column.Nullable ? tuple.AsNullableNumber(i) : tuple.AsNumber(i); 48 row[i + rowOffset] = column.Nullable ? symbol.AsNullableNumber(i) : symbol.AsNumber(i);
49 break; 49 break;
50 50
51 default: 51 default:
52 row[i + rowOffset] = tuple.AsString(i); 52 row[i + rowOffset] = symbol.AsString(i);
53 break; 53 break;
54 } 54 }
55 } 55 }
diff --git a/src/WixToolset.Core.WindowsInstaller/MspBackend.cs b/src/WixToolset.Core.WindowsInstaller/MspBackend.cs
index 5dc64445..46ff7aa3 100644
--- a/src/WixToolset.Core.WindowsInstaller/MspBackend.cs
+++ b/src/WixToolset.Core.WindowsInstaller/MspBackend.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core.WindowsInstaller
10 using WixToolset.Core.WindowsInstaller.Msi; 10 using WixToolset.Core.WindowsInstaller.Msi;
11 using WixToolset.Core.WindowsInstaller.Unbind; 11 using WixToolset.Core.WindowsInstaller.Unbind;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Data.WindowsInstaller; 14 using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Extensibility; 15 using WixToolset.Extensibility;
16 using WixToolset.Extensibility.Data; 16 using WixToolset.Extensibility.Data;