aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core.Burn/Bind/BaseSearchFacade.cs16
-rw-r--r--src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs182
-rw-r--r--src/WixToolset.Core.Burn/Bind/ExtensionSearchFacade.cs6
-rw-r--r--src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs176
-rw-r--r--src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs84
-rw-r--r--src/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs72
-rw-r--r--src/WixToolset.Core.Burn/Bind/SetVariableSearchFacade.cs16
-rw-r--r--src/WixToolset.Core.Burn/Bundles/AutomaticallySlipstreamPatchesCommand.cs62
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs128
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs22
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs20
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs170
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs8
-rw-r--r--src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs38
-rw-r--r--src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs18
-rw-r--r--src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs46
-rw-r--r--src/WixToolset.Core.Burn/Bundles/OrderSearchesCommand.cs68
-rw-r--r--src/WixToolset.Core.Burn/Bundles/PackageFacade.cs16
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs16
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs96
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessMspPackageCommand.cs28
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs16
-rw-r--r--src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs12
-rw-r--r--src/WixToolset.Core.Burn/Bundles/VerifyPayloadsWithCatalogCommand.cs8
-rw-r--r--src/WixToolset.Core.Burn/ExtensibilityServices/BurnBackendHelper.cs18
-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
-rw-r--r--src/WixToolset.Core/Bind/DelayedField.cs12
-rw-r--r--src/WixToolset.Core/Bind/FileFacade.cs58
-rw-r--r--src/WixToolset.Core/Bind/FileResolver.cs16
-rw-r--r--src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs10
-rw-r--r--src/WixToolset.Core/Bind/ResolveFieldsCommand.cs38
-rw-r--r--src/WixToolset.Core/Binder.cs10
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs10
-rw-r--r--src/WixToolset.Core/Compiler.cs328
-rw-r--r--src/WixToolset.Core/CompilerCore.cs48
-rw-r--r--src/WixToolset.Core/Compiler_2.cs206
-rw-r--r--src/WixToolset.Core/Compiler_Bundle.cs142
-rw-r--r--src/WixToolset.Core/Compiler_EmbeddedUI.cs12
-rw-r--r--src/WixToolset.Core/Compiler_Module.cs32
-rw-r--r--src/WixToolset.Core/Compiler_Patch.cs16
-rw-r--r--src/WixToolset.Core/Compiler_PatchCreation.cs38
-rw-r--r--src/WixToolset.Core/Compiler_UI.cs170
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs126
-rw-r--r--src/WixToolset.Core/ExtensibilityServices/TupleDefinitionCreator.cs24
-rw-r--r--src/WixToolset.Core/Librarian.cs10
-rw-r--r--src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs34
-rw-r--r--src/WixToolset.Core/Link/IntermediateTupleExtensions.cs8
-rw-r--r--src/WixToolset.Core/Link/ReportConflictingTuplesCommand.cs18
-rw-r--r--src/WixToolset.Core/Link/ResolveReferencesCommand.cs104
-rw-r--r--src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs32
-rw-r--r--src/WixToolset.Core/Link/WixGroupingOrdering.cs16
-rw-r--r--src/WixToolset.Core/LinkContext.cs2
-rw-r--r--src/WixToolset.Core/Linker.cs178
-rw-r--r--src/WixToolset.Core/Resolver.cs50
-rw-r--r--src/WixToolset.Core/WixToolsetServiceProvider.cs2
-rw-r--r--src/test/Example.Extension/ExampleCompilerExtension.cs10
-rw-r--r--src/test/Example.Extension/ExampleExtensionData.cs10
-rw-r--r--src/test/Example.Extension/ExampleSearchTuple.cs14
-rw-r--r--src/test/Example.Extension/ExampleTableDefinitions.cs6
-rw-r--r--src/test/Example.Extension/ExampleTuple.cs14
-rw-r--r--src/test/Example.Extension/ExampleTupleDefinitions.cs40
-rw-r--r--src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs16
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs14
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs14
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs12
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs76
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs4
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs4
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs28
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs38
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/WixlibQueryFixture.cs16
102 files changed, 2913 insertions, 2913 deletions
diff --git a/src/WixToolset.Core.Burn/Bind/BaseSearchFacade.cs b/src/WixToolset.Core.Burn/Bind/BaseSearchFacade.cs
index d00c5778..0da78797 100644
--- a/src/WixToolset.Core.Burn/Bind/BaseSearchFacade.cs
+++ b/src/WixToolset.Core.Burn/Bind/BaseSearchFacade.cs
@@ -4,23 +4,23 @@ namespace WixToolset.Core.Burn
4{ 4{
5 using System; 5 using System;
6 using System.Xml; 6 using System.Xml;
7 using WixToolset.Data.Tuples; 7 using WixToolset.Data.Symbols;
8 8
9 internal abstract class BaseSearchFacade : ISearchFacade 9 internal abstract class BaseSearchFacade : ISearchFacade
10 { 10 {
11 protected WixSearchTuple SearchTuple { get; set; } 11 protected WixSearchSymbol SearchSymbol { get; set; }
12 12
13 public virtual void WriteXml(XmlTextWriter writer) 13 public virtual void WriteXml(XmlTextWriter writer)
14 { 14 {
15 writer.WriteAttributeString("Id", this.SearchTuple.Id.Id); 15 writer.WriteAttributeString("Id", this.SearchSymbol.Id.Id);
16 writer.WriteAttributeString("Variable", this.SearchTuple.Variable); 16 writer.WriteAttributeString("Variable", this.SearchSymbol.Variable);
17 if (!String.IsNullOrEmpty(this.SearchTuple.Condition)) 17 if (!String.IsNullOrEmpty(this.SearchSymbol.Condition))
18 { 18 {
19 writer.WriteAttributeString("Condition", this.SearchTuple.Condition); 19 writer.WriteAttributeString("Condition", this.SearchSymbol.Condition);
20 } 20 }
21 if (!String.IsNullOrEmpty(this.SearchTuple.BundleExtensionRef)) 21 if (!String.IsNullOrEmpty(this.SearchSymbol.BundleExtensionRef))
22 { 22 {
23 writer.WriteAttributeString("ExtensionId", this.SearchTuple.BundleExtensionRef); 23 writer.WriteAttributeString("ExtensionId", this.SearchSymbol.BundleExtensionRef);
24 } 24 }
25 } 25 }
26 } 26 }
diff --git a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
index 943625ec..a64bdcc1 100644
--- a/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
+++ b/src/WixToolset.Core.Burn/Bind/BindBundleCommand.cs
@@ -13,7 +13,7 @@ namespace WixToolset.Core.Burn
13 using WixToolset.Core.Burn.Bundles; 13 using WixToolset.Core.Burn.Bundles;
14 using WixToolset.Data; 14 using WixToolset.Data;
15 using WixToolset.Data.Burn; 15 using WixToolset.Data.Burn;
16 using WixToolset.Data.Tuples; 16 using WixToolset.Data.Symbols;
17 using WixToolset.Extensibility; 17 using WixToolset.Extensibility;
18 using WixToolset.Extensibility.Data; 18 using WixToolset.Extensibility.Data;
19 using WixToolset.Extensibility.Services; 19 using WixToolset.Extensibility.Services;
@@ -88,28 +88,28 @@ namespace WixToolset.Core.Burn
88 // We shouldn't really get past the linker phase if there are 88 // We shouldn't really get past the linker phase if there are
89 // no group items... that means that there's no UX, no Chain, 89 // no group items... that means that there's no UX, no Chain,
90 // *and* no Containers! 90 // *and* no Containers!
91 var chainPackageTuples = this.GetRequiredTuples<WixBundlePackageTuple>(); 91 var chainPackageSymbols = this.GetRequiredSymbols<WixBundlePackageSymbol>();
92 92
93 var wixGroupTuples = this.GetRequiredTuples<WixGroupTuple>(); 93 var wixGroupSymbols = this.GetRequiredSymbols<WixGroupSymbol>();
94 94
95 // Ensure there is one and only one row in the WixBundle table. 95 // Ensure there is one and only one row in the WixBundle table.
96 // The compiler and linker behavior should have colluded to get 96 // The compiler and linker behavior should have colluded to get
97 // this behavior. 97 // this behavior.
98 var bundleTuple = this.GetSingleTuple<WixBundleTuple>(); 98 var bundleSymbol = this.GetSingleSymbol<WixBundleSymbol>();
99 99
100 bundleTuple.ProviderKey = bundleTuple.BundleId = Guid.NewGuid().ToString("B").ToUpperInvariant(); 100 bundleSymbol.ProviderKey = bundleSymbol.BundleId = Guid.NewGuid().ToString("B").ToUpperInvariant();
101 101
102 bundleTuple.Attributes |= WixBundleAttributes.PerMachine; // default to per-machine but the first-per user package wil flip the bundle per-user. 102 bundleSymbol.Attributes |= WixBundleAttributes.PerMachine; // default to per-machine but the first-per user package wil flip the bundle per-user.
103 103
104 // Ensure there is one and only one row in the WixBootstrapperApplication table. 104 // Ensure there is one and only one row in the WixBootstrapperApplication table.
105 // The compiler and linker behavior should have colluded to get 105 // The compiler and linker behavior should have colluded to get
106 // this behavior. 106 // this behavior.
107 var bundleApplicationTuple = this.GetSingleTuple<WixBootstrapperApplicationTuple>(); 107 var bundleApplicationSymbol = this.GetSingleSymbol<WixBootstrapperApplicationSymbol>();
108 108
109 // Ensure there is one and only one row in the WixChain table. 109 // Ensure there is one and only one row in the WixChain table.
110 // The compiler and linker behavior should have colluded to get 110 // The compiler and linker behavior should have colluded to get
111 // this behavior. 111 // this behavior.
112 var chainTuple = this.GetSingleTuple<WixChainTuple>(); 112 var chainSymbol = this.GetSingleSymbol<WixChainSymbol>();
113 113
114 if (this.Messaging.EncounteredError) 114 if (this.Messaging.EncounteredError)
115 { 115 {
@@ -122,7 +122,7 @@ namespace WixToolset.Core.Burn
122 var orderSearchesCommand = new OrderSearchesCommand(this.Messaging, section); 122 var orderSearchesCommand = new OrderSearchesCommand(this.Messaging, section);
123 orderSearchesCommand.Execute(); 123 orderSearchesCommand.Execute();
124 var orderedSearches = orderSearchesCommand.OrderedSearchFacades; 124 var orderedSearches = orderSearchesCommand.OrderedSearchFacades;
125 var extensionSearchTuplesById = orderSearchesCommand.ExtensionSearchTuplesByExtensionId; 125 var extensionSearchSymbolsById = orderSearchesCommand.ExtensionSearchSymbolsByExtensionId;
126 126
127 // Extract files that come from binary .wixlibs and WixExtensions (this does not extract files from merge modules). 127 // Extract files that come from binary .wixlibs and WixExtensions (this does not extract files from merge modules).
128 { 128 {
@@ -133,29 +133,29 @@ namespace WixToolset.Core.Burn
133 } 133 }
134 134
135 // Get the explicit payloads. 135 // Get the explicit payloads.
136 var payloadTuples = section.Tuples.OfType<WixBundlePayloadTuple>().ToDictionary(t => t.Id.Id); 136 var payloadSymbols = section.Symbols.OfType<WixBundlePayloadSymbol>().ToDictionary(t => t.Id.Id);
137 137
138 // Update explicitly authored payloads with their parent package and container (as appropriate) 138 // Update explicitly authored payloads with their parent package and container (as appropriate)
139 // to make it easier to gather the payloads later. 139 // to make it easier to gather the payloads later.
140 foreach (var groupTuple in wixGroupTuples) 140 foreach (var groupSymbol in wixGroupSymbols)
141 { 141 {
142 if (ComplexReferenceChildType.Payload == groupTuple.ChildType) 142 if (ComplexReferenceChildType.Payload == groupSymbol.ChildType)
143 { 143 {
144 var payloadTuple = payloadTuples[groupTuple.ChildId]; 144 var payloadSymbol = payloadSymbols[groupSymbol.ChildId];
145 145
146 if (ComplexReferenceParentType.Package == groupTuple.ParentType) 146 if (ComplexReferenceParentType.Package == groupSymbol.ParentType)
147 { 147 {
148 Debug.Assert(String.IsNullOrEmpty(payloadTuple.PackageRef)); 148 Debug.Assert(String.IsNullOrEmpty(payloadSymbol.PackageRef));
149 payloadTuple.PackageRef = groupTuple.ParentId; 149 payloadSymbol.PackageRef = groupSymbol.ParentId;
150 } 150 }
151 else if (ComplexReferenceParentType.Container == groupTuple.ParentType) 151 else if (ComplexReferenceParentType.Container == groupSymbol.ParentType)
152 { 152 {
153 Debug.Assert(String.IsNullOrEmpty(payloadTuple.ContainerRef)); 153 Debug.Assert(String.IsNullOrEmpty(payloadSymbol.ContainerRef));
154 payloadTuple.ContainerRef = groupTuple.ParentId; 154 payloadSymbol.ContainerRef = groupSymbol.ParentId;
155 } 155 }
156 else if (ComplexReferenceParentType.Layout == groupTuple.ParentType) 156 else if (ComplexReferenceParentType.Layout == groupSymbol.ParentType)
157 { 157 {
158 payloadTuple.LayoutOnly = true; 158 payloadSymbol.LayoutOnly = true;
159 } 159 }
160 } 160 }
161 } 161 }
@@ -165,44 +165,44 @@ namespace WixToolset.Core.Burn
165 // Process the explicitly authored payloads. 165 // Process the explicitly authored payloads.
166 ISet<string> processedPayloads; 166 ISet<string> processedPayloads;
167 { 167 {
168 var command = new ProcessPayloadsCommand(this.ServiceProvider, this.BackendHelper, payloadTuples.Values, bundleTuple.DefaultPackagingType, layoutDirectory); 168 var command = new ProcessPayloadsCommand(this.ServiceProvider, this.BackendHelper, payloadSymbols.Values, bundleSymbol.DefaultPackagingType, layoutDirectory);
169 command.Execute(); 169 command.Execute();
170 170
171 fileTransfers.AddRange(command.FileTransfers); 171 fileTransfers.AddRange(command.FileTransfers);
172 trackedFiles.AddRange(command.TrackedFiles); 172 trackedFiles.AddRange(command.TrackedFiles);
173 173
174 processedPayloads = new HashSet<string>(payloadTuples.Keys); 174 processedPayloads = new HashSet<string>(payloadSymbols.Keys);
175 } 175 }
176 176
177 IDictionary<string, PackageFacade> facades; 177 IDictionary<string, PackageFacade> facades;
178 { 178 {
179 var command = new GetPackageFacadesCommand(chainPackageTuples, section); 179 var command = new GetPackageFacadesCommand(chainPackageSymbols, section);
180 command.Execute(); 180 command.Execute();
181 181
182 facades = command.PackageFacades; 182 facades = command.PackageFacades;
183 } 183 }
184 184
185 // Process each package facade. Note this is likely to add payloads and other tuples so 185 // Process each package facade. Note this is likely to add payloads and other symbols so
186 // note that any indexes created above may be out of date now. 186 // note that any indexes created above may be out of date now.
187 foreach (var facade in facades.Values) 187 foreach (var facade in facades.Values)
188 { 188 {
189 switch (facade.PackageTuple.Type) 189 switch (facade.PackageSymbol.Type)
190 { 190 {
191 case WixBundlePackageType.Exe: 191 case WixBundlePackageType.Exe:
192 { 192 {
193 var command = new ProcessExePackageCommand(facade, payloadTuples); 193 var command = new ProcessExePackageCommand(facade, payloadSymbols);
194 command.Execute(); 194 command.Execute();
195 } 195 }
196 break; 196 break;
197 197
198 case WixBundlePackageType.Msi: 198 case WixBundlePackageType.Msi:
199 { 199 {
200 var command = new ProcessMsiPackageCommand(this.ServiceProvider, this.BackendExtensions, section, facade, payloadTuples); 200 var command = new ProcessMsiPackageCommand(this.ServiceProvider, this.BackendExtensions, section, facade, payloadSymbols);
201 command.Execute(); 201 command.Execute();
202 202
203 if (null != variableCache) 203 if (null != variableCache)
204 { 204 {
205 var msiPackage = (WixBundleMsiPackageTuple)facade.SpecificPackageTuple; 205 var msiPackage = (WixBundleMsiPackageSymbol)facade.SpecificPackageSymbol;
206 variableCache.Add(String.Concat("packageLanguage.", facade.PackageId), msiPackage.ProductLanguage.ToString()); 206 variableCache.Add(String.Concat("packageLanguage.", facade.PackageId), msiPackage.ProductLanguage.ToString());
207 207
208 if (null != msiPackage.Manufacturer) 208 if (null != msiPackage.Manufacturer)
@@ -215,14 +215,14 @@ namespace WixToolset.Core.Burn
215 215
216 case WixBundlePackageType.Msp: 216 case WixBundlePackageType.Msp:
217 { 217 {
218 var command = new ProcessMspPackageCommand(this.Messaging, section, facade, payloadTuples); 218 var command = new ProcessMspPackageCommand(this.Messaging, section, facade, payloadSymbols);
219 command.Execute(); 219 command.Execute();
220 } 220 }
221 break; 221 break;
222 222
223 case WixBundlePackageType.Msu: 223 case WixBundlePackageType.Msu:
224 { 224 {
225 var command = new ProcessMsuPackageCommand(facade, payloadTuples); 225 var command = new ProcessMsuPackageCommand(facade, payloadSymbols);
226 command.Execute(); 226 command.Execute();
227 } 227 }
228 break; 228 break;
@@ -230,7 +230,7 @@ namespace WixToolset.Core.Burn
230 230
231 if (null != variableCache) 231 if (null != variableCache)
232 { 232 {
233 BindBundleCommand.PopulatePackageVariableCache(facade.PackageTuple, variableCache); 233 BindBundleCommand.PopulatePackageVariableCache(facade.PackageSymbol, variableCache);
234 } 234 }
235 } 235 }
236 236
@@ -241,13 +241,13 @@ namespace WixToolset.Core.Burn
241 241
242 // Reindex the payloads now that all the payloads (minus the manifest payloads that will be created later) 242 // Reindex the payloads now that all the payloads (minus the manifest payloads that will be created later)
243 // are present. 243 // are present.
244 payloadTuples = section.Tuples.OfType<WixBundlePayloadTuple>().ToDictionary(t => t.Id.Id); 244 payloadSymbols = section.Symbols.OfType<WixBundlePayloadSymbol>().ToDictionary(t => t.Id.Id);
245 245
246 // Process the payloads that were added by processing the packages. 246 // Process the payloads that were added by processing the packages.
247 { 247 {
248 var toProcess = payloadTuples.Values.Where(r => !processedPayloads.Contains(r.Id.Id)).ToList(); 248 var toProcess = payloadSymbols.Values.Where(r => !processedPayloads.Contains(r.Id.Id)).ToList();
249 249
250 var command = new ProcessPayloadsCommand(this.ServiceProvider, this.BackendHelper, toProcess, bundleTuple.DefaultPackagingType, layoutDirectory); 250 var command = new ProcessPayloadsCommand(this.ServiceProvider, this.BackendHelper, toProcess, bundleSymbol.DefaultPackagingType, layoutDirectory);
251 command.Execute(); 251 command.Execute();
252 252
253 fileTransfers.AddRange(command.FileTransfers); 253 fileTransfers.AddRange(command.FileTransfers);
@@ -258,34 +258,34 @@ namespace WixToolset.Core.Burn
258 258
259 // Set the package metadata from the payloads now that we have the complete payload information. 259 // Set the package metadata from the payloads now that we have the complete payload information.
260 { 260 {
261 var payloadsByPackageId = payloadTuples.Values.ToLookup(p => p.PackageRef); 261 var payloadsByPackageId = payloadSymbols.Values.ToLookup(p => p.PackageRef);
262 262
263 foreach (var facade in facades.Values) 263 foreach (var facade in facades.Values)
264 { 264 {
265 facade.PackageTuple.Size = 0; 265 facade.PackageSymbol.Size = 0;
266 266
267 var packagePayloads = payloadsByPackageId[facade.PackageId]; 267 var packagePayloads = payloadsByPackageId[facade.PackageId];
268 268
269 foreach (var payload in packagePayloads) 269 foreach (var payload in packagePayloads)
270 { 270 {
271 facade.PackageTuple.Size += payload.FileSize.Value; 271 facade.PackageSymbol.Size += payload.FileSize.Value;
272 } 272 }
273 273
274 if (!facade.PackageTuple.InstallSize.HasValue) 274 if (!facade.PackageSymbol.InstallSize.HasValue)
275 { 275 {
276 facade.PackageTuple.InstallSize = facade.PackageTuple.Size; 276 facade.PackageSymbol.InstallSize = facade.PackageSymbol.Size;
277 } 277 }
278 278
279 var packagePayload = payloadTuples[facade.PackageTuple.PayloadRef]; 279 var packagePayload = payloadSymbols[facade.PackageSymbol.PayloadRef];
280 280
281 if (String.IsNullOrEmpty(facade.PackageTuple.Description)) 281 if (String.IsNullOrEmpty(facade.PackageSymbol.Description))
282 { 282 {
283 facade.PackageTuple.Description = packagePayload.Description; 283 facade.PackageSymbol.Description = packagePayload.Description;
284 } 284 }
285 285
286 if (String.IsNullOrEmpty(facade.PackageTuple.DisplayName)) 286 if (String.IsNullOrEmpty(facade.PackageSymbol.DisplayName))
287 { 287 {
288 facade.PackageTuple.DisplayName = packagePayload.DisplayName; 288 facade.PackageSymbol.DisplayName = packagePayload.DisplayName;
289 } 289 }
290 } 290 }
291 } 291 }
@@ -293,7 +293,7 @@ namespace WixToolset.Core.Burn
293 // Give the UX payloads their embedded IDs... 293 // Give the UX payloads their embedded IDs...
294 var uxPayloadIndex = 0; 294 var uxPayloadIndex = 0;
295 { 295 {
296 foreach (var payload in payloadTuples.Values.Where(p => BurnConstants.BurnUXContainerName == p.ContainerRef)) 296 foreach (var payload in payloadSymbols.Values.Where(p => BurnConstants.BurnUXContainerName == p.ContainerRef))
297 { 297 {
298 // In theory, UX payloads could be embedded in the UX CAB, external to the bundle EXE, or even 298 // In theory, UX payloads could be embedded in the UX CAB, external to the bundle EXE, or even
299 // downloaded. The current engine requires the UX to be fully present before any downloading starts, 299 // downloaded. The current engine requires the UX to be fully present before any downloading starts,
@@ -317,7 +317,7 @@ namespace WixToolset.Core.Burn
317 317
318 // Give the embedded payloads without an embedded id yet an embedded id. 318 // Give the embedded payloads without an embedded id yet an embedded id.
319 var payloadIndex = 0; 319 var payloadIndex = 0;
320 foreach (var payload in payloadTuples.Values) 320 foreach (var payload in payloadSymbols.Values)
321 { 321 {
322 Debug.Assert(PackagingType.Unknown != payload.Packaging); 322 Debug.Assert(PackagingType.Unknown != payload.Packaging);
323 323
@@ -341,11 +341,11 @@ namespace WixToolset.Core.Burn
341 } 341 }
342 342
343 // If catalog files exist, non-embedded payloads should validate with the catalogs. 343 // If catalog files exist, non-embedded payloads should validate with the catalogs.
344 var catalogs = section.Tuples.OfType<WixBundleCatalogTuple>().ToList(); 344 var catalogs = section.Symbols.OfType<WixBundleCatalogSymbol>().ToList();
345 345
346 if (catalogs.Count > 0) 346 if (catalogs.Count > 0)
347 { 347 {
348 var command = new VerifyPayloadsWithCatalogCommand(this.Messaging, catalogs, payloadTuples.Values); 348 var command = new VerifyPayloadsWithCatalogCommand(this.Messaging, catalogs, payloadSymbols.Values);
349 command.Execute(); 349 command.Execute();
350 } 350 }
351 351
@@ -355,12 +355,12 @@ namespace WixToolset.Core.Burn
355 } 355 }
356 356
357 IEnumerable<PackageFacade> orderedFacades; 357 IEnumerable<PackageFacade> orderedFacades;
358 IEnumerable<WixBundleRollbackBoundaryTuple> boundaries; 358 IEnumerable<WixBundleRollbackBoundarySymbol> boundaries;
359 { 359 {
360 var groupTuples = section.Tuples.OfType<WixGroupTuple>(); 360 var groupSymbols = section.Symbols.OfType<WixGroupSymbol>();
361 var boundaryTuplesById = section.Tuples.OfType<WixBundleRollbackBoundaryTuple>().ToDictionary(b => b.Id.Id); 361 var boundarySymbolsById = section.Symbols.OfType<WixBundleRollbackBoundarySymbol>().ToDictionary(b => b.Id.Id);
362 362
363 var command = new OrderPackagesAndRollbackBoundariesCommand(this.Messaging, groupTuples, boundaryTuplesById, facades); 363 var command = new OrderPackagesAndRollbackBoundariesCommand(this.Messaging, groupSymbols, boundarySymbolsById, facades);
364 command.Execute(); 364 command.Execute();
365 365
366 orderedFacades = command.OrderedPackageFacades; 366 orderedFacades = command.OrderedPackageFacades;
@@ -374,24 +374,24 @@ namespace WixToolset.Core.Burn
374 resolveDelayedFieldsCommand.Execute(); 374 resolveDelayedFieldsCommand.Execute();
375 } 375 }
376 376
377 Dictionary<string, ProvidesDependencyTuple> dependencyTuplesByKey; 377 Dictionary<string, ProvidesDependencySymbol> dependencySymbolsByKey;
378 { 378 {
379 var command = new ProcessDependencyProvidersCommand(this.Messaging, section, facades); 379 var command = new ProcessDependencyProvidersCommand(this.Messaging, section, facades);
380 command.Execute(); 380 command.Execute();
381 381
382 if (!String.IsNullOrEmpty(command.BundleProviderKey)) 382 if (!String.IsNullOrEmpty(command.BundleProviderKey))
383 { 383 {
384 bundleTuple.ProviderKey = command.BundleProviderKey; // set the overridable bundle provider key. 384 bundleSymbol.ProviderKey = command.BundleProviderKey; // set the overridable bundle provider key.
385 } 385 }
386 dependencyTuplesByKey = command.DependencyTuplesByKey; 386 dependencySymbolsByKey = command.DependencySymbolsByKey;
387 } 387 }
388 388
389 // Update the bundle per-machine/per-user scope based on the chained packages. 389 // Update the bundle per-machine/per-user scope based on the chained packages.
390 this.ResolveBundleInstallScope(section, bundleTuple, orderedFacades); 390 this.ResolveBundleInstallScope(section, bundleSymbol, orderedFacades);
391 391
392 // Generate data for all manifests. 392 // Generate data for all manifests.
393 { 393 {
394 var command = new GenerateManifestDataFromIRCommand(this.Messaging, section, this.BackendExtensions, this.InternalBurnBackendHelper, extensionSearchTuplesById); 394 var command = new GenerateManifestDataFromIRCommand(this.Messaging, section, this.BackendExtensions, this.InternalBurnBackendHelper, extensionSearchSymbolsById);
395 command.Execute(); 395 command.Execute();
396 } 396 }
397 397
@@ -409,12 +409,12 @@ namespace WixToolset.Core.Burn
409 // Generate the core-defined BA manifest tables... 409 // Generate the core-defined BA manifest tables...
410 string baManifestPath; 410 string baManifestPath;
411 { 411 {
412 var command = new CreateBootstrapperApplicationManifestCommand(section, bundleTuple, orderedFacades, uxPayloadIndex, payloadTuples, this.IntermediateFolder, this.InternalBurnBackendHelper); 412 var command = new CreateBootstrapperApplicationManifestCommand(section, bundleSymbol, orderedFacades, uxPayloadIndex, payloadSymbols, this.IntermediateFolder, this.InternalBurnBackendHelper);
413 command.Execute(); 413 command.Execute();
414 414
415 var baManifestPayload = command.BootstrapperApplicationManifestPayloadRow; 415 var baManifestPayload = command.BootstrapperApplicationManifestPayloadRow;
416 baManifestPath = command.OutputPath; 416 baManifestPath = command.OutputPath;
417 payloadTuples.Add(baManifestPayload.Id.Id, baManifestPayload); 417 payloadSymbols.Add(baManifestPayload.Id.Id, baManifestPayload);
418 ++uxPayloadIndex; 418 ++uxPayloadIndex;
419 419
420 trackedFiles.Add(this.BackendHelper.TrackFile(baManifestPath, TrackedFileType.Temporary)); 420 trackedFiles.Add(this.BackendHelper.TrackFile(baManifestPath, TrackedFileType.Temporary));
@@ -423,12 +423,12 @@ namespace WixToolset.Core.Burn
423 // Generate the bundle extension manifest... 423 // Generate the bundle extension manifest...
424 string bextManifestPath; 424 string bextManifestPath;
425 { 425 {
426 var command = new CreateBundleExtensionManifestCommand(section, bundleTuple, uxPayloadIndex, this.IntermediateFolder, this.InternalBurnBackendHelper); 426 var command = new CreateBundleExtensionManifestCommand(section, bundleSymbol, uxPayloadIndex, this.IntermediateFolder, this.InternalBurnBackendHelper);
427 command.Execute(); 427 command.Execute();
428 428
429 var bextManifestPayload = command.BundleExtensionManifestPayloadRow; 429 var bextManifestPayload = command.BundleExtensionManifestPayloadRow;
430 bextManifestPath = command.OutputPath; 430 bextManifestPath = command.OutputPath;
431 payloadTuples.Add(bextManifestPayload.Id.Id, bextManifestPayload); 431 payloadSymbols.Add(bextManifestPayload.Id.Id, bextManifestPayload);
432 ++uxPayloadIndex; 432 ++uxPayloadIndex;
433 433
434 trackedFiles.Add(this.BackendHelper.TrackFile(bextManifestPath, TrackedFileType.Temporary)); 434 trackedFiles.Add(this.BackendHelper.TrackFile(bextManifestPath, TrackedFileType.Temporary));
@@ -436,11 +436,11 @@ namespace WixToolset.Core.Burn
436 436
437 // Create all the containers except the UX container first so the manifest (that goes in the UX container) 437 // Create all the containers except the UX container first so the manifest (that goes in the UX container)
438 // can contain all size and hash information about the non-UX containers. 438 // can contain all size and hash information about the non-UX containers.
439 WixBundleContainerTuple uxContainer; 439 WixBundleContainerSymbol uxContainer;
440 IEnumerable<WixBundlePayloadTuple> uxPayloads; 440 IEnumerable<WixBundlePayloadSymbol> uxPayloads;
441 IEnumerable<WixBundleContainerTuple> containers; 441 IEnumerable<WixBundleContainerSymbol> containers;
442 { 442 {
443 var command = new CreateNonUXContainers(this.BackendHelper, section, bundleApplicationTuple, payloadTuples, this.IntermediateFolder, layoutDirectory, this.DefaultCompressionLevel); 443 var command = new CreateNonUXContainers(this.BackendHelper, section, bundleApplicationSymbol, payloadSymbols, this.IntermediateFolder, layoutDirectory, this.DefaultCompressionLevel);
444 command.Execute(); 444 command.Execute();
445 445
446 fileTransfers.AddRange(command.FileTransfers); 446 fileTransfers.AddRange(command.FileTransfers);
@@ -450,13 +450,13 @@ namespace WixToolset.Core.Burn
450 uxPayloads = command.UXContainerPayloads; 450 uxPayloads = command.UXContainerPayloads;
451 containers = command.Containers; 451 containers = command.Containers;
452 } 452 }
453 453
454 // Create the bundle manifest. 454 // Create the bundle manifest.
455 string manifestPath; 455 string manifestPath;
456 { 456 {
457 var executableName = Path.GetFileName(this.OutputPath); 457 var executableName = Path.GetFileName(this.OutputPath);
458 458
459 var command = new CreateBurnManifestCommand(this.Messaging, this.BackendExtensions, executableName, section, bundleTuple, containers, chainTuple, orderedFacades, boundaries, uxPayloads, payloadTuples, orderedSearches, catalogs, this.IntermediateFolder); 459 var command = new CreateBurnManifestCommand(this.Messaging, this.BackendExtensions, executableName, section, bundleSymbol, containers, chainSymbol, orderedFacades, boundaries, uxPayloads, payloadSymbols, orderedSearches, catalogs, this.IntermediateFolder);
460 command.Execute(); 460 command.Execute();
461 461
462 manifestPath = command.OutputPath; 462 manifestPath = command.OutputPath;
@@ -475,7 +475,7 @@ namespace WixToolset.Core.Burn
475 } 475 }
476 476
477 { 477 {
478 var command = new CreateBundleExeCommand(this.Messaging, this.BackendHelper, this.IntermediateFolder, this.OutputPath, bundleTuple, uxContainer, containers); 478 var command = new CreateBundleExeCommand(this.Messaging, this.BackendHelper, this.IntermediateFolder, this.OutputPath, bundleSymbol, uxContainer, containers);
479 command.Execute(); 479 command.Execute();
480 480
481 fileTransfers.Add(command.Transfer); 481 fileTransfers.Add(command.Transfer);
@@ -483,7 +483,7 @@ namespace WixToolset.Core.Burn
483 } 483 }
484 484
485#if TODO // does this need to come back, or do they only need to be in TrackedFiles? 485#if TODO // does this need to come back, or do they only need to be in TrackedFiles?
486 this.ContentFilePaths = payloadTuples.Values.Where(p => p.ContentFile).Select(p => p.FullFileName).ToList(); 486 this.ContentFilePaths = payloadSymbols.Values.Where(p => p.ContentFile).Select(p => p.FullFileName).ToList();
487#endif 487#endif
488 this.FileTransfers = fileTransfers; 488 this.FileTransfers = fileTransfers;
489 this.TrackedFiles = trackedFiles; 489 this.TrackedFiles = trackedFiles;
@@ -522,7 +522,7 @@ namespace WixToolset.Core.Burn
522 /// </summary> 522 /// </summary>
523 /// <param name="package">The package with properties to cache.</param> 523 /// <param name="package">The package with properties to cache.</param>
524 /// <param name="variableCache">The property cache.</param> 524 /// <param name="variableCache">The property cache.</param>
525 private static void PopulatePackageVariableCache(WixBundlePackageTuple package, IDictionary<string, string> variableCache) 525 private static void PopulatePackageVariableCache(WixBundlePackageSymbol package, IDictionary<string, string> variableCache)
526 { 526 {
527 var id = package.Id.Id; 527 var id = package.Id.Id;
528 528
@@ -533,17 +533,17 @@ namespace WixToolset.Core.Burn
533 variableCache.Add(String.Concat("packageVersion.", id), package.Version); 533 variableCache.Add(String.Concat("packageVersion.", id), package.Version);
534 } 534 }
535 535
536 private void ResolveBundleInstallScope(IntermediateSection section, WixBundleTuple bundleTuple, IEnumerable<PackageFacade> facades) 536 private void ResolveBundleInstallScope(IntermediateSection section, WixBundleSymbol bundleSymbol, IEnumerable<PackageFacade> facades)
537 { 537 {
538 var dependencyTuplesById = section.Tuples.OfType<ProvidesDependencyTuple>().ToDictionary(t => t.Id.Id); 538 var dependencySymbolsById = section.Symbols.OfType<ProvidesDependencySymbol>().ToDictionary(t => t.Id.Id);
539 539
540 foreach (var facade in facades) 540 foreach (var facade in facades)
541 { 541 {
542 if (bundleTuple.PerMachine && YesNoDefaultType.No == facade.PackageTuple.PerMachine) 542 if (bundleSymbol.PerMachine && YesNoDefaultType.No == facade.PackageSymbol.PerMachine)
543 { 543 {
544 this.Messaging.Write(VerboseMessages.SwitchingToPerUserPackage(facade.PackageTuple.SourceLineNumbers, facade.PackageId)); 544 this.Messaging.Write(VerboseMessages.SwitchingToPerUserPackage(facade.PackageSymbol.SourceLineNumbers, facade.PackageId));
545 545
546 bundleTuple.Attributes &= ~WixBundleAttributes.PerMachine; 546 bundleSymbol.Attributes &= ~WixBundleAttributes.PerMachine;
547 break; 547 break;
548 } 548 }
549 } 549 }
@@ -551,45 +551,45 @@ namespace WixToolset.Core.Burn
551 foreach (var facade in facades) 551 foreach (var facade in facades)
552 { 552 {
553 // Update package scope from bundle scope if default. 553 // Update package scope from bundle scope if default.
554 if (YesNoDefaultType.Default == facade.PackageTuple.PerMachine) 554 if (YesNoDefaultType.Default == facade.PackageSymbol.PerMachine)
555 { 555 {
556 facade.PackageTuple.PerMachine = bundleTuple.PerMachine ? YesNoDefaultType.Yes : YesNoDefaultType.No; 556 facade.PackageSymbol.PerMachine = bundleSymbol.PerMachine ? YesNoDefaultType.Yes : YesNoDefaultType.No;
557 } 557 }
558 558
559 // We will only register packages in the same scope as the bundle. Warn if any packages with providers 559 // We will only register packages in the same scope as the bundle. Warn if any packages with providers
560 // are in a different scope and not permanent (permanents typically don't need a ref-count). 560 // are in a different scope and not permanent (permanents typically don't need a ref-count).
561 if (!bundleTuple.PerMachine && 561 if (!bundleSymbol.PerMachine &&
562 YesNoDefaultType.Yes == facade.PackageTuple.PerMachine && 562 YesNoDefaultType.Yes == facade.PackageSymbol.PerMachine &&
563 !facade.PackageTuple.Permanent && 563 !facade.PackageSymbol.Permanent &&
564 dependencyTuplesById.ContainsKey(facade.PackageId)) 564 dependencySymbolsById.ContainsKey(facade.PackageId))
565 { 565 {
566 this.Messaging.Write(WarningMessages.NoPerMachineDependencies(facade.PackageTuple.SourceLineNumbers, facade.PackageId)); 566 this.Messaging.Write(WarningMessages.NoPerMachineDependencies(facade.PackageSymbol.SourceLineNumbers, facade.PackageId));
567 } 567 }
568 } 568 }
569 } 569 }
570 570
571 private IEnumerable<T> GetRequiredTuples<T>() where T : IntermediateTuple 571 private IEnumerable<T> GetRequiredSymbols<T>() where T : IntermediateSymbol
572 { 572 {
573 var tuples = this.Output.Sections.Single().Tuples.OfType<T>().ToList(); 573 var symbols = this.Output.Sections.Single().Symbols.OfType<T>().ToList();
574 574
575 if (0 == tuples.Count) 575 if (0 == symbols.Count)
576 { 576 {
577 throw new WixException(ErrorMessages.MissingBundleInformation(nameof(T))); 577 throw new WixException(ErrorMessages.MissingBundleInformation(nameof(T)));
578 } 578 }
579 579
580 return tuples; 580 return symbols;
581 } 581 }
582 582
583 private T GetSingleTuple<T>() where T : IntermediateTuple 583 private T GetSingleSymbol<T>() where T : IntermediateSymbol
584 { 584 {
585 var tuples = this.Output.Sections.Single().Tuples.OfType<T>().ToList(); 585 var symbols = this.Output.Sections.Single().Symbols.OfType<T>().ToList();
586 586
587 if (1 != tuples.Count) 587 if (1 != symbols.Count)
588 { 588 {
589 throw new WixException(ErrorMessages.MissingBundleInformation(nameof(T))); 589 throw new WixException(ErrorMessages.MissingBundleInformation(nameof(T)));
590 } 590 }
591 591
592 return tuples[0]; 592 return symbols[0];
593 } 593 }
594 } 594 }
595} 595}
diff --git a/src/WixToolset.Core.Burn/Bind/ExtensionSearchFacade.cs b/src/WixToolset.Core.Burn/Bind/ExtensionSearchFacade.cs
index 6a830a28..773250d7 100644
--- a/src/WixToolset.Core.Burn/Bind/ExtensionSearchFacade.cs
+++ b/src/WixToolset.Core.Burn/Bind/ExtensionSearchFacade.cs
@@ -3,13 +3,13 @@
3namespace WixToolset.Core.Burn 3namespace WixToolset.Core.Burn
4{ 4{
5 using System.Xml; 5 using System.Xml;
6 using WixToolset.Data.Tuples; 6 using WixToolset.Data.Symbols;
7 7
8 internal class ExtensionSearchFacade : BaseSearchFacade 8 internal class ExtensionSearchFacade : BaseSearchFacade
9 { 9 {
10 public ExtensionSearchFacade(WixSearchTuple searchTuple) 10 public ExtensionSearchFacade(WixSearchSymbol searchSymbol)
11 { 11 {
12 this.SearchTuple = searchTuple; 12 this.SearchSymbol = searchSymbol;
13 } 13 }
14 14
15 public override void WriteXml(XmlTextWriter writer) 15 public override void WriteXml(XmlTextWriter writer)
diff --git a/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs b/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
index c20abadb..29768dff 100644
--- a/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
+++ b/src/WixToolset.Core.Burn/Bind/GenerateManifestDataFromIRCommand.cs
@@ -10,26 +10,26 @@ namespace WixToolset.Core.Burn.Bind
10 using WixToolset.Core.Burn.Bundles; 10 using WixToolset.Core.Burn.Bundles;
11 using WixToolset.Core.Burn.ExtensibilityServices; 11 using WixToolset.Core.Burn.ExtensibilityServices;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Extensibility; 14 using WixToolset.Extensibility;
15 using WixToolset.Extensibility.Services; 15 using WixToolset.Extensibility.Services;
16 16
17 internal class GenerateManifestDataFromIRCommand 17 internal class GenerateManifestDataFromIRCommand
18 { 18 {
19 public GenerateManifestDataFromIRCommand(IMessaging messaging, IntermediateSection section, IEnumerable<IBurnBackendExtension> backendExtensions, IBurnBackendHelper backendHelper, IDictionary<string, IList<IntermediateTuple>> extensionSearchTuplesById) 19 public GenerateManifestDataFromIRCommand(IMessaging messaging, IntermediateSection section, IEnumerable<IBurnBackendExtension> backendExtensions, IBurnBackendHelper backendHelper, IDictionary<string, IList<IntermediateSymbol>> extensionSearchSymbolsById)
20 { 20 {
21 this.Messaging = messaging; 21 this.Messaging = messaging;
22 this.Section = section; 22 this.Section = section;
23 this.BackendExtensions = backendExtensions; 23 this.BackendExtensions = backendExtensions;
24 this.BackendHelper = backendHelper; 24 this.BackendHelper = backendHelper;
25 this.ExtensionSearchTuplesById = extensionSearchTuplesById; 25 this.ExtensionSearchSymbolsById = extensionSearchSymbolsById;
26 } 26 }
27 27
28 private IEnumerable<IBurnBackendExtension> BackendExtensions { get; } 28 private IEnumerable<IBurnBackendExtension> BackendExtensions { get; }
29 29
30 private IBurnBackendHelper BackendHelper { get; } 30 private IBurnBackendHelper BackendHelper { get; }
31 31
32 private IDictionary<string, IList<IntermediateTuple>> ExtensionSearchTuplesById { get; } 32 private IDictionary<string, IList<IntermediateSymbol>> ExtensionSearchSymbolsById { get; }
33 33
34 private IMessaging Messaging { get; } 34 private IMessaging Messaging { get; }
35 35
@@ -37,108 +37,108 @@ namespace WixToolset.Core.Burn.Bind
37 37
38 public void Execute() 38 public void Execute()
39 { 39 {
40 var tuples = this.Section.Tuples.ToList(); 40 var symbols = this.Section.Symbols.ToList();
41 var cellsByCustomDataAndElementId = new Dictionary<string, List<WixBundleCustomDataCellTuple>>(); 41 var cellsByCustomDataAndElementId = new Dictionary<string, List<WixBundleCustomDataCellSymbol>>();
42 var customDataById = new Dictionary<string, WixBundleCustomDataTuple>(); 42 var customDataById = new Dictionary<string, WixBundleCustomDataSymbol>();
43 43
44 foreach (var kvp in this.ExtensionSearchTuplesById) 44 foreach (var kvp in this.ExtensionSearchSymbolsById)
45 { 45 {
46 var extensionId = kvp.Key; 46 var extensionId = kvp.Key;
47 var extensionSearchTuples = kvp.Value; 47 var extensionSearchSymbols = kvp.Value;
48 foreach (var extensionSearchTuple in extensionSearchTuples) 48 foreach (var extensionSearchSymbol in extensionSearchSymbols)
49 { 49 {
50 this.BackendHelper.AddBundleExtensionData(extensionId, extensionSearchTuple, tupleIdIsIdAttribute: true); 50 this.BackendHelper.AddBundleExtensionData(extensionId, extensionSearchSymbol, symbolIdIsIdAttribute: true);
51 tuples.Remove(extensionSearchTuple); 51 symbols.Remove(extensionSearchSymbol);
52 } 52 }
53 } 53 }
54 54
55 foreach (var tuple in tuples) 55 foreach (var symbol in symbols)
56 { 56 {
57 var unknownTuple = false; 57 var unknownSymbol = false;
58 switch (tuple.Definition.Type) 58 switch (symbol.Definition.Type)
59 { 59 {
60 // Tuples used internally and are not added to a data manifest. 60 // Symbols used internally and are not added to a data manifest.
61 case TupleDefinitionType.ProvidesDependency: 61 case SymbolDefinitionType.ProvidesDependency:
62 case TupleDefinitionType.WixApprovedExeForElevation: 62 case SymbolDefinitionType.WixApprovedExeForElevation:
63 case TupleDefinitionType.WixBootstrapperApplication: 63 case SymbolDefinitionType.WixBootstrapperApplication:
64 case TupleDefinitionType.WixBundle: 64 case SymbolDefinitionType.WixBundle:
65 case TupleDefinitionType.WixBundleCatalog: 65 case SymbolDefinitionType.WixBundleCatalog:
66 case TupleDefinitionType.WixBundleContainer: 66 case SymbolDefinitionType.WixBundleContainer:
67 case TupleDefinitionType.WixBundleCustomDataAttribute: 67 case SymbolDefinitionType.WixBundleCustomDataAttribute:
68 case TupleDefinitionType.WixBundleExePackage: 68 case SymbolDefinitionType.WixBundleExePackage:
69 case TupleDefinitionType.WixBundleExtension: 69 case SymbolDefinitionType.WixBundleExtension:
70 case TupleDefinitionType.WixBundleMsiFeature: 70 case SymbolDefinitionType.WixBundleMsiFeature:
71 case TupleDefinitionType.WixBundleMsiPackage: 71 case SymbolDefinitionType.WixBundleMsiPackage:
72 case TupleDefinitionType.WixBundleMsiProperty: 72 case SymbolDefinitionType.WixBundleMsiProperty:
73 case TupleDefinitionType.WixBundleMspPackage: 73 case SymbolDefinitionType.WixBundleMspPackage:
74 case TupleDefinitionType.WixBundleMsuPackage: 74 case SymbolDefinitionType.WixBundleMsuPackage:
75 case TupleDefinitionType.WixBundlePackage: 75 case SymbolDefinitionType.WixBundlePackage:
76 case TupleDefinitionType.WixBundlePackageCommandLine: 76 case SymbolDefinitionType.WixBundlePackageCommandLine:
77 case TupleDefinitionType.WixBundlePackageExitCode: 77 case SymbolDefinitionType.WixBundlePackageExitCode:
78 case TupleDefinitionType.WixBundlePackageGroup: 78 case SymbolDefinitionType.WixBundlePackageGroup:
79 case TupleDefinitionType.WixBundlePatchTargetCode: 79 case SymbolDefinitionType.WixBundlePatchTargetCode:
80 case TupleDefinitionType.WixBundlePayload: 80 case SymbolDefinitionType.WixBundlePayload:
81 case TupleDefinitionType.WixBundlePayloadGroup: 81 case SymbolDefinitionType.WixBundlePayloadGroup:
82 case TupleDefinitionType.WixBundleRelatedPackage: 82 case SymbolDefinitionType.WixBundleRelatedPackage:
83 case TupleDefinitionType.WixBundleRollbackBoundary: 83 case SymbolDefinitionType.WixBundleRollbackBoundary:
84 case TupleDefinitionType.WixBundleSlipstreamMsp: 84 case SymbolDefinitionType.WixBundleSlipstreamMsp:
85 case TupleDefinitionType.WixBundleUpdate: 85 case SymbolDefinitionType.WixBundleUpdate:
86 case TupleDefinitionType.WixBundleVariable: 86 case SymbolDefinitionType.WixBundleVariable:
87 case TupleDefinitionType.WixBuildInfo: 87 case SymbolDefinitionType.WixBuildInfo:
88 case TupleDefinitionType.WixChain: 88 case SymbolDefinitionType.WixChain:
89 case TupleDefinitionType.WixComponentSearch: 89 case SymbolDefinitionType.WixComponentSearch:
90 case TupleDefinitionType.WixDependencyProvider: 90 case SymbolDefinitionType.WixDependencyProvider:
91 case TupleDefinitionType.WixFileSearch: 91 case SymbolDefinitionType.WixFileSearch:
92 case TupleDefinitionType.WixGroup: 92 case SymbolDefinitionType.WixGroup:
93 case TupleDefinitionType.WixProductSearch: 93 case SymbolDefinitionType.WixProductSearch:
94 case TupleDefinitionType.WixRegistrySearch: 94 case SymbolDefinitionType.WixRegistrySearch:
95 case TupleDefinitionType.WixRelatedBundle: 95 case SymbolDefinitionType.WixRelatedBundle:
96 case TupleDefinitionType.WixSearch: 96 case SymbolDefinitionType.WixSearch:
97 case TupleDefinitionType.WixSearchRelation: 97 case SymbolDefinitionType.WixSearchRelation:
98 case TupleDefinitionType.WixSetVariable: 98 case SymbolDefinitionType.WixSetVariable:
99 case TupleDefinitionType.WixUpdateRegistration: 99 case SymbolDefinitionType.WixUpdateRegistration:
100 break; 100 break;
101 101
102 // Tuples used before binding. 102 // Symbols used before binding.
103 case TupleDefinitionType.WixComplexReference: 103 case SymbolDefinitionType.WixComplexReference:
104 case TupleDefinitionType.WixOrdering: 104 case SymbolDefinitionType.WixOrdering:
105 case TupleDefinitionType.WixSimpleReference: 105 case SymbolDefinitionType.WixSimpleReference:
106 case TupleDefinitionType.WixVariable: 106 case SymbolDefinitionType.WixVariable:
107 break; 107 break;
108 108
109 // Tuples to investigate: 109 // Symbols to investigate:
110 case TupleDefinitionType.WixChainItem: 110 case SymbolDefinitionType.WixChainItem:
111 break; 111 break;
112 112
113 case TupleDefinitionType.WixBundleCustomData: 113 case SymbolDefinitionType.WixBundleCustomData:
114 unknownTuple = !this.IndexBundleCustomDataTuple((WixBundleCustomDataTuple)tuple, customDataById); 114 unknownSymbol = !this.IndexBundleCustomDataSymbol((WixBundleCustomDataSymbol)symbol, customDataById);
115 break; 115 break;
116 116
117 case TupleDefinitionType.WixBundleCustomDataCell: 117 case SymbolDefinitionType.WixBundleCustomDataCell:
118 this.IndexBundleCustomDataCellTuple((WixBundleCustomDataCellTuple)tuple, cellsByCustomDataAndElementId); 118 this.IndexBundleCustomDataCellSymbol((WixBundleCustomDataCellSymbol)symbol, cellsByCustomDataAndElementId);
119 break; 119 break;
120 120
121 case TupleDefinitionType.MustBeFromAnExtension: 121 case SymbolDefinitionType.MustBeFromAnExtension:
122 unknownTuple = !this.AddTupleFromExtension(tuple); 122 unknownSymbol = !this.AddSymbolFromExtension(symbol);
123 break; 123 break;
124 124
125 default: 125 default:
126 unknownTuple = true; 126 unknownSymbol = true;
127 break; 127 break;
128 } 128 }
129 129
130 if (unknownTuple) 130 if (unknownSymbol)
131 { 131 {
132 this.Messaging.Write(WarningMessages.TupleNotTranslatedToOutput(tuple)); 132 this.Messaging.Write(WarningMessages.SymbolNotTranslatedToOutput(symbol));
133 } 133 }
134 } 134 }
135 135
136 this.AddIndexedCellTuples(customDataById, cellsByCustomDataAndElementId); 136 this.AddIndexedCellSymbols(customDataById, cellsByCustomDataAndElementId);
137 } 137 }
138 138
139 private bool IndexBundleCustomDataTuple(WixBundleCustomDataTuple wixBundleCustomDataTuple, Dictionary<string, WixBundleCustomDataTuple> customDataById) 139 private bool IndexBundleCustomDataSymbol(WixBundleCustomDataSymbol wixBundleCustomDataSymbol, Dictionary<string, WixBundleCustomDataSymbol> customDataById)
140 { 140 {
141 switch (wixBundleCustomDataTuple.Type) 141 switch (wixBundleCustomDataSymbol.Type)
142 { 142 {
143 case WixBundleCustomDataType.BootstrapperApplication: 143 case WixBundleCustomDataType.BootstrapperApplication:
144 case WixBundleCustomDataType.BundleExtension: 144 case WixBundleCustomDataType.BundleExtension:
@@ -147,38 +147,38 @@ namespace WixToolset.Core.Burn.Bind
147 return false; 147 return false;
148 } 148 }
149 149
150 var customDataId = wixBundleCustomDataTuple.Id.Id; 150 var customDataId = wixBundleCustomDataSymbol.Id.Id;
151 customDataById.Add(customDataId, wixBundleCustomDataTuple); 151 customDataById.Add(customDataId, wixBundleCustomDataSymbol);
152 return true; 152 return true;
153 } 153 }
154 154
155 private void IndexBundleCustomDataCellTuple(WixBundleCustomDataCellTuple wixBundleCustomDataCellTuple, Dictionary<string, List<WixBundleCustomDataCellTuple>> cellsByCustomDataAndElementId) 155 private void IndexBundleCustomDataCellSymbol(WixBundleCustomDataCellSymbol wixBundleCustomDataCellSymbol, Dictionary<string, List<WixBundleCustomDataCellSymbol>> cellsByCustomDataAndElementId)
156 { 156 {
157 var tableAndRowId = wixBundleCustomDataCellTuple.CustomDataRef + "/" + wixBundleCustomDataCellTuple.ElementId; 157 var tableAndRowId = wixBundleCustomDataCellSymbol.CustomDataRef + "/" + wixBundleCustomDataCellSymbol.ElementId;
158 if (!cellsByCustomDataAndElementId.TryGetValue(tableAndRowId, out var cells)) 158 if (!cellsByCustomDataAndElementId.TryGetValue(tableAndRowId, out var cells))
159 { 159 {
160 cells = new List<WixBundleCustomDataCellTuple>(); 160 cells = new List<WixBundleCustomDataCellSymbol>();
161 cellsByCustomDataAndElementId.Add(tableAndRowId, cells); 161 cellsByCustomDataAndElementId.Add(tableAndRowId, cells);
162 } 162 }
163 163
164 cells.Add(wixBundleCustomDataCellTuple); 164 cells.Add(wixBundleCustomDataCellSymbol);
165 } 165 }
166 166
167 private void AddIndexedCellTuples(Dictionary<string, WixBundleCustomDataTuple> customDataById, Dictionary<string, List<WixBundleCustomDataCellTuple>> cellsByCustomDataAndElementId) 167 private void AddIndexedCellSymbols(Dictionary<string, WixBundleCustomDataSymbol> customDataById, Dictionary<string, List<WixBundleCustomDataCellSymbol>> cellsByCustomDataAndElementId)
168 { 168 {
169 foreach (var elementValues in cellsByCustomDataAndElementId.Values) 169 foreach (var elementValues in cellsByCustomDataAndElementId.Values)
170 { 170 {
171 var elementName = elementValues[0].CustomDataRef; 171 var elementName = elementValues[0].CustomDataRef;
172 var customDataTuple = customDataById[elementName]; 172 var customDataSymbol = customDataById[elementName];
173 173
174 var attributeNames = customDataTuple.AttributeNamesSeparated; 174 var attributeNames = customDataSymbol.AttributeNamesSeparated;
175 175
176 var elementValuesByAttribute = elementValues.ToDictionary(t => t.AttributeRef, t => t.Value); 176 var elementValuesByAttribute = elementValues.ToDictionary(t => t.AttributeRef, t => t.Value);
177 177
178 var sb = new StringBuilder(); 178 var sb = new StringBuilder();
179 using (var writer = XmlWriter.Create(sb, BurnBackendHelper.WriterSettings)) 179 using (var writer = XmlWriter.Create(sb, BurnBackendHelper.WriterSettings))
180 { 180 {
181 switch (customDataTuple.Type) 181 switch (customDataSymbol.Type)
182 { 182 {
183 case WixBundleCustomDataType.BootstrapperApplication: 183 case WixBundleCustomDataType.BootstrapperApplication:
184 writer.WriteStartElement(elementName, BurnCommon.BADataNamespace); 184 writer.WriteStartElement(elementName, BurnCommon.BADataNamespace);
@@ -202,13 +202,13 @@ namespace WixToolset.Core.Burn.Bind
202 writer.WriteEndElement(); 202 writer.WriteEndElement();
203 } 203 }
204 204
205 switch (customDataTuple.Type) 205 switch (customDataSymbol.Type)
206 { 206 {
207 case WixBundleCustomDataType.BootstrapperApplication: 207 case WixBundleCustomDataType.BootstrapperApplication:
208 this.BackendHelper.AddBootstrapperApplicationData(sb.ToString()); 208 this.BackendHelper.AddBootstrapperApplicationData(sb.ToString());
209 break; 209 break;
210 case WixBundleCustomDataType.BundleExtension: 210 case WixBundleCustomDataType.BundleExtension:
211 this.BackendHelper.AddBundleExtensionData(customDataTuple.BundleExtensionRef, sb.ToString()); 211 this.BackendHelper.AddBundleExtensionData(customDataSymbol.BundleExtensionRef, sb.ToString());
212 break; 212 break;
213 default: 213 default:
214 throw new NotImplementedException(); 214 throw new NotImplementedException();
@@ -216,11 +216,11 @@ namespace WixToolset.Core.Burn.Bind
216 } 216 }
217 } 217 }
218 218
219 private bool AddTupleFromExtension(IntermediateTuple tuple) 219 private bool AddSymbolFromExtension(IntermediateSymbol symbol)
220 { 220 {
221 foreach (var extension in this.BackendExtensions) 221 foreach (var extension in this.BackendExtensions)
222 { 222 {
223 if (extension.TryAddTupleToDataManifest(this.Section, tuple)) 223 if (extension.TryAddSymbolToDataManifest(this.Section, symbol))
224 { 224 {
225 return true; 225 return true;
226 } 226 }
diff --git a/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs b/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs
index 0a80760d..24d6f542 100644
--- a/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs
+++ b/src/WixToolset.Core.Burn/Bind/LegacySearchFacade.cs
@@ -5,17 +5,17 @@ namespace WixToolset.Core.Burn
5 using System; 5 using System;
6 using System.Xml; 6 using System.Xml;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Tuples; 8 using WixToolset.Data.Symbols;
9 9
10 internal class LegacySearchFacade : BaseSearchFacade 10 internal class LegacySearchFacade : BaseSearchFacade
11 { 11 {
12 public LegacySearchFacade(WixSearchTuple searchTuple, IntermediateTuple searchSpecificTuple) 12 public LegacySearchFacade(WixSearchSymbol searchSymbol, IntermediateSymbol searchSpecificSymbol)
13 { 13 {
14 this.SearchTuple = searchTuple; 14 this.SearchSymbol = searchSymbol;
15 this.SearchSpecificTuple = searchSpecificTuple; 15 this.SearchSpecificSymbol = searchSpecificSymbol;
16 } 16 }
17 17
18 public IntermediateTuple SearchSpecificTuple { get; } 18 public IntermediateSymbol SearchSpecificSymbol { get; }
19 19
20 /// <summary> 20 /// <summary>
21 /// Generates Burn manifest and ParameterInfo-style markup a search. 21 /// Generates Burn manifest and ParameterInfo-style markup a search.
@@ -23,45 +23,45 @@ namespace WixToolset.Core.Burn
23 /// <param name="writer"></param> 23 /// <param name="writer"></param>
24 public override void WriteXml(XmlTextWriter writer) 24 public override void WriteXml(XmlTextWriter writer)
25 { 25 {
26 switch (this.SearchSpecificTuple) 26 switch (this.SearchSpecificSymbol)
27 { 27 {
28 case WixComponentSearchTuple tuple: 28 case WixComponentSearchSymbol symbol:
29 this.WriteComponentSearchXml(writer, tuple); 29 this.WriteComponentSearchXml(writer, symbol);
30 break; 30 break;
31 case WixFileSearchTuple tuple: 31 case WixFileSearchSymbol symbol:
32 this.WriteFileSearchXml(writer, tuple); 32 this.WriteFileSearchXml(writer, symbol);
33 break; 33 break;
34 case WixProductSearchTuple tuple: 34 case WixProductSearchSymbol symbol:
35 this.WriteProductSearchXml(writer, tuple); 35 this.WriteProductSearchXml(writer, symbol);
36 break; 36 break;
37 case WixRegistrySearchTuple tuple: 37 case WixRegistrySearchSymbol symbol:
38 this.WriteRegistrySearchXml(writer, tuple); 38 this.WriteRegistrySearchXml(writer, symbol);
39 break; 39 break;
40 } 40 }
41 } 41 }
42 42
43 private void WriteComponentSearchXml(XmlTextWriter writer, WixComponentSearchTuple searchTuple) 43 private void WriteComponentSearchXml(XmlTextWriter writer, WixComponentSearchSymbol searchSymbol)
44 { 44 {
45 writer.WriteStartElement("MsiComponentSearch"); 45 writer.WriteStartElement("MsiComponentSearch");
46 46
47 base.WriteXml(writer); 47 base.WriteXml(writer);
48 48
49 writer.WriteAttributeString("ComponentId", searchTuple.Guid); 49 writer.WriteAttributeString("ComponentId", searchSymbol.Guid);
50 50
51 if (!String.IsNullOrEmpty(searchTuple.ProductCode)) 51 if (!String.IsNullOrEmpty(searchSymbol.ProductCode))
52 { 52 {
53 writer.WriteAttributeString("ProductCode", searchTuple.ProductCode); 53 writer.WriteAttributeString("ProductCode", searchSymbol.ProductCode);
54 } 54 }
55 55
56 if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.KeyPath)) 56 if (0 != (searchSymbol.Attributes & WixComponentSearchAttributes.KeyPath))
57 { 57 {
58 writer.WriteAttributeString("Type", "keyPath"); 58 writer.WriteAttributeString("Type", "keyPath");
59 } 59 }
60 else if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.State)) 60 else if (0 != (searchSymbol.Attributes & WixComponentSearchAttributes.State))
61 { 61 {
62 writer.WriteAttributeString("Type", "state"); 62 writer.WriteAttributeString("Type", "state");
63 } 63 }
64 else if (0 != (searchTuple.Attributes & WixComponentSearchAttributes.WantDirectory)) 64 else if (0 != (searchSymbol.Attributes & WixComponentSearchAttributes.WantDirectory))
65 { 65 {
66 writer.WriteAttributeString("Type", "directory"); 66 writer.WriteAttributeString("Type", "directory");
67 } 67 }
@@ -69,18 +69,18 @@ namespace WixToolset.Core.Burn
69 writer.WriteEndElement(); 69 writer.WriteEndElement();
70 } 70 }
71 71
72 private void WriteFileSearchXml(XmlTextWriter writer, WixFileSearchTuple searchTuple) 72 private void WriteFileSearchXml(XmlTextWriter writer, WixFileSearchSymbol searchSymbol)
73 { 73 {
74 writer.WriteStartElement((0 == (searchTuple.Attributes & WixFileSearchAttributes.IsDirectory)) ? "FileSearch" : "DirectorySearch"); 74 writer.WriteStartElement((0 == (searchSymbol.Attributes & WixFileSearchAttributes.IsDirectory)) ? "FileSearch" : "DirectorySearch");
75 75
76 base.WriteXml(writer); 76 base.WriteXml(writer);
77 77
78 writer.WriteAttributeString("Path", searchTuple.Path); 78 writer.WriteAttributeString("Path", searchSymbol.Path);
79 if (WixFileSearchAttributes.WantExists == (searchTuple.Attributes & WixFileSearchAttributes.WantExists)) 79 if (WixFileSearchAttributes.WantExists == (searchSymbol.Attributes & WixFileSearchAttributes.WantExists))
80 { 80 {
81 writer.WriteAttributeString("Type", "exists"); 81 writer.WriteAttributeString("Type", "exists");
82 } 82 }
83 else if (WixFileSearchAttributes.WantVersion == (searchTuple.Attributes & WixFileSearchAttributes.WantVersion)) 83 else if (WixFileSearchAttributes.WantVersion == (searchSymbol.Attributes & WixFileSearchAttributes.WantVersion))
84 { 84 {
85 // Can never get here for DirectorySearch. 85 // Can never get here for DirectorySearch.
86 writer.WriteAttributeString("Type", "version"); 86 writer.WriteAttributeString("Type", "version");
@@ -92,34 +92,34 @@ namespace WixToolset.Core.Burn
92 writer.WriteEndElement(); 92 writer.WriteEndElement();
93 } 93 }
94 94
95 private void WriteProductSearchXml(XmlTextWriter writer, WixProductSearchTuple tuple) 95 private void WriteProductSearchXml(XmlTextWriter writer, WixProductSearchSymbol symbol)
96 { 96 {
97 writer.WriteStartElement("MsiProductSearch"); 97 writer.WriteStartElement("MsiProductSearch");
98 98
99 base.WriteXml(writer); 99 base.WriteXml(writer);
100 100
101 if (0 != (tuple.Attributes & WixProductSearchAttributes.UpgradeCode)) 101 if (0 != (symbol.Attributes & WixProductSearchAttributes.UpgradeCode))
102 { 102 {
103 writer.WriteAttributeString("UpgradeCode", tuple.Guid); 103 writer.WriteAttributeString("UpgradeCode", symbol.Guid);
104 } 104 }
105 else 105 else
106 { 106 {
107 writer.WriteAttributeString("ProductCode", tuple.Guid); 107 writer.WriteAttributeString("ProductCode", symbol.Guid);
108 } 108 }
109 109
110 if (0 != (tuple.Attributes & WixProductSearchAttributes.Version)) 110 if (0 != (symbol.Attributes & WixProductSearchAttributes.Version))
111 { 111 {
112 writer.WriteAttributeString("Type", "version"); 112 writer.WriteAttributeString("Type", "version");
113 } 113 }
114 else if (0 != (tuple.Attributes & WixProductSearchAttributes.Language)) 114 else if (0 != (symbol.Attributes & WixProductSearchAttributes.Language))
115 { 115 {
116 writer.WriteAttributeString("Type", "language"); 116 writer.WriteAttributeString("Type", "language");
117 } 117 }
118 else if (0 != (tuple.Attributes & WixProductSearchAttributes.State)) 118 else if (0 != (symbol.Attributes & WixProductSearchAttributes.State))
119 { 119 {
120 writer.WriteAttributeString("Type", "state"); 120 writer.WriteAttributeString("Type", "state");
121 } 121 }
122 else if (0 != (tuple.Attributes & WixProductSearchAttributes.Assignment)) 122 else if (0 != (symbol.Attributes & WixProductSearchAttributes.Assignment))
123 { 123 {
124 writer.WriteAttributeString("Type", "assignment"); 124 writer.WriteAttributeString("Type", "assignment");
125 } 125 }
@@ -127,13 +127,13 @@ namespace WixToolset.Core.Burn
127 writer.WriteEndElement(); 127 writer.WriteEndElement();
128 } 128 }
129 129
130 private void WriteRegistrySearchXml(XmlTextWriter writer, WixRegistrySearchTuple tuple) 130 private void WriteRegistrySearchXml(XmlTextWriter writer, WixRegistrySearchSymbol symbol)
131 { 131 {
132 writer.WriteStartElement("RegistrySearch"); 132 writer.WriteStartElement("RegistrySearch");
133 133
134 base.WriteXml(writer); 134 base.WriteXml(writer);
135 135
136 switch (tuple.Root) 136 switch (symbol.Root)
137 { 137 {
138 case RegistryRootType.ClassesRoot: 138 case RegistryRootType.ClassesRoot:
139 writer.WriteAttributeString("Root", "HKCR"); 139 writer.WriteAttributeString("Root", "HKCR");
@@ -149,25 +149,25 @@ namespace WixToolset.Core.Burn
149 break; 149 break;
150 } 150 }
151 151
152 writer.WriteAttributeString("Key", tuple.Key); 152 writer.WriteAttributeString("Key", symbol.Key);
153 153
154 if (!String.IsNullOrEmpty(tuple.Value)) 154 if (!String.IsNullOrEmpty(symbol.Value))
155 { 155 {
156 writer.WriteAttributeString("Value", tuple.Value); 156 writer.WriteAttributeString("Value", symbol.Value);
157 } 157 }
158 158
159 var existenceOnly = 0 != (tuple.Attributes & WixRegistrySearchAttributes.WantExists); 159 var existenceOnly = 0 != (symbol.Attributes & WixRegistrySearchAttributes.WantExists);
160 160
161 writer.WriteAttributeString("Type", existenceOnly ? "exists" : "value"); 161 writer.WriteAttributeString("Type", existenceOnly ? "exists" : "value");
162 162
163 if (0 != (tuple.Attributes & WixRegistrySearchAttributes.Win64)) 163 if (0 != (symbol.Attributes & WixRegistrySearchAttributes.Win64))
164 { 164 {
165 writer.WriteAttributeString("Win64", "yes"); 165 writer.WriteAttributeString("Win64", "yes");
166 } 166 }
167 167
168 if (!existenceOnly) 168 if (!existenceOnly)
169 { 169 {
170 if (0 != (tuple.Attributes & WixRegistrySearchAttributes.ExpandEnvironmentVariables)) 170 if (0 != (symbol.Attributes & WixRegistrySearchAttributes.ExpandEnvironmentVariables))
171 { 171 {
172 writer.WriteAttributeString("ExpandEnvironment", "yes"); 172 writer.WriteAttributeString("ExpandEnvironment", "yes");
173 } 173 }
diff --git a/src/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs b/src/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs
index e228b296..29815203 100644
--- a/src/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs
+++ b/src/WixToolset.Core.Burn/Bind/ProcessDependencyProvidersCommand.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core.Burn.Bind
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Core.Burn.Bundles; 9 using WixToolset.Core.Burn.Bundles;
10 using WixToolset.Extensibility.Services; 10 using WixToolset.Extensibility.Services;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 12
13 internal class ProcessDependencyProvidersCommand 13 internal class ProcessDependencyProvidersCommand
14 { 14 {
@@ -22,7 +22,7 @@ namespace WixToolset.Core.Burn.Bind
22 22
23 public string BundleProviderKey { get; private set; } 23 public string BundleProviderKey { get; private set; }
24 24
25 public Dictionary<string, ProvidesDependencyTuple> DependencyTuplesByKey { get; private set; } 25 public Dictionary<string, ProvidesDependencySymbol> DependencySymbolsByKey { get; private set; }
26 26
27 private IMessaging Messaging { get; } 27 private IMessaging Messaging { get; }
28 28
@@ -38,42 +38,42 @@ namespace WixToolset.Core.Burn.Bind
38 /// </summary> 38 /// </summary>
39 public void Execute() 39 public void Execute()
40 { 40 {
41 var wixDependencyProviderTuples = this.Section.Tuples.OfType<WixDependencyProviderTuple>(); 41 var wixDependencyProviderSymbols = this.Section.Symbols.OfType<WixDependencyProviderSymbol>();
42 42
43 foreach (var wixDependencyProviderTuple in wixDependencyProviderTuples) 43 foreach (var wixDependencyProviderSymbol in wixDependencyProviderSymbols)
44 { 44 {
45 // Sets the provider key for the bundle, if it is not set already. 45 // Sets the provider key for the bundle, if it is not set already.
46 if (String.IsNullOrEmpty(this.BundleProviderKey)) 46 if (String.IsNullOrEmpty(this.BundleProviderKey))
47 { 47 {
48 if (wixDependencyProviderTuple.Bundle) 48 if (wixDependencyProviderSymbol.Bundle)
49 { 49 {
50 this.BundleProviderKey = wixDependencyProviderTuple.ProviderKey; 50 this.BundleProviderKey = wixDependencyProviderSymbol.ProviderKey;
51 } 51 }
52 } 52 }
53 53
54 // Import any authored dependencies. These may merge with imported provides from MSI packages. 54 // Import any authored dependencies. These may merge with imported provides from MSI packages.
55 var packageId = wixDependencyProviderTuple.Id.Id; 55 var packageId = wixDependencyProviderSymbol.Id.Id;
56 56
57 if (this.Facades.TryGetValue(packageId, out var facade)) 57 if (this.Facades.TryGetValue(packageId, out var facade))
58 { 58 {
59 var dependency = this.Section.AddTuple(new ProvidesDependencyTuple(wixDependencyProviderTuple.SourceLineNumbers, wixDependencyProviderTuple.Id) 59 var dependency = this.Section.AddSymbol(new ProvidesDependencySymbol(wixDependencyProviderSymbol.SourceLineNumbers, wixDependencyProviderSymbol.Id)
60 { 60 {
61 PackageRef = packageId, 61 PackageRef = packageId,
62 Key = wixDependencyProviderTuple.ProviderKey, 62 Key = wixDependencyProviderSymbol.ProviderKey,
63 Version = wixDependencyProviderTuple.Version, 63 Version = wixDependencyProviderSymbol.Version,
64 DisplayName = wixDependencyProviderTuple.DisplayName, 64 DisplayName = wixDependencyProviderSymbol.DisplayName,
65 Attributes = (int)wixDependencyProviderTuple.Attributes 65 Attributes = (int)wixDependencyProviderSymbol.Attributes
66 }); 66 });
67 67
68 if (String.IsNullOrEmpty(dependency.Key)) 68 if (String.IsNullOrEmpty(dependency.Key))
69 { 69 {
70 switch (facade.SpecificPackageTuple) 70 switch (facade.SpecificPackageSymbol)
71 { 71 {
72 // The WixDependencyExtension allows an empty Key for MSIs and MSPs. 72 // The WixDependencyExtension allows an empty Key for MSIs and MSPs.
73 case WixBundleMsiPackageTuple msiPackage: 73 case WixBundleMsiPackageSymbol msiPackage:
74 dependency.Key = msiPackage.ProductCode; 74 dependency.Key = msiPackage.ProductCode;
75 break; 75 break;
76 case WixBundleMspPackageTuple mspPackage: 76 case WixBundleMspPackageSymbol mspPackage:
77 dependency.Key = mspPackage.PatchCode; 77 dependency.Key = mspPackage.PatchCode;
78 break; 78 break;
79 } 79 }
@@ -81,7 +81,7 @@ namespace WixToolset.Core.Burn.Bind
81 81
82 if (String.IsNullOrEmpty(dependency.Version)) 82 if (String.IsNullOrEmpty(dependency.Version))
83 { 83 {
84 dependency.Version = facade.PackageTuple.Version; 84 dependency.Version = facade.PackageSymbol.Version;
85 } 85 }
86 86
87 // If the version is still missing, a version could not be harvested from the package and was not authored. 87 // If the version is still missing, a version could not be harvested from the package and was not authored.
@@ -92,55 +92,55 @@ namespace WixToolset.Core.Burn.Bind
92 92
93 if (String.IsNullOrEmpty(dependency.DisplayName)) 93 if (String.IsNullOrEmpty(dependency.DisplayName))
94 { 94 {
95 dependency.DisplayName = facade.PackageTuple.DisplayName; 95 dependency.DisplayName = facade.PackageSymbol.DisplayName;
96 } 96 }
97 } 97 }
98 } 98 }
99 99
100 this.DependencyTuplesByKey = this.GetDependencyTuplesByKey(); 100 this.DependencySymbolsByKey = this.GetDependencySymbolsByKey();
101 101
102 // Generate providers for MSI and MSP packages that still do not have providers. 102 // Generate providers for MSI and MSP packages that still do not have providers.
103 foreach (var facade in this.Facades.Values) 103 foreach (var facade in this.Facades.Values)
104 { 104 {
105 string key = null; 105 string key = null;
106 106
107 //if (WixBundlePackageType.Msi == facade.PackageTuple.Type) 107 //if (WixBundlePackageType.Msi == facade.PackageSymbol.Type)
108 if (facade.SpecificPackageTuple is WixBundleMsiPackageTuple msiPackage) 108 if (facade.SpecificPackageSymbol is WixBundleMsiPackageSymbol msiPackage)
109 { 109 {
110 //var msiPackage = (WixBundleMsiPackageTuple)facade.SpecificPackageTuple; 110 //var msiPackage = (WixBundleMsiPackageSymbol)facade.SpecificPackageSymbol;
111 key = msiPackage.ProductCode; 111 key = msiPackage.ProductCode;
112 } 112 }
113 //else if (WixBundlePackageType.Msp == facade.PackageTuple.Type) 113 //else if (WixBundlePackageType.Msp == facade.PackageSymbol.Type)
114 else if (facade.SpecificPackageTuple is WixBundleMspPackageTuple mspPackage) 114 else if (facade.SpecificPackageSymbol is WixBundleMspPackageSymbol mspPackage)
115 { 115 {
116 //var mspPackage = (WixBundleMspPackageTuple)facade.SpecificPackageTuple; 116 //var mspPackage = (WixBundleMspPackageSymbol)facade.SpecificPackageSymbol;
117 key = mspPackage.PatchCode; 117 key = mspPackage.PatchCode;
118 } 118 }
119 119
120 if (!String.IsNullOrEmpty(key) && !this.DependencyTuplesByKey.ContainsKey(key)) 120 if (!String.IsNullOrEmpty(key) && !this.DependencySymbolsByKey.ContainsKey(key))
121 { 121 {
122 var dependency = this.Section.AddTuple(new ProvidesDependencyTuple(facade.PackageTuple.SourceLineNumbers, facade.PackageTuple.Id) 122 var dependency = this.Section.AddSymbol(new ProvidesDependencySymbol(facade.PackageSymbol.SourceLineNumbers, facade.PackageSymbol.Id)
123 { 123 {
124 PackageRef = facade.PackageId, 124 PackageRef = facade.PackageId,
125 Key = key, 125 Key = key,
126 Version = facade.PackageTuple.Version, 126 Version = facade.PackageSymbol.Version,
127 DisplayName = facade.PackageTuple.DisplayName 127 DisplayName = facade.PackageSymbol.DisplayName
128 }); 128 });
129 129
130 this.DependencyTuplesByKey.Add(dependency.Key, dependency); 130 this.DependencySymbolsByKey.Add(dependency.Key, dependency);
131 } 131 }
132 } 132 }
133 } 133 }
134 134
135 private Dictionary<string, ProvidesDependencyTuple> GetDependencyTuplesByKey() 135 private Dictionary<string, ProvidesDependencySymbol> GetDependencySymbolsByKey()
136 { 136 {
137 var dependencyTuplesByKey = new Dictionary<string, ProvidesDependencyTuple>(); 137 var dependencySymbolsByKey = new Dictionary<string, ProvidesDependencySymbol>();
138 138
139 var dependencyTuples = this.Section.Tuples.OfType<ProvidesDependencyTuple>(); 139 var dependencySymbols = this.Section.Symbols.OfType<ProvidesDependencySymbol>();
140 140
141 foreach (var dependency in dependencyTuples) 141 foreach (var dependency in dependencySymbols)
142 { 142 {
143 if (dependencyTuplesByKey.TryGetValue(dependency.Key, out var collision)) 143 if (dependencySymbolsByKey.TryGetValue(dependency.Key, out var collision))
144 { 144 {
145 // If not a perfect dependency collision, display an error. 145 // If not a perfect dependency collision, display an error.
146 if (dependency.Key != collision.Key || 146 if (dependency.Key != collision.Key ||
@@ -152,11 +152,11 @@ namespace WixToolset.Core.Burn.Bind
152 } 152 }
153 else 153 else
154 { 154 {
155 dependencyTuplesByKey.Add(dependency.Key, dependency); 155 dependencySymbolsByKey.Add(dependency.Key, dependency);
156 } 156 }
157 } 157 }
158 158
159 return dependencyTuplesByKey; 159 return dependencySymbolsByKey;
160 } 160 }
161 } 161 }
162} 162}
diff --git a/src/WixToolset.Core.Burn/Bind/SetVariableSearchFacade.cs b/src/WixToolset.Core.Burn/Bind/SetVariableSearchFacade.cs
index 0fe60422..fb6f72dd 100644
--- a/src/WixToolset.Core.Burn/Bind/SetVariableSearchFacade.cs
+++ b/src/WixToolset.Core.Burn/Bind/SetVariableSearchFacade.cs
@@ -3,17 +3,17 @@
3namespace WixToolset.Core.Burn 3namespace WixToolset.Core.Burn
4{ 4{
5 using System.Xml; 5 using System.Xml;
6 using WixToolset.Data.Tuples; 6 using WixToolset.Data.Symbols;
7 7
8 internal class SetVariableSearchFacade : BaseSearchFacade 8 internal class SetVariableSearchFacade : BaseSearchFacade
9 { 9 {
10 public SetVariableSearchFacade(WixSearchTuple searchTuple, WixSetVariableTuple setVariableTuple) 10 public SetVariableSearchFacade(WixSearchSymbol searchSymbol, WixSetVariableSymbol setVariableSymbol)
11 { 11 {
12 this.SearchTuple = searchTuple; 12 this.SearchSymbol = searchSymbol;
13 this.SetVariableTuple = setVariableTuple; 13 this.SetVariableSymbol = setVariableSymbol;
14 } 14 }
15 15
16 private WixSetVariableTuple SetVariableTuple { get; } 16 private WixSetVariableSymbol SetVariableSymbol { get; }
17 17
18 public override void WriteXml(XmlTextWriter writer) 18 public override void WriteXml(XmlTextWriter writer)
19 { 19 {
@@ -21,10 +21,10 @@ namespace WixToolset.Core.Burn
21 21
22 base.WriteXml(writer); 22 base.WriteXml(writer);
23 23
24 if (this.SetVariableTuple.Type != null) 24 if (this.SetVariableSymbol.Type != null)
25 { 25 {
26 writer.WriteAttributeString("Value", this.SetVariableTuple.Value); 26 writer.WriteAttributeString("Value", this.SetVariableSymbol.Value);
27 writer.WriteAttributeString("Type", this.SetVariableTuple.Type); 27 writer.WriteAttributeString("Type", this.SetVariableSymbol.Type);
28 } 28 }
29 29
30 writer.WriteEndElement(); 30 writer.WriteEndElement();
diff --git a/src/WixToolset.Core.Burn/Bundles/AutomaticallySlipstreamPatchesCommand.cs b/src/WixToolset.Core.Burn/Bundles/AutomaticallySlipstreamPatchesCommand.cs
index 6e08c68e..30edf7de 100644
--- a/src/WixToolset.Core.Burn/Bundles/AutomaticallySlipstreamPatchesCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/AutomaticallySlipstreamPatchesCommand.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core.Burn.Bundles
7 using System.Diagnostics; 7 using System.Diagnostics;
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 11
12 internal class AutomaticallySlipstreamPatchesCommand 12 internal class AutomaticallySlipstreamPatchesCommand
13 { 13 {
@@ -23,42 +23,42 @@ namespace WixToolset.Core.Burn.Bundles
23 23
24 public void Execute() 24 public void Execute()
25 { 25 {
26 var msiPackages = new List<WixBundleMsiPackageTuple>(); 26 var msiPackages = new List<WixBundleMsiPackageSymbol>();
27 var targetsProductCode = new Dictionary<string, List<WixBundlePatchTargetCodeTuple>>(); 27 var targetsProductCode = new Dictionary<string, List<WixBundlePatchTargetCodeSymbol>>();
28 var targetsUpgradeCode = new Dictionary<string, List<WixBundlePatchTargetCodeTuple>>(); 28 var targetsUpgradeCode = new Dictionary<string, List<WixBundlePatchTargetCodeSymbol>>();
29 29
30 foreach (var facade in this.PackageFacades) 30 foreach (var facade in this.PackageFacades)
31 { 31 {
32 // Keep track of all MSI packages. 32 // Keep track of all MSI packages.
33 if (facade.SpecificPackageTuple is WixBundleMsiPackageTuple msiPackage) 33 if (facade.SpecificPackageSymbol is WixBundleMsiPackageSymbol msiPackage)
34 { 34 {
35 msiPackages.Add(msiPackage); 35 msiPackages.Add(msiPackage);
36 } 36 }
37 else if (facade.SpecificPackageTuple is WixBundleMspPackageTuple mspPackage && mspPackage.Slipstream) 37 else if (facade.SpecificPackageSymbol is WixBundleMspPackageSymbol mspPackage && mspPackage.Slipstream)
38 { 38 {
39 var patchTargetCodeTuples = this.Section.Tuples 39 var patchTargetCodeSymbols = this.Section.Symbols
40 .OfType<WixBundlePatchTargetCodeTuple>() 40 .OfType<WixBundlePatchTargetCodeSymbol>()
41 .Where(r => r.PackageRef == facade.PackageId); 41 .Where(r => r.PackageRef == facade.PackageId);
42 42
43 // Index target ProductCodes and UpgradeCodes for slipstreamed MSPs. 43 // Index target ProductCodes and UpgradeCodes for slipstreamed MSPs.
44 foreach (var tuple in patchTargetCodeTuples) 44 foreach (var symbol in patchTargetCodeSymbols)
45 { 45 {
46 if (tuple.TargetsProductCode) 46 if (symbol.TargetsProductCode)
47 { 47 {
48 if (!targetsProductCode.TryGetValue(tuple.TargetCode, out var tuples)) 48 if (!targetsProductCode.TryGetValue(symbol.TargetCode, out var symbols))
49 { 49 {
50 tuples = new List<WixBundlePatchTargetCodeTuple>(); 50 symbols = new List<WixBundlePatchTargetCodeSymbol>();
51 targetsProductCode.Add(tuple.TargetCode, tuples); 51 targetsProductCode.Add(symbol.TargetCode, symbols);
52 } 52 }
53 53
54 tuples.Add(tuple); 54 symbols.Add(symbol);
55 } 55 }
56 else if (tuple.TargetsUpgradeCode) 56 else if (symbol.TargetsUpgradeCode)
57 { 57 {
58 if (!targetsUpgradeCode.TryGetValue(tuple.TargetCode, out var tuples)) 58 if (!targetsUpgradeCode.TryGetValue(symbol.TargetCode, out var symbols))
59 { 59 {
60 tuples = new List<WixBundlePatchTargetCodeTuple>(); 60 symbols = new List<WixBundlePatchTargetCodeSymbol>();
61 targetsUpgradeCode.Add(tuple.TargetCode, tuples); 61 targetsUpgradeCode.Add(symbol.TargetCode, symbols);
62 } 62 }
63 } 63 }
64 } 64 }
@@ -70,39 +70,39 @@ namespace WixToolset.Core.Burn.Bundles
70 // Loop through the MSI and slipstream patches targeting it. 70 // Loop through the MSI and slipstream patches targeting it.
71 foreach (var msi in msiPackages) 71 foreach (var msi in msiPackages)
72 { 72 {
73 if (targetsProductCode.TryGetValue(msi.ProductCode, out var tuples)) 73 if (targetsProductCode.TryGetValue(msi.ProductCode, out var symbols))
74 { 74 {
75 foreach (var tuple in tuples) 75 foreach (var symbol in symbols)
76 { 76 {
77 Debug.Assert(tuple.TargetsProductCode); 77 Debug.Assert(symbol.TargetsProductCode);
78 Debug.Assert(!tuple.TargetsUpgradeCode); 78 Debug.Assert(!symbol.TargetsUpgradeCode);
79 79
80 this.TryAddSlipstreamTuple(slipstreamMspIds, msi, tuple); 80 this.TryAddSlipstreamSymbol(slipstreamMspIds, msi, symbol);
81 } 81 }
82 } 82 }
83 83
84 if (!String.IsNullOrEmpty(msi.UpgradeCode) && targetsUpgradeCode.TryGetValue(msi.UpgradeCode, out tuples)) 84 if (!String.IsNullOrEmpty(msi.UpgradeCode) && targetsUpgradeCode.TryGetValue(msi.UpgradeCode, out symbols))
85 { 85 {
86 foreach (var tuple in tuples) 86 foreach (var symbol in symbols)
87 { 87 {
88 Debug.Assert(!tuple.TargetsProductCode); 88 Debug.Assert(!symbol.TargetsProductCode);
89 Debug.Assert(tuple.TargetsUpgradeCode); 89 Debug.Assert(symbol.TargetsUpgradeCode);
90 90
91 this.TryAddSlipstreamTuple(slipstreamMspIds, msi, tuple); 91 this.TryAddSlipstreamSymbol(slipstreamMspIds, msi, symbol);
92 } 92 }
93 93
94 tuples = null; 94 symbols = null;
95 } 95 }
96 } 96 }
97 } 97 }
98 98
99 private bool TryAddSlipstreamTuple(HashSet<string> slipstreamMspIds, WixBundleMsiPackageTuple msiPackage, WixBundlePatchTargetCodeTuple patchTargetCode) 99 private bool TryAddSlipstreamSymbol(HashSet<string> slipstreamMspIds, WixBundleMsiPackageSymbol msiPackage, WixBundlePatchTargetCodeSymbol patchTargetCode)
100 { 100 {
101 var id = new Identifier(AccessModifier.Private, msiPackage.Id.Id, patchTargetCode.PackageRef); 101 var id = new Identifier(AccessModifier.Private, msiPackage.Id.Id, patchTargetCode.PackageRef);
102 102
103 if (slipstreamMspIds.Add(id.Id)) 103 if (slipstreamMspIds.Add(id.Id))
104 { 104 {
105 this.Section.AddTuple(new WixBundleSlipstreamMspTuple(patchTargetCode.SourceLineNumbers) 105 this.Section.AddSymbol(new WixBundleSlipstreamMspSymbol(patchTargetCode.SourceLineNumbers)
106 { 106 {
107 TargetPackageRef = msiPackage.Id.Id, 107 TargetPackageRef = msiPackage.Id.Id,
108 MspPackageRef = patchTargetCode.PackageRef, 108 MspPackageRef = patchTargetCode.PackageRef,
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs
index 4468fee5..b4648d18 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs
@@ -11,24 +11,24 @@ namespace WixToolset.Core.Burn.Bundles
11 using System.Xml; 11 using System.Xml;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Burn; 13 using WixToolset.Data.Burn;
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Symbols;
15 15
16 internal class CreateBootstrapperApplicationManifestCommand 16 internal class CreateBootstrapperApplicationManifestCommand
17 { 17 {
18 public CreateBootstrapperApplicationManifestCommand(IntermediateSection section, WixBundleTuple bundleTuple, IEnumerable<PackageFacade> chainPackages, int lastUXPayloadIndex, Dictionary<string, WixBundlePayloadTuple> payloadTuples, string intermediateFolder, IInternalBurnBackendHelper internalBurnBackendHelper) 18 public CreateBootstrapperApplicationManifestCommand(IntermediateSection section, WixBundleSymbol bundleSymbol, IEnumerable<PackageFacade> chainPackages, int lastUXPayloadIndex, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols, string intermediateFolder, IInternalBurnBackendHelper internalBurnBackendHelper)
19 { 19 {
20 this.Section = section; 20 this.Section = section;
21 this.BundleTuple = bundleTuple; 21 this.BundleSymbol = bundleSymbol;
22 this.ChainPackages = chainPackages; 22 this.ChainPackages = chainPackages;
23 this.LastUXPayloadIndex = lastUXPayloadIndex; 23 this.LastUXPayloadIndex = lastUXPayloadIndex;
24 this.Payloads = payloadTuples; 24 this.Payloads = payloadSymbols;
25 this.IntermediateFolder = intermediateFolder; 25 this.IntermediateFolder = intermediateFolder;
26 this.InternalBurnBackendHelper = internalBurnBackendHelper; 26 this.InternalBurnBackendHelper = internalBurnBackendHelper;
27 } 27 }
28 28
29 private IntermediateSection Section { get; } 29 private IntermediateSection Section { get; }
30 30
31 private WixBundleTuple BundleTuple { get; } 31 private WixBundleSymbol BundleSymbol { get; }
32 32
33 private IEnumerable<PackageFacade> ChainPackages { get; } 33 private IEnumerable<PackageFacade> ChainPackages { get; }
34 34
@@ -36,11 +36,11 @@ namespace WixToolset.Core.Burn.Bundles
36 36
37 private int LastUXPayloadIndex { get; } 37 private int LastUXPayloadIndex { get; }
38 38
39 private Dictionary<string, WixBundlePayloadTuple> Payloads { get; } 39 private Dictionary<string, WixBundlePayloadSymbol> Payloads { get; }
40 40
41 private string IntermediateFolder { get; } 41 private string IntermediateFolder { get; }
42 42
43 public WixBundlePayloadTuple BootstrapperApplicationManifestPayloadRow { get; private set; } 43 public WixBundlePayloadSymbol BootstrapperApplicationManifestPayloadRow { get; private set; }
44 44
45 public string OutputPath { get; private set; } 45 public string OutputPath { get; private set; }
46 46
@@ -84,12 +84,12 @@ namespace WixToolset.Core.Burn.Bundles
84 { 84 {
85 writer.WriteStartElement("WixBundleProperties"); 85 writer.WriteStartElement("WixBundleProperties");
86 86
87 writer.WriteAttributeString("DisplayName", this.BundleTuple.Name); 87 writer.WriteAttributeString("DisplayName", this.BundleSymbol.Name);
88 writer.WriteAttributeString("LogPathVariable", this.BundleTuple.LogPathVariable); 88 writer.WriteAttributeString("LogPathVariable", this.BundleSymbol.LogPathVariable);
89 writer.WriteAttributeString("Compressed", this.BundleTuple.Compressed == true ? "yes" : "no"); 89 writer.WriteAttributeString("Compressed", this.BundleSymbol.Compressed == true ? "yes" : "no");
90 writer.WriteAttributeString("Id", this.BundleTuple.BundleId.ToUpperInvariant()); 90 writer.WriteAttributeString("Id", this.BundleSymbol.BundleId.ToUpperInvariant());
91 writer.WriteAttributeString("UpgradeCode", this.BundleTuple.UpgradeCode); 91 writer.WriteAttributeString("UpgradeCode", this.BundleSymbol.UpgradeCode);
92 writer.WriteAttributeString("PerMachine", this.BundleTuple.PerMachine ? "yes" : "no"); 92 writer.WriteAttributeString("PerMachine", this.BundleSymbol.PerMachine ? "yes" : "no");
93 93
94 writer.WriteEndElement(); 94 writer.WriteEndElement();
95 } 95 }
@@ -98,35 +98,35 @@ namespace WixToolset.Core.Burn.Bundles
98 { 98 {
99 foreach (var package in this.ChainPackages) 99 foreach (var package in this.ChainPackages)
100 { 100 {
101 var packagePayload = this.Payloads[package.PackageTuple.PayloadRef]; 101 var packagePayload = this.Payloads[package.PackageSymbol.PayloadRef];
102 102
103 var size = package.PackageTuple.Size.ToString(CultureInfo.InvariantCulture); 103 var size = package.PackageSymbol.Size.ToString(CultureInfo.InvariantCulture);
104 104
105 writer.WriteStartElement("WixPackageProperties"); 105 writer.WriteStartElement("WixPackageProperties");
106 106
107 writer.WriteAttributeString("Package", package.PackageId); 107 writer.WriteAttributeString("Package", package.PackageId);
108 writer.WriteAttributeString("Vital", package.PackageTuple.Vital == true ? "yes" : "no"); 108 writer.WriteAttributeString("Vital", package.PackageSymbol.Vital == true ? "yes" : "no");
109 109
110 if (!String.IsNullOrEmpty(package.PackageTuple.DisplayName)) 110 if (!String.IsNullOrEmpty(package.PackageSymbol.DisplayName))
111 { 111 {
112 writer.WriteAttributeString("DisplayName", package.PackageTuple.DisplayName); 112 writer.WriteAttributeString("DisplayName", package.PackageSymbol.DisplayName);
113 } 113 }
114 114
115 if (!String.IsNullOrEmpty(package.PackageTuple.Description)) 115 if (!String.IsNullOrEmpty(package.PackageSymbol.Description))
116 { 116 {
117 writer.WriteAttributeString("Description", package.PackageTuple.Description); 117 writer.WriteAttributeString("Description", package.PackageSymbol.Description);
118 } 118 }
119 119
120 writer.WriteAttributeString("DownloadSize", size); 120 writer.WriteAttributeString("DownloadSize", size);
121 writer.WriteAttributeString("PackageSize", size); 121 writer.WriteAttributeString("PackageSize", size);
122 writer.WriteAttributeString("InstalledSize", package.PackageTuple.InstallSize?.ToString(CultureInfo.InvariantCulture) ?? size); 122 writer.WriteAttributeString("InstalledSize", package.PackageSymbol.InstallSize?.ToString(CultureInfo.InvariantCulture) ?? size);
123 writer.WriteAttributeString("PackageType", package.PackageTuple.Type.ToString()); 123 writer.WriteAttributeString("PackageType", package.PackageSymbol.Type.ToString());
124 writer.WriteAttributeString("Permanent", package.PackageTuple.Permanent ? "yes" : "no"); 124 writer.WriteAttributeString("Permanent", package.PackageSymbol.Permanent ? "yes" : "no");
125 writer.WriteAttributeString("LogPathVariable", package.PackageTuple.LogPathVariable); 125 writer.WriteAttributeString("LogPathVariable", package.PackageSymbol.LogPathVariable);
126 writer.WriteAttributeString("RollbackLogPathVariable", package.PackageTuple.RollbackLogPathVariable); 126 writer.WriteAttributeString("RollbackLogPathVariable", package.PackageSymbol.RollbackLogPathVariable);
127 writer.WriteAttributeString("Compressed", packagePayload.Compressed == true ? "yes" : "no"); 127 writer.WriteAttributeString("Compressed", packagePayload.Compressed == true ? "yes" : "no");
128 128
129 if (package.SpecificPackageTuple is WixBundleMsiPackageTuple msiPackage) 129 if (package.SpecificPackageSymbol is WixBundleMsiPackageSymbol msiPackage)
130 { 130 {
131 if (!String.IsNullOrEmpty(msiPackage.ProductCode)) 131 if (!String.IsNullOrEmpty(msiPackage.ProductCode))
132 { 132 {
@@ -138,7 +138,7 @@ namespace WixToolset.Core.Burn.Bundles
138 writer.WriteAttributeString("UpgradeCode", msiPackage.UpgradeCode); 138 writer.WriteAttributeString("UpgradeCode", msiPackage.UpgradeCode);
139 } 139 }
140 } 140 }
141 else if (package.SpecificPackageTuple is WixBundleMspPackageTuple mspPackage) 141 else if (package.SpecificPackageSymbol is WixBundleMspPackageSymbol mspPackage)
142 { 142 {
143 if (!String.IsNullOrEmpty(mspPackage.PatchCode)) 143 if (!String.IsNullOrEmpty(mspPackage.PatchCode))
144 { 144 {
@@ -146,17 +146,17 @@ namespace WixToolset.Core.Burn.Bundles
146 } 146 }
147 } 147 }
148 148
149 if (!String.IsNullOrEmpty(package.PackageTuple.Version)) 149 if (!String.IsNullOrEmpty(package.PackageSymbol.Version))
150 { 150 {
151 writer.WriteAttributeString("Version", package.PackageTuple.Version); 151 writer.WriteAttributeString("Version", package.PackageSymbol.Version);
152 } 152 }
153 153
154 if (!String.IsNullOrEmpty(package.PackageTuple.InstallCondition)) 154 if (!String.IsNullOrEmpty(package.PackageSymbol.InstallCondition))
155 { 155 {
156 writer.WriteAttributeString("InstallCondition", package.PackageTuple.InstallCondition); 156 writer.WriteAttributeString("InstallCondition", package.PackageSymbol.InstallCondition);
157 } 157 }
158 158
159 switch (package.PackageTuple.Cache) 159 switch (package.PackageSymbol.Cache)
160 { 160 {
161 case YesNoAlwaysType.No: 161 case YesNoAlwaysType.No:
162 writer.WriteAttributeString("Cache", "no"); 162 writer.WriteAttributeString("Cache", "no");
@@ -175,35 +175,35 @@ namespace WixToolset.Core.Burn.Bundles
175 175
176 private void WriteFeatureInfo(XmlTextWriter writer) 176 private void WriteFeatureInfo(XmlTextWriter writer)
177 { 177 {
178 var featureTuples = this.Section.Tuples.OfType<WixBundleMsiFeatureTuple>(); 178 var featureSymbols = this.Section.Symbols.OfType<WixBundleMsiFeatureSymbol>();
179 179
180 foreach (var featureTuple in featureTuples) 180 foreach (var featureSymbol in featureSymbols)
181 { 181 {
182 writer.WriteStartElement("WixPackageFeatureInfo"); 182 writer.WriteStartElement("WixPackageFeatureInfo");
183 183
184 writer.WriteAttributeString("Package", featureTuple.PackageRef); 184 writer.WriteAttributeString("Package", featureSymbol.PackageRef);
185 writer.WriteAttributeString("Feature", featureTuple.Name); 185 writer.WriteAttributeString("Feature", featureSymbol.Name);
186 writer.WriteAttributeString("Size", featureTuple.Size.ToString(CultureInfo.InvariantCulture)); 186 writer.WriteAttributeString("Size", featureSymbol.Size.ToString(CultureInfo.InvariantCulture));
187 187
188 if (!String.IsNullOrEmpty(featureTuple.Parent)) 188 if (!String.IsNullOrEmpty(featureSymbol.Parent))
189 { 189 {
190 writer.WriteAttributeString("Parent", featureTuple.Parent); 190 writer.WriteAttributeString("Parent", featureSymbol.Parent);
191 } 191 }
192 192
193 if (!String.IsNullOrEmpty(featureTuple.Title)) 193 if (!String.IsNullOrEmpty(featureSymbol.Title))
194 { 194 {
195 writer.WriteAttributeString("Title", featureTuple.Title); 195 writer.WriteAttributeString("Title", featureSymbol.Title);
196 } 196 }
197 197
198 if (!String.IsNullOrEmpty(featureTuple.Description)) 198 if (!String.IsNullOrEmpty(featureSymbol.Description))
199 { 199 {
200 writer.WriteAttributeString("Description", featureTuple.Description); 200 writer.WriteAttributeString("Description", featureSymbol.Description);
201 } 201 }
202 202
203 writer.WriteAttributeString("Display", featureTuple.Display.ToString(CultureInfo.InvariantCulture)); 203 writer.WriteAttributeString("Display", featureSymbol.Display.ToString(CultureInfo.InvariantCulture));
204 writer.WriteAttributeString("Level", featureTuple.Level.ToString(CultureInfo.InvariantCulture)); 204 writer.WriteAttributeString("Level", featureSymbol.Level.ToString(CultureInfo.InvariantCulture));
205 writer.WriteAttributeString("Directory", featureTuple.Directory); 205 writer.WriteAttributeString("Directory", featureSymbol.Directory);
206 writer.WriteAttributeString("Attributes", featureTuple.Attributes.ToString(CultureInfo.InvariantCulture)); 206 writer.WriteAttributeString("Attributes", featureSymbol.Attributes.ToString(CultureInfo.InvariantCulture));
207 207
208 writer.WriteEndElement(); 208 writer.WriteEndElement();
209 } 209 }
@@ -211,43 +211,43 @@ namespace WixToolset.Core.Burn.Bundles
211 211
212 private void WritePayloadInfo(XmlTextWriter writer) 212 private void WritePayloadInfo(XmlTextWriter writer)
213 { 213 {
214 var payloadTuples = this.Section.Tuples.OfType<WixBundlePayloadTuple>(); 214 var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>();
215 215
216 foreach (var payloadTuple in payloadTuples) 216 foreach (var payloadSymbol in payloadSymbols)
217 { 217 {
218 writer.WriteStartElement("WixPayloadProperties"); 218 writer.WriteStartElement("WixPayloadProperties");
219 219
220 writer.WriteAttributeString("Payload", payloadTuple.Id.Id); 220 writer.WriteAttributeString("Payload", payloadSymbol.Id.Id);
221 221
222 if (!String.IsNullOrEmpty(payloadTuple.PackageRef)) 222 if (!String.IsNullOrEmpty(payloadSymbol.PackageRef))
223 { 223 {
224 writer.WriteAttributeString("Package", payloadTuple.PackageRef); 224 writer.WriteAttributeString("Package", payloadSymbol.PackageRef);
225 } 225 }
226 226
227 if (!String.IsNullOrEmpty(payloadTuple.ContainerRef)) 227 if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef))
228 { 228 {
229 writer.WriteAttributeString("Container", payloadTuple.ContainerRef); 229 writer.WriteAttributeString("Container", payloadSymbol.ContainerRef);
230 } 230 }
231 231
232 writer.WriteAttributeString("Name", payloadTuple.Name); 232 writer.WriteAttributeString("Name", payloadSymbol.Name);
233 writer.WriteAttributeString("Size", payloadTuple.FileSize.Value.ToString(CultureInfo.InvariantCulture)); 233 writer.WriteAttributeString("Size", payloadSymbol.FileSize.Value.ToString(CultureInfo.InvariantCulture));
234 234
235 if (!String.IsNullOrEmpty(payloadTuple.DownloadUrl)) 235 if (!String.IsNullOrEmpty(payloadSymbol.DownloadUrl))
236 { 236 {
237 writer.WriteAttributeString("DownloadUrl", payloadTuple.DownloadUrl); 237 writer.WriteAttributeString("DownloadUrl", payloadSymbol.DownloadUrl);
238 } 238 }
239 239
240 writer.WriteAttributeString("LayoutOnly", payloadTuple.LayoutOnly ? "yes" : "no"); 240 writer.WriteAttributeString("LayoutOnly", payloadSymbol.LayoutOnly ? "yes" : "no");
241 241
242 writer.WriteEndElement(); 242 writer.WriteEndElement();
243 } 243 }
244 } 244 }
245 245
246 private WixBundlePayloadTuple CreateBootstrapperApplicationManifestPayloadRow(string baManifestPath) 246 private WixBundlePayloadSymbol CreateBootstrapperApplicationManifestPayloadRow(string baManifestPath)
247 { 247 {
248 var generatedId = Common.GenerateIdentifier("ux", BurnCommon.BADataFileName); 248 var generatedId = Common.GenerateIdentifier("ux", BurnCommon.BADataFileName);
249 249
250 var tuple = this.Section.AddTuple(new WixBundlePayloadTuple(this.BundleTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId)) 250 var symbol = this.Section.AddSymbol(new WixBundlePayloadSymbol(this.BundleSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId))
251 { 251 {
252 Name = BurnCommon.BADataFileName, 252 Name = BurnCommon.BADataFileName,
253 SourceFile = new IntermediateFieldPathValue { Path = baManifestPath }, 253 SourceFile = new IntermediateFieldPathValue { Path = baManifestPath },
@@ -260,11 +260,11 @@ namespace WixToolset.Core.Burn.Bundles
260 260
261 var fileInfo = new FileInfo(baManifestPath); 261 var fileInfo = new FileInfo(baManifestPath);
262 262
263 tuple.FileSize = (int)fileInfo.Length; 263 symbol.FileSize = (int)fileInfo.Length;
264 264
265 tuple.Hash = BundleHashAlgorithm.Hash(fileInfo); 265 symbol.Hash = BundleHashAlgorithm.Hash(fileInfo);
266 266
267 return tuple; 267 return symbol;
268 } 268 }
269 } 269 }
270} 270}
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
index 03102d5e..3cf6e0aa 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateBundleExeCommand.cs
@@ -8,19 +8,19 @@ namespace WixToolset.Core.Burn.Bundles
8 using System.Reflection; 8 using System.Reflection;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Burn; 10 using WixToolset.Data.Burn;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
14 14
15 internal class CreateBundleExeCommand 15 internal class CreateBundleExeCommand
16 { 16 {
17 public CreateBundleExeCommand(IMessaging messaging, IBackendHelper backendHelper, string intermediateFolder, string outputPath, WixBundleTuple bundleTuple, WixBundleContainerTuple uxContainer, IEnumerable<WixBundleContainerTuple> containers) 17 public CreateBundleExeCommand(IMessaging messaging, IBackendHelper backendHelper, string intermediateFolder, string outputPath, WixBundleSymbol bundleSymbol, WixBundleContainerSymbol uxContainer, IEnumerable<WixBundleContainerSymbol> containers)
18 { 18 {
19 this.Messaging = messaging; 19 this.Messaging = messaging;
20 this.BackendHelper = backendHelper; 20 this.BackendHelper = backendHelper;
21 this.IntermediateFolder = intermediateFolder; 21 this.IntermediateFolder = intermediateFolder;
22 this.OutputPath = outputPath; 22 this.OutputPath = outputPath;
23 this.BundleTuple = bundleTuple; 23 this.BundleSymbol = bundleSymbol;
24 this.UXContainer = uxContainer; 24 this.UXContainer = uxContainer;
25 this.Containers = containers; 25 this.Containers = containers;
26 } 26 }
@@ -35,11 +35,11 @@ namespace WixToolset.Core.Burn.Bundles
35 35
36 private string OutputPath { get; } 36 private string OutputPath { get; }
37 37
38 private WixBundleTuple BundleTuple { get; } 38 private WixBundleSymbol BundleSymbol { get; }
39 39
40 private WixBundleContainerTuple UXContainer { get; } 40 private WixBundleContainerSymbol UXContainer { get; }
41 41
42 private IEnumerable<WixBundleContainerTuple> Containers { get; } 42 private IEnumerable<WixBundleContainerSymbol> Containers { get; }
43 43
44 public void Execute() 44 public void Execute()
45 { 45 {
@@ -47,7 +47,7 @@ namespace WixToolset.Core.Burn.Bundles
47 47
48 // Copy the burn.exe to a writable location then mark it to be moved to its final build location. 48 // Copy the burn.exe to a writable location then mark it to be moved to its final build location.
49 49
50 var stubPlatform = this.BundleTuple.Platform.ToString(); 50 var stubPlatform = this.BundleSymbol.Platform.ToString();
51 var stubFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), stubPlatform, "burn.exe"); 51 var stubFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), stubPlatform, "burn.exe");
52 52
53 var bundleTempPath = Path.Combine(this.IntermediateFolder, bundleFilename); 53 var bundleTempPath = Path.Combine(this.IntermediateFolder, bundleFilename);
@@ -59,19 +59,19 @@ namespace WixToolset.Core.Burn.Bundles
59 this.Messaging.Write(ErrorMessages.InsecureBundleFilename(bundleFilename)); 59 this.Messaging.Write(ErrorMessages.InsecureBundleFilename(bundleFilename));
60 } 60 }
61 61
62 this.Transfer = this.BackendHelper.CreateFileTransfer(bundleTempPath, this.OutputPath, true, this.BundleTuple.SourceLineNumbers); 62 this.Transfer = this.BackendHelper.CreateFileTransfer(bundleTempPath, this.OutputPath, true, this.BundleSymbol.SourceLineNumbers);
63 63
64 File.Copy(stubFile, bundleTempPath, true); 64 File.Copy(stubFile, bundleTempPath, true);
65 File.SetAttributes(bundleTempPath, FileAttributes.Normal); 65 File.SetAttributes(bundleTempPath, FileAttributes.Normal);
66 66
67 this.UpdateBurnResources(bundleTempPath, this.OutputPath, this.BundleTuple); 67 this.UpdateBurnResources(bundleTempPath, this.OutputPath, this.BundleSymbol);
68 68
69 // Update the .wixburn section to point to at the UX and attached container(s) then attach the containers 69 // Update the .wixburn section to point to at the UX and attached container(s) then attach the containers
70 // if they should be attached. 70 // if they should be attached.
71 using (var writer = BurnWriter.Open(this.Messaging, bundleTempPath)) 71 using (var writer = BurnWriter.Open(this.Messaging, bundleTempPath))
72 { 72 {
73 var burnStubFile = new FileInfo(bundleTempPath); 73 var burnStubFile = new FileInfo(bundleTempPath);
74 writer.InitializeBundleSectionData(burnStubFile.Length, this.BundleTuple.BundleId); 74 writer.InitializeBundleSectionData(burnStubFile.Length, this.BundleSymbol.BundleId);
75 75
76 // Always attach the UX container first 76 // Always attach the UX container first
77 writer.AppendContainer(this.UXContainer.WorkingPath, BurnWriter.Container.UX); 77 writer.AppendContainer(this.UXContainer.WorkingPath, BurnWriter.Container.UX);
@@ -91,7 +91,7 @@ namespace WixToolset.Core.Burn.Bundles
91 } 91 }
92 } 92 }
93 93
94 private void UpdateBurnResources(string bundleTempPath, string outputPath, WixBundleTuple bundleInfo) 94 private void UpdateBurnResources(string bundleTempPath, string outputPath, WixBundleSymbol bundleInfo)
95 { 95 {
96 var resources = new Dtf.Resources.ResourceCollection(); 96 var resources = new Dtf.Resources.ResourceCollection();
97 var version = new Dtf.Resources.VersionResource("#1", 1033); 97 var version = new Dtf.Resources.VersionResource("#1", 1033);
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs
index f7acd54c..74ccd895 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateBundleExtensionManifestCommand.cs
@@ -9,14 +9,14 @@ namespace WixToolset.Core.Burn.Bundles
9 using System.Xml; 9 using System.Xml;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Burn; 11 using WixToolset.Data.Burn;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 13
14 internal class CreateBundleExtensionManifestCommand 14 internal class CreateBundleExtensionManifestCommand
15 { 15 {
16 public CreateBundleExtensionManifestCommand(IntermediateSection section, WixBundleTuple bundleTuple, int lastUXPayloadIndex, string intermediateFolder, IInternalBurnBackendHelper internalBurnBackendHelper) 16 public CreateBundleExtensionManifestCommand(IntermediateSection section, WixBundleSymbol bundleSymbol, int lastUXPayloadIndex, string intermediateFolder, IInternalBurnBackendHelper internalBurnBackendHelper)
17 { 17 {
18 this.Section = section; 18 this.Section = section;
19 this.BundleTuple = bundleTuple; 19 this.BundleSymbol = bundleSymbol;
20 this.LastUXPayloadIndex = lastUXPayloadIndex; 20 this.LastUXPayloadIndex = lastUXPayloadIndex;
21 this.IntermediateFolder = intermediateFolder; 21 this.IntermediateFolder = intermediateFolder;
22 this.InternalBurnBackendHelper = internalBurnBackendHelper; 22 this.InternalBurnBackendHelper = internalBurnBackendHelper;
@@ -24,7 +24,7 @@ namespace WixToolset.Core.Burn.Bundles
24 24
25 private IntermediateSection Section { get; } 25 private IntermediateSection Section { get; }
26 26
27 private WixBundleTuple BundleTuple { get; } 27 private WixBundleSymbol BundleSymbol { get; }
28 28
29 private IInternalBurnBackendHelper InternalBurnBackendHelper { get; } 29 private IInternalBurnBackendHelper InternalBurnBackendHelper { get; }
30 30
@@ -32,7 +32,7 @@ namespace WixToolset.Core.Burn.Bundles
32 32
33 private string IntermediateFolder { get; } 33 private string IntermediateFolder { get; }
34 34
35 public WixBundlePayloadTuple BundleExtensionManifestPayloadRow { get; private set; } 35 public WixBundlePayloadSymbol BundleExtensionManifestPayloadRow { get; private set; }
36 36
37 public string OutputPath { get; private set; } 37 public string OutputPath { get; private set; }
38 38
@@ -64,11 +64,11 @@ namespace WixToolset.Core.Burn.Bundles
64 return path; 64 return path;
65 } 65 }
66 66
67 private WixBundlePayloadTuple CreateBundleExtensionManifestPayloadRow(string bextManifestPath) 67 private WixBundlePayloadSymbol CreateBundleExtensionManifestPayloadRow(string bextManifestPath)
68 { 68 {
69 var generatedId = Common.GenerateIdentifier("ux", BurnCommon.BundleExtensionDataFileName); 69 var generatedId = Common.GenerateIdentifier("ux", BurnCommon.BundleExtensionDataFileName);
70 70
71 var tuple = this.Section.AddTuple(new WixBundlePayloadTuple(this.BundleTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId)) 71 var symbol = this.Section.AddSymbol(new WixBundlePayloadSymbol(this.BundleSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId))
72 { 72 {
73 Name = BurnCommon.BundleExtensionDataFileName, 73 Name = BurnCommon.BundleExtensionDataFileName,
74 SourceFile = new IntermediateFieldPathValue { Path = bextManifestPath }, 74 SourceFile = new IntermediateFieldPathValue { Path = bextManifestPath },
@@ -81,11 +81,11 @@ namespace WixToolset.Core.Burn.Bundles
81 81
82 var fileInfo = new FileInfo(bextManifestPath); 82 var fileInfo = new FileInfo(bextManifestPath);
83 83
84 tuple.FileSize = (int)fileInfo.Length; 84 symbol.FileSize = (int)fileInfo.Length;
85 85
86 tuple.Hash = BundleHashAlgorithm.Hash(fileInfo); 86 symbol.Hash = BundleHashAlgorithm.Hash(fileInfo);
87 87
88 return tuple; 88 return symbol;
89 } 89 }
90 } 90 }
91} 91}
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
index 9453c7e3..05b15ab6 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateBurnManifestCommand.cs
@@ -12,20 +12,20 @@ namespace WixToolset.Core.Burn.Bundles
12 using System.Xml; 12 using System.Xml;
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.Burn; 14 using WixToolset.Data.Burn;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using WixToolset.Extensibility; 16 using WixToolset.Extensibility;
17 using WixToolset.Extensibility.Services; 17 using WixToolset.Extensibility.Services;
18 18
19 internal class CreateBurnManifestCommand 19 internal class CreateBurnManifestCommand
20 { 20 {
21 public CreateBurnManifestCommand(IMessaging messaging, IEnumerable<IBurnBackendExtension> backendExtensions, string executableName, IntermediateSection section, WixBundleTuple bundleTuple, IEnumerable<WixBundleContainerTuple> containers, WixChainTuple chainTuple, IEnumerable<PackageFacade> orderedPackages, IEnumerable<WixBundleRollbackBoundaryTuple> boundaries, IEnumerable<WixBundlePayloadTuple> uxPayloads, Dictionary<string, WixBundlePayloadTuple> allPayloadsById, IEnumerable<ISearchFacade> orderedSearches, IEnumerable<WixBundleCatalogTuple> catalogs, string intermediateFolder) 21 public CreateBurnManifestCommand(IMessaging messaging, IEnumerable<IBurnBackendExtension> backendExtensions, string executableName, IntermediateSection section, WixBundleSymbol bundleSymbol, IEnumerable<WixBundleContainerSymbol> containers, WixChainSymbol chainSymbol, IEnumerable<PackageFacade> orderedPackages, IEnumerable<WixBundleRollbackBoundarySymbol> boundaries, IEnumerable<WixBundlePayloadSymbol> uxPayloads, Dictionary<string, WixBundlePayloadSymbol> allPayloadsById, IEnumerable<ISearchFacade> orderedSearches, IEnumerable<WixBundleCatalogSymbol> catalogs, string intermediateFolder)
22 { 22 {
23 this.Messaging = messaging; 23 this.Messaging = messaging;
24 this.BackendExtensions = backendExtensions; 24 this.BackendExtensions = backendExtensions;
25 this.ExecutableName = executableName; 25 this.ExecutableName = executableName;
26 this.Section = section; 26 this.Section = section;
27 this.BundleTuple = bundleTuple; 27 this.BundleSymbol = bundleSymbol;
28 this.Chain = chainTuple; 28 this.Chain = chainSymbol;
29 this.Containers = containers; 29 this.Containers = containers;
30 this.OrderedPackages = orderedPackages; 30 this.OrderedPackages = orderedPackages;
31 this.RollbackBoundaries = boundaries; 31 this.RollbackBoundaries = boundaries;
@@ -46,23 +46,23 @@ namespace WixToolset.Core.Burn.Bundles
46 46
47 private IntermediateSection Section { get; } 47 private IntermediateSection Section { get; }
48 48
49 private WixBundleTuple BundleTuple { get; } 49 private WixBundleSymbol BundleSymbol { get; }
50 50
51 private WixChainTuple Chain { get; } 51 private WixChainSymbol Chain { get; }
52 52
53 private IEnumerable<WixBundleRollbackBoundaryTuple> RollbackBoundaries { get; } 53 private IEnumerable<WixBundleRollbackBoundarySymbol> RollbackBoundaries { get; }
54 54
55 private IEnumerable<PackageFacade> OrderedPackages { get; } 55 private IEnumerable<PackageFacade> OrderedPackages { get; }
56 56
57 private IEnumerable<ISearchFacade> OrderedSearches { get; } 57 private IEnumerable<ISearchFacade> OrderedSearches { get; }
58 58
59 private Dictionary<string, WixBundlePayloadTuple> Payloads { get; } 59 private Dictionary<string, WixBundlePayloadSymbol> Payloads { get; }
60 60
61 private IEnumerable<WixBundleContainerTuple> Containers { get; } 61 private IEnumerable<WixBundleContainerSymbol> Containers { get; }
62 62
63 private IEnumerable<WixBundlePayloadTuple> UXContainerPayloads { get; } 63 private IEnumerable<WixBundlePayloadSymbol> UXContainerPayloads { get; }
64 64
65 private IEnumerable<WixBundleCatalogTuple> Catalogs { get; } 65 private IEnumerable<WixBundleCatalogSymbol> Catalogs { get; }
66 66
67 private string IntermediateFolder { get; } 67 private string IntermediateFolder { get; }
68 68
@@ -77,32 +77,32 @@ namespace WixToolset.Core.Burn.Bundles
77 writer.WriteStartElement("BurnManifest", BurnCommon.BurnNamespace); 77 writer.WriteStartElement("BurnManifest", BurnCommon.BurnNamespace);
78 78
79 // Write the condition, if there is one 79 // Write the condition, if there is one
80 if (null != this.BundleTuple.Condition) 80 if (null != this.BundleSymbol.Condition)
81 { 81 {
82 writer.WriteElementString("Condition", this.BundleTuple.Condition); 82 writer.WriteElementString("Condition", this.BundleSymbol.Condition);
83 } 83 }
84 84
85 // Write the log element if default logging wasn't disabled. 85 // Write the log element if default logging wasn't disabled.
86 if (!String.IsNullOrEmpty(this.BundleTuple.LogPrefix)) 86 if (!String.IsNullOrEmpty(this.BundleSymbol.LogPrefix))
87 { 87 {
88 writer.WriteStartElement("Log"); 88 writer.WriteStartElement("Log");
89 if (!String.IsNullOrEmpty(this.BundleTuple.LogPathVariable)) 89 if (!String.IsNullOrEmpty(this.BundleSymbol.LogPathVariable))
90 { 90 {
91 writer.WriteAttributeString("PathVariable", this.BundleTuple.LogPathVariable); 91 writer.WriteAttributeString("PathVariable", this.BundleSymbol.LogPathVariable);
92 } 92 }
93 writer.WriteAttributeString("Prefix", this.BundleTuple.LogPrefix); 93 writer.WriteAttributeString("Prefix", this.BundleSymbol.LogPrefix);
94 writer.WriteAttributeString("Extension", this.BundleTuple.LogExtension); 94 writer.WriteAttributeString("Extension", this.BundleSymbol.LogExtension);
95 writer.WriteEndElement(); 95 writer.WriteEndElement();
96 } 96 }
97 97
98 98
99 // Get update if specified. 99 // Get update if specified.
100 var updateTuple = this.Section.Tuples.OfType<WixBundleUpdateTuple>().FirstOrDefault(); 100 var updateSymbol = this.Section.Symbols.OfType<WixBundleUpdateSymbol>().FirstOrDefault();
101 101
102 if (null != updateTuple) 102 if (null != updateSymbol)
103 { 103 {
104 writer.WriteStartElement("Update"); 104 writer.WriteStartElement("Update");
105 writer.WriteAttributeString("Location", updateTuple.Location); 105 writer.WriteAttributeString("Location", updateSymbol.Location);
106 writer.WriteEndElement(); // </Update> 106 writer.WriteEndElement(); // </Update>
107 } 107 }
108 108
@@ -110,7 +110,7 @@ namespace WixToolset.Core.Burn.Bundles
110 110
111 // For the related bundles with duplicated identifiers the second instance is ignored (i.e. the Duplicates 111 // For the related bundles with duplicated identifiers the second instance is ignored (i.e. the Duplicates
112 // enumeration in the index row list is not used). 112 // enumeration in the index row list is not used).
113 var relatedBundles = this.Section.Tuples.OfType<WixRelatedBundleTuple>(); 113 var relatedBundles = this.Section.Symbols.OfType<WixRelatedBundleSymbol>();
114 var distinctRelatedBundles = new HashSet<string>(); 114 var distinctRelatedBundles = new HashSet<string>();
115 115
116 foreach (var relatedBundle in relatedBundles) 116 foreach (var relatedBundle in relatedBundles)
@@ -125,7 +125,7 @@ namespace WixToolset.Core.Burn.Bundles
125 } 125 }
126 126
127 // Write the variables 127 // Write the variables
128 var variables = this.Section.Tuples.OfType<WixBundleVariableTuple>(); 128 var variables = this.Section.Symbols.OfType<WixBundleVariableSymbol>();
129 129
130 foreach (var variable in variables) 130 foreach (var variable in variables)
131 { 131 {
@@ -149,7 +149,7 @@ namespace WixToolset.Core.Burn.Bundles
149 149
150 // write the UX element 150 // write the UX element
151 writer.WriteStartElement("UX"); 151 writer.WriteStartElement("UX");
152 if (!String.IsNullOrEmpty(this.BundleTuple.SplashScreenSourceFile)) 152 if (!String.IsNullOrEmpty(this.BundleSymbol.SplashScreenSourceFile))
153 { 153 {
154 writer.WriteAttributeString("SplashScreen", "yes"); 154 writer.WriteAttributeString("SplashScreen", "yes");
155 } 155 }
@@ -214,66 +214,66 @@ namespace WixToolset.Core.Burn.Bundles
214 // Write the registration information... 214 // Write the registration information...
215 writer.WriteStartElement("Registration"); 215 writer.WriteStartElement("Registration");
216 216
217 writer.WriteAttributeString("Id", this.BundleTuple.BundleId); 217 writer.WriteAttributeString("Id", this.BundleSymbol.BundleId);
218 writer.WriteAttributeString("ExecutableName", this.ExecutableName); 218 writer.WriteAttributeString("ExecutableName", this.ExecutableName);
219 writer.WriteAttributeString("PerMachine", this.BundleTuple.PerMachine ? "yes" : "no"); 219 writer.WriteAttributeString("PerMachine", this.BundleSymbol.PerMachine ? "yes" : "no");
220 writer.WriteAttributeString("Tag", this.BundleTuple.Tag); 220 writer.WriteAttributeString("Tag", this.BundleSymbol.Tag);
221 writer.WriteAttributeString("Version", this.BundleTuple.Version); 221 writer.WriteAttributeString("Version", this.BundleSymbol.Version);
222 writer.WriteAttributeString("ProviderKey", this.BundleTuple.ProviderKey); 222 writer.WriteAttributeString("ProviderKey", this.BundleSymbol.ProviderKey);
223 223
224 writer.WriteStartElement("Arp"); 224 writer.WriteStartElement("Arp");
225 writer.WriteAttributeString("Register", (this.BundleTuple.DisableModify || this.BundleTuple.SingleChangeUninstallButton) && this.BundleTuple.DisableRemove ? "no" : "yes"); // do not register if disabled modify and remove. 225 writer.WriteAttributeString("Register", (this.BundleSymbol.DisableModify || this.BundleSymbol.SingleChangeUninstallButton) && this.BundleSymbol.DisableRemove ? "no" : "yes"); // do not register if disabled modify and remove.
226 writer.WriteAttributeString("DisplayName", this.BundleTuple.Name); 226 writer.WriteAttributeString("DisplayName", this.BundleSymbol.Name);
227 writer.WriteAttributeString("DisplayVersion", this.BundleTuple.Version); 227 writer.WriteAttributeString("DisplayVersion", this.BundleSymbol.Version);
228 228
229 if (!String.IsNullOrEmpty(this.BundleTuple.Manufacturer)) 229 if (!String.IsNullOrEmpty(this.BundleSymbol.Manufacturer))
230 { 230 {
231 writer.WriteAttributeString("Publisher", this.BundleTuple.Manufacturer); 231 writer.WriteAttributeString("Publisher", this.BundleSymbol.Manufacturer);
232 } 232 }
233 233
234 if (!String.IsNullOrEmpty(this.BundleTuple.HelpUrl)) 234 if (!String.IsNullOrEmpty(this.BundleSymbol.HelpUrl))
235 { 235 {
236 writer.WriteAttributeString("HelpLink", this.BundleTuple.HelpUrl); 236 writer.WriteAttributeString("HelpLink", this.BundleSymbol.HelpUrl);
237 } 237 }
238 238
239 if (!String.IsNullOrEmpty(this.BundleTuple.HelpTelephone)) 239 if (!String.IsNullOrEmpty(this.BundleSymbol.HelpTelephone))
240 { 240 {
241 writer.WriteAttributeString("HelpTelephone", this.BundleTuple.HelpTelephone); 241 writer.WriteAttributeString("HelpTelephone", this.BundleSymbol.HelpTelephone);
242 } 242 }
243 243
244 if (!String.IsNullOrEmpty(this.BundleTuple.AboutUrl)) 244 if (!String.IsNullOrEmpty(this.BundleSymbol.AboutUrl))
245 { 245 {
246 writer.WriteAttributeString("AboutUrl", this.BundleTuple.AboutUrl); 246 writer.WriteAttributeString("AboutUrl", this.BundleSymbol.AboutUrl);
247 } 247 }
248 248
249 if (!String.IsNullOrEmpty(this.BundleTuple.UpdateUrl)) 249 if (!String.IsNullOrEmpty(this.BundleSymbol.UpdateUrl))
250 { 250 {
251 writer.WriteAttributeString("UpdateUrl", this.BundleTuple.UpdateUrl); 251 writer.WriteAttributeString("UpdateUrl", this.BundleSymbol.UpdateUrl);
252 } 252 }
253 253
254 if (!String.IsNullOrEmpty(this.BundleTuple.ParentName)) 254 if (!String.IsNullOrEmpty(this.BundleSymbol.ParentName))
255 { 255 {
256 writer.WriteAttributeString("ParentDisplayName", this.BundleTuple.ParentName); 256 writer.WriteAttributeString("ParentDisplayName", this.BundleSymbol.ParentName);
257 } 257 }
258 258
259 if (this.BundleTuple.DisableModify) 259 if (this.BundleSymbol.DisableModify)
260 { 260 {
261 writer.WriteAttributeString("DisableModify", "yes"); 261 writer.WriteAttributeString("DisableModify", "yes");
262 } 262 }
263 263
264 if (this.BundleTuple.DisableRemove) 264 if (this.BundleSymbol.DisableRemove)
265 { 265 {
266 writer.WriteAttributeString("DisableRemove", "yes"); 266 writer.WriteAttributeString("DisableRemove", "yes");
267 } 267 }
268 268
269 if (this.BundleTuple.SingleChangeUninstallButton) 269 if (this.BundleSymbol.SingleChangeUninstallButton)
270 { 270 {
271 writer.WriteAttributeString("DisableModify", "button"); 271 writer.WriteAttributeString("DisableModify", "button");
272 } 272 }
273 writer.WriteEndElement(); // </Arp> 273 writer.WriteEndElement(); // </Arp>
274 274
275 // Get update registration if specified. 275 // Get update registration if specified.
276 var updateRegistrationInfo = this.Section.Tuples.OfType<WixUpdateRegistrationTuple>().FirstOrDefault(); 276 var updateRegistrationInfo = this.Section.Symbols.OfType<WixUpdateRegistrationSymbol>().FirstOrDefault();
277 277
278 if (null != updateRegistrationInfo) 278 if (null != updateRegistrationInfo)
279 { 279 {
@@ -327,28 +327,28 @@ namespace WixToolset.Core.Burn.Bundles
327 } 327 }
328 328
329 // Index a few tables by package. 329 // Index a few tables by package.
330 var targetCodesByPatch = this.Section.Tuples.OfType<WixBundlePatchTargetCodeTuple>().ToLookup(r => r.PackageRef); 330 var targetCodesByPatch = this.Section.Symbols.OfType<WixBundlePatchTargetCodeSymbol>().ToLookup(r => r.PackageRef);
331 var msiFeaturesByPackage = this.Section.Tuples.OfType<WixBundleMsiFeatureTuple>().ToLookup(r => r.PackageRef); 331 var msiFeaturesByPackage = this.Section.Symbols.OfType<WixBundleMsiFeatureSymbol>().ToLookup(r => r.PackageRef);
332 var msiPropertiesByPackage = this.Section.Tuples.OfType<WixBundleMsiPropertyTuple>().ToLookup(r => r.PackageRef); 332 var msiPropertiesByPackage = this.Section.Symbols.OfType<WixBundleMsiPropertySymbol>().ToLookup(r => r.PackageRef);
333 var payloadsByPackage = this.Payloads.Values.ToLookup(p => p.PackageRef); 333 var payloadsByPackage = this.Payloads.Values.ToLookup(p => p.PackageRef);
334 var relatedPackagesByPackage = this.Section.Tuples.OfType<WixBundleRelatedPackageTuple>().ToLookup(r => r.PackageRef); 334 var relatedPackagesByPackage = this.Section.Symbols.OfType<WixBundleRelatedPackageSymbol>().ToLookup(r => r.PackageRef);
335 var slipstreamMspsByPackage = this.Section.Tuples.OfType<WixBundleSlipstreamMspTuple>().ToLookup(r => r.MspPackageRef); 335 var slipstreamMspsByPackage = this.Section.Symbols.OfType<WixBundleSlipstreamMspSymbol>().ToLookup(r => r.MspPackageRef);
336 var exitCodesByPackage = this.Section.Tuples.OfType<WixBundlePackageExitCodeTuple>().ToLookup(r => r.ChainPackageId); 336 var exitCodesByPackage = this.Section.Symbols.OfType<WixBundlePackageExitCodeSymbol>().ToLookup(r => r.ChainPackageId);
337 var commandLinesByPackage = this.Section.Tuples.OfType<WixBundlePackageCommandLineTuple>().ToLookup(r => r.WixBundlePackageRef); 337 var commandLinesByPackage = this.Section.Symbols.OfType<WixBundlePackageCommandLineSymbol>().ToLookup(r => r.WixBundlePackageRef);
338 338
339 var dependenciesByPackage = this.Section.Tuples.OfType<ProvidesDependencyTuple>().ToLookup(p => p.PackageRef); 339 var dependenciesByPackage = this.Section.Symbols.OfType<ProvidesDependencySymbol>().ToLookup(p => p.PackageRef);
340 340
341 341
342 // Build up the list of target codes from all the MSPs in the chain. 342 // Build up the list of target codes from all the MSPs in the chain.
343 var targetCodes = new List<WixBundlePatchTargetCodeTuple>(); 343 var targetCodes = new List<WixBundlePatchTargetCodeSymbol>();
344 344
345 foreach (var package in this.OrderedPackages) 345 foreach (var package in this.OrderedPackages)
346 { 346 {
347 writer.WriteStartElement(String.Format(CultureInfo.InvariantCulture, "{0}Package", package.PackageTuple.Type)); 347 writer.WriteStartElement(String.Format(CultureInfo.InvariantCulture, "{0}Package", package.PackageSymbol.Type));
348 348
349 writer.WriteAttributeString("Id", package.PackageId); 349 writer.WriteAttributeString("Id", package.PackageId);
350 350
351 switch (package.PackageTuple.Cache) 351 switch (package.PackageSymbol.Cache)
352 { 352 {
353 case YesNoAlwaysType.No: 353 case YesNoAlwaysType.No:
354 writer.WriteAttributeString("Cache", "no"); 354 writer.WriteAttributeString("Cache", "no");
@@ -361,39 +361,39 @@ namespace WixToolset.Core.Burn.Bundles
361 break; 361 break;
362 } 362 }
363 363
364 writer.WriteAttributeString("CacheId", package.PackageTuple.CacheId); 364 writer.WriteAttributeString("CacheId", package.PackageSymbol.CacheId);
365 writer.WriteAttributeString("InstallSize", Convert.ToString(package.PackageTuple.InstallSize)); 365 writer.WriteAttributeString("InstallSize", Convert.ToString(package.PackageSymbol.InstallSize));
366 writer.WriteAttributeString("Size", Convert.ToString(package.PackageTuple.Size)); 366 writer.WriteAttributeString("Size", Convert.ToString(package.PackageSymbol.Size));
367 writer.WriteAttributeString("PerMachine", YesNoDefaultType.Yes == package.PackageTuple.PerMachine ? "yes" : "no"); 367 writer.WriteAttributeString("PerMachine", YesNoDefaultType.Yes == package.PackageSymbol.PerMachine ? "yes" : "no");
368 writer.WriteAttributeString("Permanent", package.PackageTuple.Permanent ? "yes" : "no"); 368 writer.WriteAttributeString("Permanent", package.PackageSymbol.Permanent ? "yes" : "no");
369 writer.WriteAttributeString("Vital", package.PackageTuple.Vital == false ? "no" : "yes"); 369 writer.WriteAttributeString("Vital", package.PackageSymbol.Vital == false ? "no" : "yes");
370 370
371 if (null != package.PackageTuple.RollbackBoundaryRef) 371 if (null != package.PackageSymbol.RollbackBoundaryRef)
372 { 372 {
373 writer.WriteAttributeString("RollbackBoundaryForward", package.PackageTuple.RollbackBoundaryRef); 373 writer.WriteAttributeString("RollbackBoundaryForward", package.PackageSymbol.RollbackBoundaryRef);
374 } 374 }
375 375
376 if (!String.IsNullOrEmpty(package.PackageTuple.RollbackBoundaryBackwardRef)) 376 if (!String.IsNullOrEmpty(package.PackageSymbol.RollbackBoundaryBackwardRef))
377 { 377 {
378 writer.WriteAttributeString("RollbackBoundaryBackward", package.PackageTuple.RollbackBoundaryBackwardRef); 378 writer.WriteAttributeString("RollbackBoundaryBackward", package.PackageSymbol.RollbackBoundaryBackwardRef);
379 } 379 }
380 380
381 if (!String.IsNullOrEmpty(package.PackageTuple.LogPathVariable)) 381 if (!String.IsNullOrEmpty(package.PackageSymbol.LogPathVariable))
382 { 382 {
383 writer.WriteAttributeString("LogPathVariable", package.PackageTuple.LogPathVariable); 383 writer.WriteAttributeString("LogPathVariable", package.PackageSymbol.LogPathVariable);
384 } 384 }
385 385
386 if (!String.IsNullOrEmpty(package.PackageTuple.RollbackLogPathVariable)) 386 if (!String.IsNullOrEmpty(package.PackageSymbol.RollbackLogPathVariable))
387 { 387 {
388 writer.WriteAttributeString("RollbackLogPathVariable", package.PackageTuple.RollbackLogPathVariable); 388 writer.WriteAttributeString("RollbackLogPathVariable", package.PackageSymbol.RollbackLogPathVariable);
389 } 389 }
390 390
391 if (!String.IsNullOrEmpty(package.PackageTuple.InstallCondition)) 391 if (!String.IsNullOrEmpty(package.PackageSymbol.InstallCondition))
392 { 392 {
393 writer.WriteAttributeString("InstallCondition", package.PackageTuple.InstallCondition); 393 writer.WriteAttributeString("InstallCondition", package.PackageSymbol.InstallCondition);
394 } 394 }
395 395
396 if (package.SpecificPackageTuple is WixBundleExePackageTuple exePackage) // EXE 396 if (package.SpecificPackageSymbol is WixBundleExePackageSymbol exePackage) // EXE
397 { 397 {
398 writer.WriteAttributeString("DetectCondition", exePackage.DetectCondition); 398 writer.WriteAttributeString("DetectCondition", exePackage.DetectCondition);
399 writer.WriteAttributeString("InstallArguments", exePackage.InstallCommand); 399 writer.WriteAttributeString("InstallArguments", exePackage.InstallCommand);
@@ -405,7 +405,7 @@ namespace WixToolset.Core.Burn.Bundles
405 writer.WriteAttributeString("Protocol", exePackage.ExeProtocol); 405 writer.WriteAttributeString("Protocol", exePackage.ExeProtocol);
406 } 406 }
407 } 407 }
408 else if (package.SpecificPackageTuple is WixBundleMsiPackageTuple msiPackage) // MSI 408 else if (package.SpecificPackageSymbol is WixBundleMsiPackageSymbol msiPackage) // MSI
409 { 409 {
410 writer.WriteAttributeString("ProductCode", msiPackage.ProductCode); 410 writer.WriteAttributeString("ProductCode", msiPackage.ProductCode);
411 writer.WriteAttributeString("Language", msiPackage.ProductLanguage.ToString(CultureInfo.InvariantCulture)); 411 writer.WriteAttributeString("Language", msiPackage.ProductLanguage.ToString(CultureInfo.InvariantCulture));
@@ -415,7 +415,7 @@ namespace WixToolset.Core.Burn.Bundles
415 writer.WriteAttributeString("UpgradeCode", msiPackage.UpgradeCode); 415 writer.WriteAttributeString("UpgradeCode", msiPackage.UpgradeCode);
416 } 416 }
417 } 417 }
418 else if (package.SpecificPackageTuple is WixBundleMspPackageTuple mspPackage) // MSP 418 else if (package.SpecificPackageSymbol is WixBundleMspPackageSymbol mspPackage) // MSP
419 { 419 {
420 writer.WriteAttributeString("PatchCode", mspPackage.PatchCode); 420 writer.WriteAttributeString("PatchCode", mspPackage.PatchCode);
421 writer.WriteAttributeString("PatchXml", mspPackage.PatchXml); 421 writer.WriteAttributeString("PatchXml", mspPackage.PatchXml);
@@ -436,7 +436,7 @@ namespace WixToolset.Core.Burn.Bundles
436 } 436 }
437 } 437 }
438 } 438 }
439 else if (package.SpecificPackageTuple is WixBundleMsuPackageTuple msuPackage) // MSU 439 else if (package.SpecificPackageSymbol is WixBundleMsuPackageSymbol msuPackage) // MSU
440 { 440 {
441 writer.WriteAttributeString("DetectCondition", msuPackage.DetectCondition); 441 writer.WriteAttributeString("DetectCondition", msuPackage.DetectCondition);
442 writer.WriteAttributeString("KB", msuPackage.MsuKB); 442 writer.WriteAttributeString("KB", msuPackage.MsuKB);
@@ -567,14 +567,14 @@ namespace WixToolset.Core.Burn.Bundles
567 567
568 // Write any contained Payloads with the PackagePayload being first 568 // Write any contained Payloads with the PackagePayload being first
569 writer.WriteStartElement("PayloadRef"); 569 writer.WriteStartElement("PayloadRef");
570 writer.WriteAttributeString("Id", package.PackageTuple.PayloadRef); 570 writer.WriteAttributeString("Id", package.PackageSymbol.PayloadRef);
571 writer.WriteEndElement(); 571 writer.WriteEndElement();
572 572
573 var packagePayloads = payloadsByPackage[package.PackageId]; 573 var packagePayloads = payloadsByPackage[package.PackageId];
574 574
575 foreach (var payload in packagePayloads) 575 foreach (var payload in packagePayloads)
576 { 576 {
577 if (payload.Id.Id != package.PackageTuple.PayloadRef) 577 if (payload.Id.Id != package.PackageSymbol.PayloadRef)
578 { 578 {
579 writer.WriteStartElement("PayloadRef"); 579 writer.WriteStartElement("PayloadRef");
580 writer.WriteAttributeString("Id", payload.Id.Id); 580 writer.WriteAttributeString("Id", payload.Id.Id);
@@ -598,7 +598,7 @@ namespace WixToolset.Core.Burn.Bundles
598 } 598 }
599 599
600 // Write the ApprovedExeForElevation elements. 600 // Write the ApprovedExeForElevation elements.
601 var approvedExesForElevation = this.Section.Tuples.OfType<WixApprovedExeForElevationTuple>(); 601 var approvedExesForElevation = this.Section.Symbols.OfType<WixApprovedExeForElevationSymbol>();
602 602
603 foreach (var approvedExeForElevation in approvedExesForElevation) 603 foreach (var approvedExeForElevation in approvedExesForElevation)
604 { 604 {
@@ -620,7 +620,7 @@ namespace WixToolset.Core.Burn.Bundles
620 } 620 }
621 621
622 // Write the BundleExtension elements. 622 // Write the BundleExtension elements.
623 var bundleExtensions = this.Section.Tuples.OfType<WixBundleExtensionTuple>(); 623 var bundleExtensions = this.Section.Symbols.OfType<WixBundleExtensionSymbol>();
624 624
625 foreach (var bundleExtension in bundleExtensions) 625 foreach (var bundleExtension in bundleExtensions)
626 { 626 {
@@ -635,7 +635,7 @@ namespace WixToolset.Core.Burn.Bundles
635 } 635 }
636 } 636 }
637 637
638 private void WriteBurnManifestContainerAttributes(XmlTextWriter writer, string executableName, WixBundleContainerTuple container) 638 private void WriteBurnManifestContainerAttributes(XmlTextWriter writer, string executableName, WixBundleContainerSymbol container)
639 { 639 {
640 writer.WriteAttributeString("Id", container.Id.Id); 640 writer.WriteAttributeString("Id", container.Id.Id);
641 writer.WriteAttributeString("FileSize", container.Size.Value.ToString(CultureInfo.InvariantCulture)); 641 writer.WriteAttributeString("FileSize", container.Size.Value.ToString(CultureInfo.InvariantCulture));
@@ -669,7 +669,7 @@ namespace WixToolset.Core.Burn.Bundles
669 } 669 }
670 } 670 }
671 671
672 private void WriteBurnManifestPayloadAttributes(XmlTextWriter writer, WixBundlePayloadTuple payload, bool embeddedOnly, Dictionary<string, WixBundlePayloadTuple> allPayloads) 672 private void WriteBurnManifestPayloadAttributes(XmlTextWriter writer, WixBundlePayloadSymbol payload, bool embeddedOnly, Dictionary<string, WixBundlePayloadSymbol> allPayloads)
673 { 673 {
674 Debug.Assert(!embeddedOnly || PackagingType.Embedded == payload.Packaging); 674 Debug.Assert(!embeddedOnly || PackagingType.Embedded == payload.Packaging);
675 675
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs b/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs
index 937721a6..a23a116b 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateContainerCommand.cs
@@ -8,21 +8,21 @@ namespace WixToolset.Core.Burn.Bundles
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Core.Native; 9 using WixToolset.Core.Native;
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 cabinet files. 14 /// Creates cabinet files.
15 /// </summary> 15 /// </summary>
16 internal class CreateContainerCommand 16 internal class CreateContainerCommand
17 { 17 {
18 public CreateContainerCommand(IEnumerable<WixBundlePayloadTuple> payloads, string outputPath, CompressionLevel? compressionLevel) 18 public CreateContainerCommand(IEnumerable<WixBundlePayloadSymbol> payloads, string outputPath, CompressionLevel? compressionLevel)
19 { 19 {
20 this.Payloads = payloads; 20 this.Payloads = payloads;
21 this.OutputPath = outputPath; 21 this.OutputPath = outputPath;
22 this.CompressionLevel = compressionLevel; 22 this.CompressionLevel = compressionLevel;
23 } 23 }
24 24
25 public CreateContainerCommand(string manifestPath, IEnumerable<WixBundlePayloadTuple> payloads, string outputPath, CompressionLevel? compressionLevel) 25 public CreateContainerCommand(string manifestPath, IEnumerable<WixBundlePayloadSymbol> payloads, string outputPath, CompressionLevel? compressionLevel)
26 { 26 {
27 this.ManifestFile = manifestPath; 27 this.ManifestFile = manifestPath;
28 this.Payloads = payloads; 28 this.Payloads = payloads;
@@ -36,7 +36,7 @@ namespace WixToolset.Core.Burn.Bundles
36 36
37 private string OutputPath { get; } 37 private string OutputPath { get; }
38 38
39 private IEnumerable<WixBundlePayloadTuple> Payloads { get; } 39 private IEnumerable<WixBundlePayloadSymbol> Payloads { get; }
40 40
41 public string Hash { get; private set; } 41 public string Hash { get; private set; }
42 42
diff --git a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
index babac5e2..3e54013a 100644
--- a/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
+++ b/src/WixToolset.Core.Burn/Bundles/CreateNonUXContainers.cs
@@ -8,18 +8,18 @@ namespace WixToolset.Core.Burn.Bundles
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Burn; 10 using WixToolset.Data.Burn;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
14 14
15 internal class CreateNonUXContainers 15 internal class CreateNonUXContainers
16 { 16 {
17 public CreateNonUXContainers(IBackendHelper backendHelper, IntermediateSection section, WixBootstrapperApplicationTuple bootstrapperApplicationTuple, Dictionary<string, WixBundlePayloadTuple> payloadTuples, string intermediateFolder, string layoutFolder, CompressionLevel? defaultCompressionLevel) 17 public CreateNonUXContainers(IBackendHelper backendHelper, IntermediateSection section, WixBootstrapperApplicationSymbol bootstrapperApplicationSymbol, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols, string intermediateFolder, string layoutFolder, CompressionLevel? defaultCompressionLevel)
18 { 18 {
19 this.BackendHelper = backendHelper; 19 this.BackendHelper = backendHelper;
20 this.Section = section; 20 this.Section = section;
21 this.BootstrapperApplicationTuple = bootstrapperApplicationTuple; 21 this.BootstrapperApplicationSymbol = bootstrapperApplicationSymbol;
22 this.PayloadTuples = payloadTuples; 22 this.PayloadSymbols = payloadSymbols;
23 this.IntermediateFolder = intermediateFolder; 23 this.IntermediateFolder = intermediateFolder;
24 this.LayoutFolder = layoutFolder; 24 this.LayoutFolder = layoutFolder;
25 this.DefaultCompressionLevel = defaultCompressionLevel; 25 this.DefaultCompressionLevel = defaultCompressionLevel;
@@ -29,19 +29,19 @@ namespace WixToolset.Core.Burn.Bundles
29 29
30 public IEnumerable<ITrackedFile> TrackedFiles { get; private set; } 30 public IEnumerable<ITrackedFile> TrackedFiles { get; private set; }
31 31
32 public WixBundleContainerTuple UXContainer { get; set; } 32 public WixBundleContainerSymbol UXContainer { get; set; }
33 33
34 public IEnumerable<WixBundlePayloadTuple> UXContainerPayloads { get; private set; } 34 public IEnumerable<WixBundlePayloadSymbol> UXContainerPayloads { get; private set; }
35 35
36 public IEnumerable<WixBundleContainerTuple> Containers { get; private set; } 36 public IEnumerable<WixBundleContainerSymbol> Containers { get; private set; }
37 37
38 private IBackendHelper BackendHelper { get; } 38 private IBackendHelper BackendHelper { get; }
39 39
40 private IntermediateSection Section { get; } 40 private IntermediateSection Section { get; }
41 41
42 private WixBootstrapperApplicationTuple BootstrapperApplicationTuple { get; } 42 private WixBootstrapperApplicationSymbol BootstrapperApplicationSymbol { get; }
43 43
44 private Dictionary<string, WixBundlePayloadTuple> PayloadTuples { get; } 44 private Dictionary<string, WixBundlePayloadSymbol> PayloadSymbols { get; }
45 45
46 private string IntermediateFolder { get; } 46 private string IntermediateFolder { get; }
47 47
@@ -53,15 +53,15 @@ namespace WixToolset.Core.Burn.Bundles
53 { 53 {
54 var fileTransfers = new List<IFileTransfer>(); 54 var fileTransfers = new List<IFileTransfer>();
55 var trackedFiles = new List<ITrackedFile>(); 55 var trackedFiles = new List<ITrackedFile>();
56 var uxPayloadTuples = new List<WixBundlePayloadTuple>(); 56 var uxPayloadSymbols = new List<WixBundlePayloadSymbol>();
57 57
58 var attachedContainerIndex = 1; // count starts at one because UX container is "0". 58 var attachedContainerIndex = 1; // count starts at one because UX container is "0".
59 59
60 var containerTuples = this.Section.Tuples.OfType<WixBundleContainerTuple>().ToList(); 60 var containerSymbols = this.Section.Symbols.OfType<WixBundleContainerSymbol>().ToList();
61 61
62 var payloadsByContainer = this.PayloadTuples.Values.ToLookup(p => p.ContainerRef); 62 var payloadsByContainer = this.PayloadSymbols.Values.ToLookup(p => p.ContainerRef);
63 63
64 foreach (var container in containerTuples) 64 foreach (var container in containerSymbols)
65 { 65 {
66 var containerId = container.Id.Id; 66 var containerId = container.Id.Id;
67 67
@@ -83,17 +83,17 @@ namespace WixToolset.Core.Burn.Bundles
83 83
84 // Gather the list of UX payloads but ensure the BootstrapperApplication Payload is the first 84 // Gather the list of UX payloads but ensure the BootstrapperApplication Payload is the first
85 // in the list since that is the Payload that Burn attempts to load. 85 // in the list since that is the Payload that Burn attempts to load.
86 var baPayloadId = this.BootstrapperApplicationTuple.Id.Id; 86 var baPayloadId = this.BootstrapperApplicationSymbol.Id.Id;
87 87
88 foreach (var uxPayload in containerPayloads) 88 foreach (var uxPayload in containerPayloads)
89 { 89 {
90 if (uxPayload.Id.Id == baPayloadId) 90 if (uxPayload.Id.Id == baPayloadId)
91 { 91 {
92 uxPayloadTuples.Insert(0, uxPayload); 92 uxPayloadSymbols.Insert(0, uxPayload);
93 } 93 }
94 else 94 else
95 { 95 {
96 uxPayloadTuples.Add(uxPayload); 96 uxPayloadSymbols.Add(uxPayload);
97 } 97 }
98 } 98 }
99 } 99 }
@@ -120,13 +120,13 @@ namespace WixToolset.Core.Burn.Bundles
120 } 120 }
121 } 121 }
122 122
123 this.Containers = containerTuples; 123 this.Containers = containerSymbols;
124 this.UXContainerPayloads = uxPayloadTuples; 124 this.UXContainerPayloads = uxPayloadSymbols;
125 this.FileTransfers = fileTransfers; 125 this.FileTransfers = fileTransfers;
126 this.TrackedFiles = trackedFiles; 126 this.TrackedFiles = trackedFiles;
127 } 127 }
128 128
129 private void CreateContainer(WixBundleContainerTuple container, IEnumerable<WixBundlePayloadTuple> containerPayloads) 129 private void CreateContainer(WixBundleContainerSymbol container, IEnumerable<WixBundlePayloadSymbol> containerPayloads)
130 { 130 {
131 var command = new CreateContainerCommand(containerPayloads, container.WorkingPath, this.DefaultCompressionLevel); 131 var command = new CreateContainerCommand(containerPayloads, container.WorkingPath, this.DefaultCompressionLevel);
132 command.Execute(); 132 command.Execute();
diff --git a/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs b/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs
index 71e4cfea..24d1e8d8 100644
--- a/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs
@@ -5,17 +5,17 @@ namespace WixToolset.Core.Burn.Bundles
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 internal class GetPackageFacadesCommand 10 internal class GetPackageFacadesCommand
11 { 11 {
12 public GetPackageFacadesCommand(IEnumerable<WixBundlePackageTuple> chainPackageTuples, IntermediateSection section) 12 public GetPackageFacadesCommand(IEnumerable<WixBundlePackageSymbol> chainPackageSymbols, IntermediateSection section)
13 { 13 {
14 this.ChainPackageTuples = chainPackageTuples; 14 this.ChainPackageSymbols = chainPackageSymbols;
15 this.Section = section; 15 this.Section = section;
16 } 16 }
17 17
18 private IEnumerable<WixBundlePackageTuple> ChainPackageTuples { get; } 18 private IEnumerable<WixBundlePackageSymbol> ChainPackageSymbols { get; }
19 19
20 private IntermediateSection Section { get; } 20 private IntermediateSection Section { get; }
21 21
@@ -23,14 +23,14 @@ namespace WixToolset.Core.Burn.Bundles
23 23
24 public void Execute() 24 public void Execute()
25 { 25 {
26 var exePackages = this.Section.Tuples.OfType<WixBundleExePackageTuple>().ToDictionary(t => t.Id.Id); 26 var exePackages = this.Section.Symbols.OfType<WixBundleExePackageSymbol>().ToDictionary(t => t.Id.Id);
27 var msiPackages = this.Section.Tuples.OfType<WixBundleMsiPackageTuple>().ToDictionary(t => t.Id.Id); 27 var msiPackages = this.Section.Symbols.OfType<WixBundleMsiPackageSymbol>().ToDictionary(t => t.Id.Id);
28 var mspPackages = this.Section.Tuples.OfType<WixBundleMspPackageTuple>().ToDictionary(t => t.Id.Id); 28 var mspPackages = this.Section.Symbols.OfType<WixBundleMspPackageSymbol>().ToDictionary(t => t.Id.Id);
29 var msuPackages = this.Section.Tuples.OfType<WixBundleMsuPackageTuple>().ToDictionary(t => t.Id.Id); 29 var msuPackages = this.Section.Symbols.OfType<WixBundleMsuPackageSymbol>().ToDictionary(t => t.Id.Id);
30 30
31 var facades = new Dictionary<string, PackageFacade>(); 31 var facades = new Dictionary<string, PackageFacade>();
32 32
33 foreach (var package in this.ChainPackageTuples) 33 foreach (var package in this.ChainPackageSymbols)
34 { 34 {
35 var id = package.Id.Id; 35 var id = package.Id.Id;
36 switch (package.Type) 36 switch (package.Type)
diff --git a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs
index 8ead0952..9e27d5a3 100644
--- a/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/OrderPackagesAndRollbackBoundariesCommand.cs
@@ -5,35 +5,35 @@ namespace WixToolset.Core.Burn.Bundles
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Tuples; 8 using WixToolset.Data.Symbols;
9 using WixToolset.Extensibility.Services; 9 using WixToolset.Extensibility.Services;
10 10
11 internal class OrderPackagesAndRollbackBoundariesCommand 11 internal class OrderPackagesAndRollbackBoundariesCommand
12 { 12 {
13 public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IEnumerable<WixGroupTuple> groupTuples, Dictionary<string, WixBundleRollbackBoundaryTuple> boundaryTuples, IDictionary<string, PackageFacade> packageFacades) 13 public OrderPackagesAndRollbackBoundariesCommand(IMessaging messaging, IEnumerable<WixGroupSymbol> groupSymbols, Dictionary<string, WixBundleRollbackBoundarySymbol> boundarySymbols, IDictionary<string, PackageFacade> packageFacades)
14 { 14 {
15 this.Messaging = messaging; 15 this.Messaging = messaging;
16 this.GroupTuples = groupTuples; 16 this.GroupSymbols = groupSymbols;
17 this.Boundaries = boundaryTuples; 17 this.Boundaries = boundarySymbols;
18 this.PackageFacades = packageFacades; 18 this.PackageFacades = packageFacades;
19 } 19 }
20 20
21 private IMessaging Messaging { get; } 21 private IMessaging Messaging { get; }
22 22
23 public IEnumerable<WixGroupTuple> GroupTuples { get; } 23 public IEnumerable<WixGroupSymbol> GroupSymbols { get; }
24 24
25 public Dictionary<string, WixBundleRollbackBoundaryTuple> Boundaries { get; } 25 public Dictionary<string, WixBundleRollbackBoundarySymbol> Boundaries { get; }
26 26
27 public IDictionary<string, PackageFacade> PackageFacades { get; } 27 public IDictionary<string, PackageFacade> PackageFacades { get; }
28 28
29 public IEnumerable<PackageFacade> OrderedPackageFacades { get; private set; } 29 public IEnumerable<PackageFacade> OrderedPackageFacades { get; private set; }
30 30
31 public IEnumerable<WixBundleRollbackBoundaryTuple> UsedRollbackBoundaries { get; private set; } 31 public IEnumerable<WixBundleRollbackBoundarySymbol> UsedRollbackBoundaries { get; private set; }
32 32
33 public void Execute() 33 public void Execute()
34 { 34 {
35 var orderedFacades = new List<PackageFacade>(); 35 var orderedFacades = new List<PackageFacade>();
36 var usedBoundaries = new List<WixBundleRollbackBoundaryTuple>(); 36 var usedBoundaries = new List<WixBundleRollbackBoundarySymbol>();
37 37
38 // Process the chain of packages to add them in the correct order 38 // Process the chain of packages to add them in the correct order
39 // and assign the forward rollback boundaries as appropriate. Remember 39 // and assign the forward rollback boundaries as appropriate. Remember
@@ -44,41 +44,41 @@ namespace WixToolset.Core.Burn.Bundles
44 // We handle uninstall (aka: backwards) rollback boundaries after 44 // We handle uninstall (aka: backwards) rollback boundaries after
45 // we get these install/repair (aka: forward) rollback boundaries 45 // we get these install/repair (aka: forward) rollback boundaries
46 // defined. 46 // defined.
47 WixBundleRollbackBoundaryTuple previousRollbackBoundary = null; 47 WixBundleRollbackBoundarySymbol previousRollbackBoundary = null;
48 WixBundleRollbackBoundaryTuple lastRollbackBoundary = null; 48 WixBundleRollbackBoundarySymbol lastRollbackBoundary = null;
49 var boundaryHadX86Package = false; 49 var boundaryHadX86Package = false;
50 50
51 foreach (var groupTuple in this.GroupTuples) 51 foreach (var groupSymbol in this.GroupSymbols)
52 { 52 {
53 if (ComplexReferenceChildType.Package == groupTuple.ChildType && ComplexReferenceParentType.PackageGroup == groupTuple.ParentType && "WixChain" == groupTuple.ParentId) 53 if (ComplexReferenceChildType.Package == groupSymbol.ChildType && ComplexReferenceParentType.PackageGroup == groupSymbol.ParentType && "WixChain" == groupSymbol.ParentId)
54 { 54 {
55 if (this.PackageFacades.TryGetValue(groupTuple.ChildId, out var facade)) 55 if (this.PackageFacades.TryGetValue(groupSymbol.ChildId, out var facade))
56 { 56 {
57 if (null != previousRollbackBoundary) 57 if (null != previousRollbackBoundary)
58 { 58 {
59 usedBoundaries.Add(previousRollbackBoundary); 59 usedBoundaries.Add(previousRollbackBoundary);
60 facade.PackageTuple.RollbackBoundaryRef = previousRollbackBoundary.Id.Id; 60 facade.PackageSymbol.RollbackBoundaryRef = previousRollbackBoundary.Id.Id;
61 previousRollbackBoundary = null; 61 previousRollbackBoundary = null;
62 62
63 boundaryHadX86Package = facade.PackageTuple.Win64; 63 boundaryHadX86Package = facade.PackageSymbol.Win64;
64 } 64 }
65 65
66 // Error if MSI transaction has x86 package preceding x64 packages 66 // Error if MSI transaction has x86 package preceding x64 packages
67 if ((lastRollbackBoundary != null) 67 if ((lastRollbackBoundary != null)
68 && lastRollbackBoundary.Transaction == true 68 && lastRollbackBoundary.Transaction == true
69 && boundaryHadX86Package 69 && boundaryHadX86Package
70 && facade.PackageTuple.Win64) 70 && facade.PackageSymbol.Win64)
71 { 71 {
72 this.Messaging.Write(ErrorMessages.MsiTransactionX86BeforeX64(lastRollbackBoundary.SourceLineNumbers)); 72 this.Messaging.Write(ErrorMessages.MsiTransactionX86BeforeX64(lastRollbackBoundary.SourceLineNumbers));
73 } 73 }
74 boundaryHadX86Package |= facade.PackageTuple.Win64; 74 boundaryHadX86Package |= facade.PackageSymbol.Win64;
75 75
76 orderedFacades.Add(facade); 76 orderedFacades.Add(facade);
77 } 77 }
78 else // must be a rollback boundary. 78 else // must be a rollback boundary.
79 { 79 {
80 // Discard the next rollback boundary if we have a previously defined boundary. 80 // Discard the next rollback boundary if we have a previously defined boundary.
81 var nextRollbackBoundary = this.Boundaries[groupTuple.ChildId]; 81 var nextRollbackBoundary = this.Boundaries[groupSymbol.ChildId];
82 if (null != previousRollbackBoundary) 82 if (null != previousRollbackBoundary)
83 { 83 {
84 this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id)); 84 this.Messaging.Write(WarningMessages.DiscardedRollbackBoundary(nextRollbackBoundary.SourceLineNumbers, nextRollbackBoundary.Id.Id));
@@ -131,14 +131,14 @@ namespace WixToolset.Core.Burn.Bundles
131 131
132 foreach (PackageFacade package in orderedFacades) 132 foreach (PackageFacade package in orderedFacades)
133 { 133 {
134 if (null != package.PackageTuple.RollbackBoundaryRef) 134 if (null != package.PackageSymbol.RollbackBoundaryRef)
135 { 135 {
136 if (null != previousFacade) 136 if (null != previousFacade)
137 { 137 {
138 previousFacade.PackageTuple.RollbackBoundaryBackwardRef = previousRollbackBoundaryId; 138 previousFacade.PackageSymbol.RollbackBoundaryBackwardRef = previousRollbackBoundaryId;
139 } 139 }
140 140
141 previousRollbackBoundaryId = package.PackageTuple.RollbackBoundaryRef; 141 previousRollbackBoundaryId = package.PackageSymbol.RollbackBoundaryRef;
142 } 142 }
143 143
144 previousFacade = package; 144 previousFacade = package;
@@ -146,7 +146,7 @@ namespace WixToolset.Core.Burn.Bundles
146 146
147 if (!String.IsNullOrEmpty(previousRollbackBoundaryId) && null != previousFacade) 147 if (!String.IsNullOrEmpty(previousRollbackBoundaryId) && null != previousFacade)
148 { 148 {
149 previousFacade.PackageTuple.RollbackBoundaryBackwardRef = previousRollbackBoundaryId; 149 previousFacade.PackageSymbol.RollbackBoundaryBackwardRef = previousRollbackBoundaryId;
150 } 150 }
151 151
152 this.OrderedPackageFacades = orderedFacades; 152 this.OrderedPackageFacades = orderedFacades;
diff --git a/src/WixToolset.Core.Burn/Bundles/OrderSearchesCommand.cs b/src/WixToolset.Core.Burn/Bundles/OrderSearchesCommand.cs
index 874258bf..dcb4733e 100644
--- a/src/WixToolset.Core.Burn/Bundles/OrderSearchesCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/OrderSearchesCommand.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core.Burn.Bundles
8 using System.Linq; 8 using System.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Burn; 10 using WixToolset.Data.Burn;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
13 13
14 internal class OrderSearchesCommand 14 internal class OrderSearchesCommand
@@ -23,32 +23,32 @@ namespace WixToolset.Core.Burn.Bundles
23 23
24 private IntermediateSection Section { get; } 24 private IntermediateSection Section { get; }
25 25
26 public IDictionary<string, IList<IntermediateTuple>> ExtensionSearchTuplesByExtensionId { get; private set; } 26 public IDictionary<string, IList<IntermediateSymbol>> ExtensionSearchSymbolsByExtensionId { get; private set; }
27 27
28 public IList<ISearchFacade> OrderedSearchFacades { get; private set; } 28 public IList<ISearchFacade> OrderedSearchFacades { get; private set; }
29 29
30 public void Execute() 30 public void Execute()
31 { 31 {
32 this.ExtensionSearchTuplesByExtensionId = new Dictionary<string, IList<IntermediateTuple>>(); 32 this.ExtensionSearchSymbolsByExtensionId = new Dictionary<string, IList<IntermediateSymbol>>();
33 this.OrderedSearchFacades = new List<ISearchFacade>(); 33 this.OrderedSearchFacades = new List<ISearchFacade>();
34 34
35 var searchRelationTuples = this.Section.Tuples.OfType<WixSearchRelationTuple>().ToList(); 35 var searchRelationSymbols = this.Section.Symbols.OfType<WixSearchRelationSymbol>().ToList();
36 var searchTuples = this.Section.Tuples.OfType<WixSearchTuple>().ToList(); 36 var searchSymbols = this.Section.Symbols.OfType<WixSearchSymbol>().ToList();
37 if (searchTuples.Count == 0) 37 if (searchSymbols.Count == 0)
38 { 38 {
39 // nothing to do! 39 // nothing to do!
40 return; 40 return;
41 } 41 }
42 42
43 var tupleDictionary = searchTuples.ToDictionary(t => t.Id.Id); 43 var symbolDictionary = searchSymbols.ToDictionary(t => t.Id.Id);
44 44
45 var constraints = new Constraints(); 45 var constraints = new Constraints();
46 if (searchRelationTuples.Count > 0) 46 if (searchRelationSymbols.Count > 0)
47 { 47 {
48 // add relational info to our data... 48 // add relational info to our data...
49 foreach (var searchRelationTuple in searchRelationTuples) 49 foreach (var searchRelationSymbol in searchRelationSymbols)
50 { 50 {
51 constraints.AddConstraint(searchRelationTuple.Id.Id, searchRelationTuple.ParentSearchRef); 51 constraints.AddConstraint(searchRelationSymbol.Id.Id, searchRelationSymbol.ParentSearchRef);
52 } 52 }
53 } 53 }
54 54
@@ -67,10 +67,10 @@ namespace WixToolset.Core.Burn.Bundles
67 // lexicographically at each step to ensure a deterministic ordering 67 // lexicographically at each step to ensure a deterministic ordering
68 // based on 'after' dependencies and ID. 68 // based on 'after' dependencies and ID.
69 var sorter = new TopologicalSort(); 69 var sorter = new TopologicalSort();
70 var sortedIds = sorter.Sort(tupleDictionary.Keys, constraints); 70 var sortedIds = sorter.Sort(symbolDictionary.Keys, constraints);
71 71
72 // Now, create the search facades with the searches in order... 72 // Now, create the search facades with the searches in order...
73 this.OrderSearches(sortedIds, tupleDictionary); 73 this.OrderSearches(sortedIds, symbolDictionary);
74 } 74 }
75 75
76 /// <summary> 76 /// <summary>
@@ -313,49 +313,49 @@ namespace WixToolset.Core.Burn.Bundles
313 } 313 }
314 } 314 }
315 315
316 private void OrderSearches(List<string> sortedIds, Dictionary<string, WixSearchTuple> searchTupleDictionary) 316 private void OrderSearches(List<string> sortedIds, Dictionary<string, WixSearchSymbol> searchSymbolDictionary)
317 { 317 {
318 // TODO: Although the WixSearch tables are defined in the Util extension, 318 // TODO: Although the WixSearch tables are defined in the Util extension,
319 // the Bundle Binder has to know all about them. We hope to revisit all 319 // the Bundle Binder has to know all about them. We hope to revisit all
320 // of this in the 4.0 timeframe. 320 // of this in the 4.0 timeframe.
321 var legacySearchesById = this.Section.Tuples 321 var legacySearchesById = this.Section.Symbols
322 .Where(t => t.Definition.Type == TupleDefinitionType.WixComponentSearch || 322 .Where(t => t.Definition.Type == SymbolDefinitionType.WixComponentSearch ||
323 t.Definition.Type == TupleDefinitionType.WixFileSearch || 323 t.Definition.Type == SymbolDefinitionType.WixFileSearch ||
324 t.Definition.Type == TupleDefinitionType.WixProductSearch || 324 t.Definition.Type == SymbolDefinitionType.WixProductSearch ||
325 t.Definition.Type == TupleDefinitionType.WixRegistrySearch) 325 t.Definition.Type == SymbolDefinitionType.WixRegistrySearch)
326 .ToDictionary(t => t.Id.Id); 326 .ToDictionary(t => t.Id.Id);
327 var setVariablesById = this.Section.Tuples 327 var setVariablesById = this.Section.Symbols
328 .OfType<WixSetVariableTuple>() 328 .OfType<WixSetVariableSymbol>()
329 .ToDictionary(t => t.Id.Id); 329 .ToDictionary(t => t.Id.Id);
330 var extensionSearchesById = this.Section.Tuples 330 var extensionSearchesById = this.Section.Symbols
331 .Where(t => t.Definition.HasTag(BurnConstants.BundleExtensionSearchTupleDefinitionTag)) 331 .Where(t => t.Definition.HasTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag))
332 .ToDictionary(t => t.Id.Id); 332 .ToDictionary(t => t.Id.Id);
333 333
334 foreach (var searchId in sortedIds) 334 foreach (var searchId in sortedIds)
335 { 335 {
336 var searchTuple = searchTupleDictionary[searchId]; 336 var searchSymbol = searchSymbolDictionary[searchId];
337 if (legacySearchesById.TryGetValue(searchId, out var specificSearchTuple)) 337 if (legacySearchesById.TryGetValue(searchId, out var specificSearchSymbol))
338 { 338 {
339 this.OrderedSearchFacades.Add(new LegacySearchFacade(searchTuple, specificSearchTuple)); 339 this.OrderedSearchFacades.Add(new LegacySearchFacade(searchSymbol, specificSearchSymbol));
340 } 340 }
341 else if (setVariablesById.TryGetValue(searchId, out var setVariableTuple)) 341 else if (setVariablesById.TryGetValue(searchId, out var setVariableSymbol))
342 { 342 {
343 this.OrderedSearchFacades.Add(new SetVariableSearchFacade(searchTuple, setVariableTuple)); 343 this.OrderedSearchFacades.Add(new SetVariableSearchFacade(searchSymbol, setVariableSymbol));
344 } 344 }
345 else if (extensionSearchesById.TryGetValue(searchId, out var extensionSearchTuple)) 345 else if (extensionSearchesById.TryGetValue(searchId, out var extensionSearchSymbol))
346 { 346 {
347 this.OrderedSearchFacades.Add(new ExtensionSearchFacade(searchTuple)); 347 this.OrderedSearchFacades.Add(new ExtensionSearchFacade(searchSymbol));
348 348
349 if (!this.ExtensionSearchTuplesByExtensionId.TryGetValue(searchTuple.BundleExtensionRef, out var extensionSearchTuples)) 349 if (!this.ExtensionSearchSymbolsByExtensionId.TryGetValue(searchSymbol.BundleExtensionRef, out var extensionSearchSymbols))
350 { 350 {
351 extensionSearchTuples = new List<IntermediateTuple>(); 351 extensionSearchSymbols = new List<IntermediateSymbol>();
352 this.ExtensionSearchTuplesByExtensionId[searchTuple.BundleExtensionRef] = extensionSearchTuples; 352 this.ExtensionSearchSymbolsByExtensionId[searchSymbol.BundleExtensionRef] = extensionSearchSymbols;
353 } 353 }
354 extensionSearchTuples.Add(extensionSearchTuple); 354 extensionSearchSymbols.Add(extensionSearchSymbol);
355 } 355 }
356 else 356 else
357 { 357 {
358 this.Messaging.Write(ErrorMessages.MissingBundleSearch(searchTuple.SourceLineNumbers, searchId)); 358 this.Messaging.Write(ErrorMessages.MissingBundleSearch(searchSymbol.SourceLineNumbers, searchId));
359 } 359 }
360 } 360 }
361 } 361 }
diff --git a/src/WixToolset.Core.Burn/Bundles/PackageFacade.cs b/src/WixToolset.Core.Burn/Bundles/PackageFacade.cs
index 8b1711a1..471262de 100644
--- a/src/WixToolset.Core.Burn/Bundles/PackageFacade.cs
+++ b/src/WixToolset.Core.Burn/Bundles/PackageFacade.cs
@@ -4,22 +4,22 @@ namespace WixToolset.Core.Burn.Bundles
4{ 4{
5 using System.Diagnostics; 5 using System.Diagnostics;
6 using WixToolset.Data; 6 using WixToolset.Data;
7 using WixToolset.Data.Tuples; 7 using WixToolset.Data.Symbols;
8 8
9 internal class PackageFacade 9 internal class PackageFacade
10 { 10 {
11 public PackageFacade(WixBundlePackageTuple packageTuple, IntermediateTuple specificPackageTuple) 11 public PackageFacade(WixBundlePackageSymbol packageSymbol, IntermediateSymbol specificPackageSymbol)
12 { 12 {
13 Debug.Assert(packageTuple.Id.Id == specificPackageTuple.Id.Id); 13 Debug.Assert(packageSymbol.Id.Id == specificPackageSymbol.Id.Id);
14 14
15 this.PackageTuple = packageTuple; 15 this.PackageSymbol = packageSymbol;
16 this.SpecificPackageTuple = specificPackageTuple; 16 this.SpecificPackageSymbol = specificPackageSymbol;
17 } 17 }
18 18
19 public string PackageId => this.PackageTuple.Id.Id; 19 public string PackageId => this.PackageSymbol.Id.Id;
20 20
21 public WixBundlePackageTuple PackageTuple { get; } 21 public WixBundlePackageSymbol PackageSymbol { get; }
22 22
23 public IntermediateTuple SpecificPackageTuple { get; } 23 public IntermediateSymbol SpecificPackageSymbol { get; }
24 } 24 }
25} 25}
diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs
index 56254a06..8d8ea986 100644
--- a/src/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/ProcessExePackageCommand.cs
@@ -4,20 +4,20 @@ namespace WixToolset.Core.Burn.Bundles
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 8
9 /// <summary> 9 /// <summary>
10 /// Initializes package state from the Exe contents. 10 /// Initializes package state from the Exe contents.
11 /// </summary> 11 /// </summary>
12 internal class ProcessExePackageCommand 12 internal class ProcessExePackageCommand
13 { 13 {
14 public ProcessExePackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadTuple> payloadTuples) 14 public ProcessExePackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
15 { 15 {
16 this.AuthoredPayloads = payloadTuples; 16 this.AuthoredPayloads = payloadSymbols;
17 this.Facade = facade; 17 this.Facade = facade;
18 } 18 }
19 19
20 public Dictionary<string, WixBundlePayloadTuple> AuthoredPayloads { get; } 20 public Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { get; }
21 21
22 public PackageFacade Facade { get; } 22 public PackageFacade Facade { get; }
23 23
@@ -26,14 +26,14 @@ namespace WixToolset.Core.Burn.Bundles
26 /// </summary> 26 /// </summary>
27 public void Execute() 27 public void Execute()
28 { 28 {
29 var packagePayload = this.AuthoredPayloads[this.Facade.PackageTuple.PayloadRef]; 29 var packagePayload = this.AuthoredPayloads[this.Facade.PackageSymbol.PayloadRef];
30 30
31 if (String.IsNullOrEmpty(this.Facade.PackageTuple.CacheId)) 31 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
32 { 32 {
33 this.Facade.PackageTuple.CacheId = packagePayload.Hash; 33 this.Facade.PackageSymbol.CacheId = packagePayload.Hash;
34 } 34 }
35 35
36 this.Facade.PackageTuple.Version = packagePayload.Version; 36 this.Facade.PackageSymbol.Version = packagePayload.Version;
37 } 37 }
38 } 38 }
39} 39}
diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs
index 0754fbc6..3eb97ee6 100644
--- a/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/ProcessMsiPackageCommand.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Core.Burn.Bundles
12 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 using Dtf = WixToolset.Dtf.WindowsInstaller; 13 using Dtf = WixToolset.Dtf.WindowsInstaller;
14 using WixToolset.Extensibility.Services; 14 using WixToolset.Extensibility.Services;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using WixToolset.Data.WindowsInstaller; 16 using WixToolset.Data.WindowsInstaller;
17 using WixToolset.Extensibility.Data; 17 using WixToolset.Extensibility.Data;
18 18
@@ -23,7 +23,7 @@ namespace WixToolset.Core.Burn.Bundles
23 { 23 {
24 private const string PropertySqlFormat = "SELECT `Value` FROM `Property` WHERE `Property` = '{0}'"; 24 private const string PropertySqlFormat = "SELECT `Value` FROM `Property` WHERE `Property` = '{0}'";
25 25
26 public ProcessMsiPackageCommand(IWixToolsetServiceProvider serviceProvider, IEnumerable<IBurnBackendExtension> backendExtensions, IntermediateSection section, PackageFacade facade, Dictionary<string, WixBundlePayloadTuple> payloadTuples) 26 public ProcessMsiPackageCommand(IWixToolsetServiceProvider serviceProvider, IEnumerable<IBurnBackendExtension> backendExtensions, IntermediateSection section, PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
27 { 27 {
28 this.Messaging = serviceProvider.GetService<IMessaging>(); 28 this.Messaging = serviceProvider.GetService<IMessaging>();
29 this.BackendHelper = serviceProvider.GetService<IBackendHelper>(); 29 this.BackendHelper = serviceProvider.GetService<IBackendHelper>();
@@ -31,7 +31,7 @@ namespace WixToolset.Core.Burn.Bundles
31 31
32 this.BackendExtensions = backendExtensions; 32 this.BackendExtensions = backendExtensions;
33 33
34 this.AuthoredPayloads = payloadTuples; 34 this.AuthoredPayloads = payloadSymbols;
35 this.Section = section; 35 this.Section = section;
36 this.Facade = facade; 36 this.Facade = facade;
37 } 37 }
@@ -44,7 +44,7 @@ namespace WixToolset.Core.Burn.Bundles
44 44
45 private IEnumerable<IBurnBackendExtension> BackendExtensions { get; } 45 private IEnumerable<IBurnBackendExtension> BackendExtensions { get; }
46 46
47 private Dictionary<string, WixBundlePayloadTuple> AuthoredPayloads { get; } 47 private Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { get; }
48 48
49 private PackageFacade Facade { get; } 49 private PackageFacade Facade { get; }
50 50
@@ -55,9 +55,9 @@ namespace WixToolset.Core.Burn.Bundles
55 /// </summary> 55 /// </summary>
56 public void Execute() 56 public void Execute()
57 { 57 {
58 var packagePayload = this.AuthoredPayloads[this.Facade.PackageTuple.PayloadRef]; 58 var packagePayload = this.AuthoredPayloads[this.Facade.PackageSymbol.PayloadRef];
59 59
60 var msiPackage = (WixBundleMsiPackageTuple)this.Facade.SpecificPackageTuple; 60 var msiPackage = (WixBundleMsiPackageSymbol)this.Facade.SpecificPackageSymbol;
61 61
62 var sourcePath = packagePayload.SourceFile.Path; 62 var sourcePath = packagePayload.SourceFile.Path;
63 var longNamesInImage = false; 63 var longNamesInImage = false;
@@ -82,8 +82,8 @@ namespace WixToolset.Core.Burn.Bundles
82 var perMachine = (0 == (sumInfo.WordCount & 8)); 82 var perMachine = (0 == (sumInfo.WordCount & 8));
83 var x64 = (sumInfo.Template.Contains("x64") || sumInfo.Template.Contains("Intel64")); 83 var x64 = (sumInfo.Template.Contains("x64") || sumInfo.Template.Contains("Intel64"));
84 84
85 this.Facade.PackageTuple.PerMachine = perMachine ? YesNoDefaultType.Yes : YesNoDefaultType.No; 85 this.Facade.PackageSymbol.PerMachine = perMachine ? YesNoDefaultType.Yes : YesNoDefaultType.No;
86 this.Facade.PackageTuple.Win64 = x64; 86 this.Facade.PackageSymbol.Win64 = x64;
87 } 87 }
88 88
89 using (var db = new Dtf.Database(sourcePath)) 89 using (var db = new Dtf.Database(sourcePath))
@@ -111,33 +111,33 @@ namespace WixToolset.Core.Burn.Bundles
111 111
112 if (!String.IsNullOrEmpty(version) && Common.IsValidModuleOrBundleVersion(version)) 112 if (!String.IsNullOrEmpty(version) && Common.IsValidModuleOrBundleVersion(version))
113 { 113 {
114 this.Messaging.Write(WarningMessages.VersionTruncated(this.Facade.PackageTuple.SourceLineNumbers, msiPackage.ProductVersion, sourcePath, version)); 114 this.Messaging.Write(WarningMessages.VersionTruncated(this.Facade.PackageSymbol.SourceLineNumbers, msiPackage.ProductVersion, sourcePath, version));
115 msiPackage.ProductVersion = version; 115 msiPackage.ProductVersion = version;
116 } 116 }
117 else 117 else
118 { 118 {
119 this.Messaging.Write(ErrorMessages.InvalidProductVersion(this.Facade.PackageTuple.SourceLineNumbers, msiPackage.ProductVersion, sourcePath)); 119 this.Messaging.Write(ErrorMessages.InvalidProductVersion(this.Facade.PackageSymbol.SourceLineNumbers, msiPackage.ProductVersion, sourcePath));
120 } 120 }
121 } 121 }
122 122
123 if (String.IsNullOrEmpty(this.Facade.PackageTuple.CacheId)) 123 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
124 { 124 {
125 this.Facade.PackageTuple.CacheId = String.Format("{0}v{1}", msiPackage.ProductCode, msiPackage.ProductVersion); 125 this.Facade.PackageSymbol.CacheId = String.Format("{0}v{1}", msiPackage.ProductCode, msiPackage.ProductVersion);
126 } 126 }
127 127
128 if (String.IsNullOrEmpty(this.Facade.PackageTuple.DisplayName)) 128 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.DisplayName))
129 { 129 {
130 this.Facade.PackageTuple.DisplayName = ProcessMsiPackageCommand.GetProperty(db, "ProductName"); 130 this.Facade.PackageSymbol.DisplayName = ProcessMsiPackageCommand.GetProperty(db, "ProductName");
131 } 131 }
132 132
133 if (String.IsNullOrEmpty(this.Facade.PackageTuple.Description)) 133 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.Description))
134 { 134 {
135 this.Facade.PackageTuple.Description = ProcessMsiPackageCommand.GetProperty(db, "ARPCOMMENTS"); 135 this.Facade.PackageSymbol.Description = ProcessMsiPackageCommand.GetProperty(db, "ARPCOMMENTS");
136 } 136 }
137 137
138 if (String.IsNullOrEmpty(this.Facade.PackageTuple.Version)) 138 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.Version))
139 { 139 {
140 this.Facade.PackageTuple.Version = msiPackage.ProductVersion; 140 this.Facade.PackageSymbol.Version = msiPackage.ProductVersion;
141 } 141 }
142 142
143 var payloadNames = this.GetPayloadTargetNames(packagePayload.Id.Id); 143 var payloadNames = this.GetPayloadTargetNames(packagePayload.Id.Id);
@@ -168,7 +168,7 @@ namespace WixToolset.Core.Burn.Bundles
168 168
169 // Add all external files as package payloads and calculate the total install size as the rollup of 169 // Add all external files as package payloads and calculate the total install size as the rollup of
170 // File table's sizes. 170 // File table's sizes.
171 this.Facade.PackageTuple.InstallSize = this.ImportExternalFileAsPayloadsAndReturnInstallSize(db, packagePayload, longNamesInImage, compressed, payloadNames); 171 this.Facade.PackageSymbol.InstallSize = this.ImportExternalFileAsPayloadsAndReturnInstallSize(db, packagePayload, longNamesInImage, compressed, payloadNames);
172 172
173 // Add all dependency providers from the MSI. 173 // Add all dependency providers from the MSI.
174 this.ImportDependencyProviders(msiPackage, db); 174 this.ImportDependencyProviders(msiPackage, db);
@@ -176,13 +176,13 @@ namespace WixToolset.Core.Burn.Bundles
176 } 176 }
177 catch (Dtf.InstallerException e) 177 catch (Dtf.InstallerException e)
178 { 178 {
179 this.Messaging.Write(ErrorMessages.UnableToReadPackageInformation(this.Facade.PackageTuple.SourceLineNumbers, sourcePath, e.Message)); 179 this.Messaging.Write(ErrorMessages.UnableToReadPackageInformation(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath, e.Message));
180 } 180 }
181 } 181 }
182 182
183 private ISet<string> GetPayloadTargetNames(string packageId) 183 private ISet<string> GetPayloadTargetNames(string packageId)
184 { 184 {
185 var payloadNames = this.Section.Tuples.OfType<WixBundlePayloadTuple>() 185 var payloadNames = this.Section.Symbols.OfType<WixBundlePayloadSymbol>()
186 .Where(p => p.PackageRef == packageId) 186 .Where(p => p.PackageRef == packageId)
187 .Select(p => p.Name); 187 .Select(p => p.Name);
188 188
@@ -191,21 +191,21 @@ namespace WixToolset.Core.Burn.Bundles
191 191
192 private ISet<string> GetMsiPropertyNames(string packageId) 192 private ISet<string> GetMsiPropertyNames(string packageId)
193 { 193 {
194 var properties = this.Section.Tuples.OfType<WixBundleMsiPropertyTuple>() 194 var properties = this.Section.Symbols.OfType<WixBundleMsiPropertySymbol>()
195 .Where(p => p.Id.Id == packageId) 195 .Where(p => p.Id.Id == packageId)
196 .Select(p => p.Name); 196 .Select(p => p.Name);
197 197
198 return new HashSet<string>(properties, StringComparer.Ordinal); 198 return new HashSet<string>(properties, StringComparer.Ordinal);
199 } 199 }
200 200
201 private void SetPerMachineAppropriately(Dtf.Database db, WixBundleMsiPackageTuple msiPackage, string sourcePath) 201 private void SetPerMachineAppropriately(Dtf.Database db, WixBundleMsiPackageSymbol msiPackage, string sourcePath)
202 { 202 {
203 if (msiPackage.ForcePerMachine) 203 if (msiPackage.ForcePerMachine)
204 { 204 {
205 if (YesNoDefaultType.No == this.Facade.PackageTuple.PerMachine) 205 if (YesNoDefaultType.No == this.Facade.PackageSymbol.PerMachine)
206 { 206 {
207 this.Messaging.Write(WarningMessages.PerUserButForcingPerMachine(this.Facade.PackageTuple.SourceLineNumbers, sourcePath)); 207 this.Messaging.Write(WarningMessages.PerUserButForcingPerMachine(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath));
208 this.Facade.PackageTuple.PerMachine = YesNoDefaultType.Yes; // ensure that we think the package is per-machine. 208 this.Facade.PackageSymbol.PerMachine = YesNoDefaultType.Yes; // ensure that we think the package is per-machine.
209 } 209 }
210 210
211 // Force ALLUSERS=1 via the MSI command-line. 211 // Force ALLUSERS=1 via the MSI command-line.
@@ -218,34 +218,34 @@ namespace WixToolset.Core.Burn.Bundles
218 if (String.IsNullOrEmpty(allusers)) 218 if (String.IsNullOrEmpty(allusers))
219 { 219 {
220 // Not forced per-machine and no ALLUSERS property, flip back to per-user. 220 // Not forced per-machine and no ALLUSERS property, flip back to per-user.
221 if (YesNoDefaultType.Yes == this.Facade.PackageTuple.PerMachine) 221 if (YesNoDefaultType.Yes == this.Facade.PackageSymbol.PerMachine)
222 { 222 {
223 this.Messaging.Write(WarningMessages.ImplicitlyPerUser(this.Facade.PackageTuple.SourceLineNumbers, sourcePath)); 223 this.Messaging.Write(WarningMessages.ImplicitlyPerUser(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath));
224 this.Facade.PackageTuple.PerMachine = YesNoDefaultType.No; 224 this.Facade.PackageSymbol.PerMachine = YesNoDefaultType.No;
225 } 225 }
226 } 226 }
227 else if (allusers.Equals("1", StringComparison.Ordinal)) 227 else if (allusers.Equals("1", StringComparison.Ordinal))
228 { 228 {
229 if (YesNoDefaultType.No == this.Facade.PackageTuple.PerMachine) 229 if (YesNoDefaultType.No == this.Facade.PackageSymbol.PerMachine)
230 { 230 {
231 this.Messaging.Write(ErrorMessages.PerUserButAllUsersEquals1(this.Facade.PackageTuple.SourceLineNumbers, sourcePath)); 231 this.Messaging.Write(ErrorMessages.PerUserButAllUsersEquals1(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath));
232 } 232 }
233 } 233 }
234 else if (allusers.Equals("2", StringComparison.Ordinal)) 234 else if (allusers.Equals("2", StringComparison.Ordinal))
235 { 235 {
236 this.Messaging.Write(WarningMessages.DiscouragedAllUsersValue(this.Facade.PackageTuple.SourceLineNumbers, sourcePath, (YesNoDefaultType.Yes == this.Facade.PackageTuple.PerMachine) ? "machine" : "user")); 236 this.Messaging.Write(WarningMessages.DiscouragedAllUsersValue(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath, (YesNoDefaultType.Yes == this.Facade.PackageSymbol.PerMachine) ? "machine" : "user"));
237 } 237 }
238 else 238 else
239 { 239 {
240 this.Messaging.Write(ErrorMessages.UnsupportedAllUsersValue(this.Facade.PackageTuple.SourceLineNumbers, sourcePath, allusers)); 240 this.Messaging.Write(ErrorMessages.UnsupportedAllUsersValue(this.Facade.PackageSymbol.SourceLineNumbers, sourcePath, allusers));
241 } 241 }
242 } 242 }
243 } 243 }
244 244
245 private void SetPackageVisibility(Dtf.Database db, WixBundleMsiPackageTuple msiPackage, ISet<string> msiPropertyNames) 245 private void SetPackageVisibility(Dtf.Database db, WixBundleMsiPackageSymbol msiPackage, ISet<string> msiPropertyNames)
246 { 246 {
247 var alreadyVisible = !ProcessMsiPackageCommand.HasProperty(db, "ARPSYSTEMCOMPONENT"); 247 var alreadyVisible = !ProcessMsiPackageCommand.HasProperty(db, "ARPSYSTEMCOMPONENT");
248 var visible = (this.Facade.PackageTuple.Attributes & WixBundlePackageAttributes.Visible) == WixBundlePackageAttributes.Visible; 248 var visible = (this.Facade.PackageSymbol.Attributes & WixBundlePackageAttributes.Visible) == WixBundlePackageAttributes.Visible;
249 249
250 // If not already set to the correct visibility. 250 // If not already set to the correct visibility.
251 if (alreadyVisible != visible) 251 if (alreadyVisible != visible)
@@ -283,7 +283,7 @@ namespace WixToolset.Core.Burn.Bundles
283 attributes |= (recordAttributes & WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive) == WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive ? WixBundleRelatedPackageAttributes.MaxInclusive : 0; 283 attributes |= (recordAttributes & WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive) == WindowsInstallerConstants.MsidbUpgradeAttributesVersionMaxInclusive ? WixBundleRelatedPackageAttributes.MaxInclusive : 0;
284 attributes |= (recordAttributes & WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive) == WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive ? WixBundleRelatedPackageAttributes.LangInclusive : 0; 284 attributes |= (recordAttributes & WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive) == WindowsInstallerConstants.MsidbUpgradeAttributesLanguagesExclusive ? WixBundleRelatedPackageAttributes.LangInclusive : 0;
285 285
286 this.Section.AddTuple(new WixBundleRelatedPackageTuple(this.Facade.PackageTuple.SourceLineNumbers) 286 this.Section.AddSymbol(new WixBundleRelatedPackageSymbol(this.Facade.PackageSymbol.SourceLineNumbers)
287 { 287 {
288 PackageRef = this.Facade.PackageId, 288 PackageRef = this.Facade.PackageId,
289 RelatedId = record.GetString(1), 289 RelatedId = record.GetString(1),
@@ -358,7 +358,7 @@ namespace WixToolset.Core.Burn.Bundles
358 } 358 }
359 } 359 }
360 360
361 this.Section.AddTuple(new WixBundleMsiFeatureTuple(this.Facade.PackageTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, this.Facade.PackageId, featureName)) 361 this.Section.AddSymbol(new WixBundleMsiFeatureSymbol(this.Facade.PackageSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, this.Facade.PackageId, featureName))
362 { 362 {
363 PackageRef = this.Facade.PackageId, 363 PackageRef = this.Facade.PackageId,
364 Name = featureName, 364 Name = featureName,
@@ -379,7 +379,7 @@ namespace WixToolset.Core.Burn.Bundles
379 } 379 }
380 } 380 }
381 381
382 private void ImportExternalCabinetAsPayloads(Dtf.Database db, WixBundlePayloadTuple packagePayload, ISet<string> payloadNames) 382 private void ImportExternalCabinetAsPayloads(Dtf.Database db, WixBundlePayloadSymbol packagePayload, ISet<string> payloadNames)
383 { 383 {
384 if (db.Tables.Contains("Media")) 384 if (db.Tables.Contains("Media"))
385 { 385 {
@@ -395,9 +395,9 @@ namespace WixToolset.Core.Burn.Bundles
395 if (!payloadNames.Contains(cabinetName)) 395 if (!payloadNames.Contains(cabinetName))
396 { 396 {
397 var generatedId = Common.GenerateIdentifier("cab", packagePayload.Id.Id, cabinet); 397 var generatedId = Common.GenerateIdentifier("cab", packagePayload.Id.Id, cabinet);
398 var payloadSourceFile = this.ResolveRelatedFile(packagePayload.SourceFile.Path, packagePayload.UnresolvedSourceFile, cabinet, "Cabinet", this.Facade.PackageTuple.SourceLineNumbers, BindStage.Normal); 398 var payloadSourceFile = this.ResolveRelatedFile(packagePayload.SourceFile.Path, packagePayload.UnresolvedSourceFile, cabinet, "Cabinet", this.Facade.PackageSymbol.SourceLineNumbers, BindStage.Normal);
399 399
400 this.Section.AddTuple(new WixBundlePayloadTuple(this.Facade.PackageTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId)) 400 this.Section.AddSymbol(new WixBundlePayloadSymbol(this.Facade.PackageSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId))
401 { 401 {
402 Name = cabinetName, 402 Name = cabinetName,
403 SourceFile = new IntermediateFieldPathValue { Path = payloadSourceFile }, 403 SourceFile = new IntermediateFieldPathValue { Path = payloadSourceFile },
@@ -416,7 +416,7 @@ namespace WixToolset.Core.Burn.Bundles
416 } 416 }
417 } 417 }
418 418
419 private long ImportExternalFileAsPayloadsAndReturnInstallSize(Dtf.Database db, WixBundlePayloadTuple packagePayload, bool longNamesInImage, bool compressed, ISet<string> payloadNames) 419 private long ImportExternalFileAsPayloadsAndReturnInstallSize(Dtf.Database db, WixBundlePayloadSymbol packagePayload, bool longNamesInImage, bool compressed, ISet<string> payloadNames)
420 { 420 {
421 long size = 0; 421 long size = 0;
422 422
@@ -473,9 +473,9 @@ namespace WixToolset.Core.Burn.Bundles
473 if (!payloadNames.Contains(name)) 473 if (!payloadNames.Contains(name))
474 { 474 {
475 var generatedId = Common.GenerateIdentifier("f", packagePayload.Id.Id, record.GetString(2)); 475 var generatedId = Common.GenerateIdentifier("f", packagePayload.Id.Id, record.GetString(2));
476 var payloadSourceFile = this.ResolveRelatedFile(packagePayload.SourceFile.Path, packagePayload.UnresolvedSourceFile, fileSourcePath, "File", this.Facade.PackageTuple.SourceLineNumbers, BindStage.Normal); 476 var payloadSourceFile = this.ResolveRelatedFile(packagePayload.SourceFile.Path, packagePayload.UnresolvedSourceFile, fileSourcePath, "File", this.Facade.PackageSymbol.SourceLineNumbers, BindStage.Normal);
477 477
478 this.Section.AddTuple(new WixBundlePayloadTuple(this.Facade.PackageTuple.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId)) 478 this.Section.AddSymbol(new WixBundlePayloadSymbol(this.Facade.PackageSymbol.SourceLineNumbers, new Identifier(AccessModifier.Private, generatedId))
479 { 479 {
480 Name = name, 480 Name = name,
481 SourceFile = new IntermediateFieldPathValue { Path = payloadSourceFile }, 481 SourceFile = new IntermediateFieldPathValue { Path = payloadSourceFile },
@@ -500,9 +500,9 @@ namespace WixToolset.Core.Burn.Bundles
500 return size; 500 return size;
501 } 501 }
502 502
503 private void AddMsiProperty(WixBundleMsiPackageTuple msiPackage, string name, string value) 503 private void AddMsiProperty(WixBundleMsiPackageSymbol msiPackage, string name, string value)
504 { 504 {
505 this.Section.AddTuple(new WixBundleMsiPropertyTuple(msiPackage.SourceLineNumbers, new Identifier(AccessModifier.Private, msiPackage.Id.Id, name)) 505 this.Section.AddSymbol(new WixBundleMsiPropertySymbol(msiPackage.SourceLineNumbers, new Identifier(AccessModifier.Private, msiPackage.Id.Id, name))
506 { 506 {
507 PackageRef = msiPackage.Id.Id, 507 PackageRef = msiPackage.Id.Id,
508 Name = name, 508 Name = name,
@@ -510,7 +510,7 @@ namespace WixToolset.Core.Burn.Bundles
510 }); 510 });
511 } 511 }
512 512
513 private void ImportDependencyProviders(WixBundleMsiPackageTuple msiPackage, Dtf.Database db) 513 private void ImportDependencyProviders(WixBundleMsiPackageSymbol msiPackage, Dtf.Database db)
514 { 514 {
515 if (db.Tables.Contains("WixDependencyProvider")) 515 if (db.Tables.Contains("WixDependencyProvider"))
516 { 516 {
@@ -529,12 +529,12 @@ namespace WixToolset.Core.Burn.Bundles
529 } 529 }
530 530
531 // Import the provider key and attributes. 531 // Import the provider key and attributes.
532 this.Section.AddTuple(new ProvidesDependencyTuple(msiPackage.SourceLineNumbers) 532 this.Section.AddSymbol(new ProvidesDependencySymbol(msiPackage.SourceLineNumbers)
533 { 533 {
534 PackageRef = msiPackage.Id.Id, 534 PackageRef = msiPackage.Id.Id,
535 Key = record.GetString(1), 535 Key = record.GetString(1),
536 Version = record.GetString(2) ?? msiPackage.ProductVersion, 536 Version = record.GetString(2) ?? msiPackage.ProductVersion,
537 DisplayName = record.GetString(3) ?? this.Facade.PackageTuple.DisplayName, 537 DisplayName = record.GetString(3) ?? this.Facade.PackageSymbol.DisplayName,
538 Attributes = record.GetInteger(4), 538 Attributes = record.GetInteger(4),
539 Imported = true 539 Imported = true
540 }); 540 });
diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessMspPackageCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessMspPackageCommand.cs
index 5acffe33..f528ce20 100644
--- a/src/WixToolset.Core.Burn/Bundles/ProcessMspPackageCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/ProcessMspPackageCommand.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core.Burn.Bundles
10 using System.Text; 10 using System.Text;
11 using System.Xml; 11 using System.Xml;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Extensibility.Services; 14 using WixToolset.Extensibility.Services;
15 using Dtf = WixToolset.Dtf.WindowsInstaller; 15 using Dtf = WixToolset.Dtf.WindowsInstaller;
16 16
@@ -22,18 +22,18 @@ namespace WixToolset.Core.Burn.Bundles
22 private const string PatchMetadataFormat = "SELECT `Value` FROM `MsiPatchMetadata` WHERE `Property` = '{0}'"; 22 private const string PatchMetadataFormat = "SELECT `Value` FROM `MsiPatchMetadata` WHERE `Property` = '{0}'";
23 private static readonly Encoding XmlOutputEncoding = new UTF8Encoding(false); 23 private static readonly Encoding XmlOutputEncoding = new UTF8Encoding(false);
24 24
25 public ProcessMspPackageCommand(IMessaging messaging, IntermediateSection section, PackageFacade facade, Dictionary<string, WixBundlePayloadTuple> payloadTuples) 25 public ProcessMspPackageCommand(IMessaging messaging, IntermediateSection section, PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
26 { 26 {
27 this.Messaging = messaging; 27 this.Messaging = messaging;
28 28
29 this.AuthoredPayloads = payloadTuples; 29 this.AuthoredPayloads = payloadSymbols;
30 this.Section = section; 30 this.Section = section;
31 this.Facade = facade; 31 this.Facade = facade;
32 } 32 }
33 33
34 public IMessaging Messaging { get; } 34 public IMessaging Messaging { get; }
35 35
36 public Dictionary<string, WixBundlePayloadTuple> AuthoredPayloads { private get; set; } 36 public Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { private get; set; }
37 37
38 public PackageFacade Facade { private get; set; } 38 public PackageFacade Facade { private get; set; }
39 39
@@ -44,9 +44,9 @@ namespace WixToolset.Core.Burn.Bundles
44 /// </summary> 44 /// </summary>
45 public void Execute() 45 public void Execute()
46 { 46 {
47 var packagePayload = this.AuthoredPayloads[this.Facade.PackageTuple.PayloadRef]; 47 var packagePayload = this.AuthoredPayloads[this.Facade.PackageSymbol.PayloadRef];
48 48
49 var mspPackage = (WixBundleMspPackageTuple)this.Facade.SpecificPackageTuple; 49 var mspPackage = (WixBundleMspPackageSymbol)this.Facade.SpecificPackageSymbol;
50 50
51 var sourcePath = packagePayload.SourceFile.Path; 51 var sourcePath = packagePayload.SourceFile.Path;
52 52
@@ -60,14 +60,14 @@ namespace WixToolset.Core.Burn.Bundles
60 60
61 using (var db = new Dtf.Database(sourcePath)) 61 using (var db = new Dtf.Database(sourcePath))
62 { 62 {
63 if (String.IsNullOrEmpty(this.Facade.PackageTuple.DisplayName)) 63 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.DisplayName))
64 { 64 {
65 this.Facade.PackageTuple.DisplayName = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "DisplayName"); 65 this.Facade.PackageSymbol.DisplayName = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "DisplayName");
66 } 66 }
67 67
68 if (String.IsNullOrEmpty(this.Facade.PackageTuple.Description)) 68 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.Description))
69 { 69 {
70 this.Facade.PackageTuple.Description = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "Description"); 70 this.Facade.PackageSymbol.Description = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "Description");
71 } 71 }
72 72
73 mspPackage.Manufacturer = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "ManufacturerName"); 73 mspPackage.Manufacturer = ProcessMspPackageCommand.GetPatchMetadataProperty(db, "ManufacturerName");
@@ -81,13 +81,13 @@ namespace WixToolset.Core.Burn.Bundles
81 return; 81 return;
82 } 82 }
83 83
84 if (String.IsNullOrEmpty(this.Facade.PackageTuple.CacheId)) 84 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
85 { 85 {
86 this.Facade.PackageTuple.CacheId = mspPackage.PatchCode; 86 this.Facade.PackageSymbol.CacheId = mspPackage.PatchCode;
87 } 87 }
88 } 88 }
89 89
90 private void ProcessPatchXml(WixBundlePayloadTuple packagePayload, WixBundleMspPackageTuple mspPackage, string sourcePath) 90 private void ProcessPatchXml(WixBundlePayloadSymbol packagePayload, WixBundleMspPackageSymbol mspPackage, string sourcePath)
91 { 91 {
92 var uniqueTargetCodes = new HashSet<string>(); 92 var uniqueTargetCodes = new HashSet<string>();
93 93
@@ -127,7 +127,7 @@ namespace WixToolset.Core.Burn.Bundles
127 127
128 if (uniqueTargetCodes.Add(targetCode)) 128 if (uniqueTargetCodes.Add(targetCode))
129 { 129 {
130 this.Section.AddTuple(new WixBundlePatchTargetCodeTuple(packagePayload.SourceLineNumbers) 130 this.Section.AddSymbol(new WixBundlePatchTargetCodeSymbol(packagePayload.SourceLineNumbers)
131 { 131 {
132 PackageRef = packagePayload.Id.Id, 132 PackageRef = packagePayload.Id.Id,
133 TargetCode = targetCode, 133 TargetCode = targetCode,
diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs
index 6a39f42f..af4ab3a8 100644
--- a/src/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/ProcessMsuPackageCommand.cs
@@ -5,33 +5,33 @@ namespace WixToolset.Core.Burn.Bundles
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
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 /// Processes the Msu packages to add properties and payloads from the Msu packages. 11 /// Processes the Msu packages to add properties and payloads from the Msu packages.
12 /// </summary> 12 /// </summary>
13 internal class ProcessMsuPackageCommand 13 internal class ProcessMsuPackageCommand
14 { 14 {
15 public ProcessMsuPackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadTuple> payloadTuples) 15 public ProcessMsuPackageCommand(PackageFacade facade, Dictionary<string, WixBundlePayloadSymbol> payloadSymbols)
16 { 16 {
17 this.AuthoredPayloads = payloadTuples; 17 this.AuthoredPayloads = payloadSymbols;
18 this.Facade = facade; 18 this.Facade = facade;
19 } 19 }
20 20
21 public Dictionary<string, WixBundlePayloadTuple> AuthoredPayloads { private get; set; } 21 public Dictionary<string, WixBundlePayloadSymbol> AuthoredPayloads { private get; set; }
22 22
23 public PackageFacade Facade { private get; set; } 23 public PackageFacade Facade { private get; set; }
24 24
25 public void Execute() 25 public void Execute()
26 { 26 {
27 var packagePayload = this.AuthoredPayloads[this.Facade.PackageTuple.PayloadRef]; 27 var packagePayload = this.AuthoredPayloads[this.Facade.PackageSymbol.PayloadRef];
28 28
29 if (String.IsNullOrEmpty(this.Facade.PackageTuple.CacheId)) 29 if (String.IsNullOrEmpty(this.Facade.PackageSymbol.CacheId))
30 { 30 {
31 this.Facade.PackageTuple.CacheId = packagePayload.Hash; 31 this.Facade.PackageSymbol.CacheId = packagePayload.Hash;
32 } 32 }
33 33
34 this.Facade.PackageTuple.PerMachine = YesNoDefaultType.Yes; // MSUs are always per-machine. 34 this.Facade.PackageSymbol.PerMachine = YesNoDefaultType.Yes; // MSUs are always per-machine.
35 } 35 }
36 } 36 }
37} 37}
diff --git a/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs b/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs
index 7f3a2501..475b04b8 100644
--- a/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/ProcessPayloadsCommand.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Core.Burn.Bundles
11 using System.Text; 11 using System.Text;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Burn; 13 using WixToolset.Data.Burn;
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Symbols;
15 using WixToolset.Extensibility.Data; 15 using WixToolset.Extensibility.Data;
16 using WixToolset.Extensibility.Services; 16 using WixToolset.Extensibility.Services;
17 17
@@ -19,7 +19,7 @@ namespace WixToolset.Core.Burn.Bundles
19 { 19 {
20 private static readonly Version EmptyVersion = new Version(0, 0, 0, 0); 20 private static readonly Version EmptyVersion = new Version(0, 0, 0, 0);
21 21
22 public ProcessPayloadsCommand(IWixToolsetServiceProvider serviceProvider, IBackendHelper backendHelper, IEnumerable<WixBundlePayloadTuple> payloads, PackagingType defaultPackaging, string layoutDirectory) 22 public ProcessPayloadsCommand(IWixToolsetServiceProvider serviceProvider, IBackendHelper backendHelper, IEnumerable<WixBundlePayloadSymbol> payloads, PackagingType defaultPackaging, string layoutDirectory)
23 { 23 {
24 this.Messaging = serviceProvider.GetService<IMessaging>(); 24 this.Messaging = serviceProvider.GetService<IMessaging>();
25 25
@@ -37,7 +37,7 @@ namespace WixToolset.Core.Burn.Bundles
37 37
38 private IBackendHelper BackendHelper { get; } 38 private IBackendHelper BackendHelper { get; }
39 39
40 private IEnumerable<WixBundlePayloadTuple> Payloads { get; } 40 private IEnumerable<WixBundlePayloadSymbol> Payloads { get; }
41 41
42 private PackagingType DefaultPackaging { get; } 42 private PackagingType DefaultPackaging { get; }
43 43
@@ -92,7 +92,7 @@ namespace WixToolset.Core.Burn.Bundles
92 this.TrackedFiles = trackedFiles; 92 this.TrackedFiles = trackedFiles;
93 } 93 }
94 94
95 private void UpdatePayloadPackagingType(WixBundlePayloadTuple payload) 95 private void UpdatePayloadPackagingType(WixBundlePayloadSymbol payload)
96 { 96 {
97 if (!payload.Packaging.HasValue || PackagingType.Unknown == payload.Packaging) 97 if (!payload.Packaging.HasValue || PackagingType.Unknown == payload.Packaging)
98 { 98 {
@@ -118,7 +118,7 @@ namespace WixToolset.Core.Burn.Bundles
118 } 118 }
119 } 119 }
120 120
121 private void UpdatePayloadFileInformation(WixBundlePayloadTuple payload, IntermediateFieldPathValue sourceFile) 121 private void UpdatePayloadFileInformation(WixBundlePayloadSymbol payload, IntermediateFieldPathValue sourceFile)
122 { 122 {
123 var fileInfo = new FileInfo(sourceFile.Path); 123 var fileInfo = new FileInfo(sourceFile.Path);
124 124
@@ -165,7 +165,7 @@ namespace WixToolset.Core.Burn.Bundles
165 } 165 }
166 } 166 }
167 167
168 private void UpdatePayloadVersionInformation(WixBundlePayloadTuple payload, IntermediateFieldPathValue sourceFile) 168 private void UpdatePayloadVersionInformation(WixBundlePayloadSymbol payload, IntermediateFieldPathValue sourceFile)
169 { 169 {
170 var versionInfo = FileVersionInfo.GetVersionInfo(sourceFile.Path); 170 var versionInfo = FileVersionInfo.GetVersionInfo(sourceFile.Path);
171 171
diff --git a/src/WixToolset.Core.Burn/Bundles/VerifyPayloadsWithCatalogCommand.cs b/src/WixToolset.Core.Burn/Bundles/VerifyPayloadsWithCatalogCommand.cs
index 2b17f985..e7c97ea7 100644
--- a/src/WixToolset.Core.Burn/Bundles/VerifyPayloadsWithCatalogCommand.cs
+++ b/src/WixToolset.Core.Burn/Bundles/VerifyPayloadsWithCatalogCommand.cs
@@ -9,12 +9,12 @@ namespace WixToolset.Core.Burn.Bundles
9 using System.Runtime.InteropServices; 9 using System.Runtime.InteropServices;
10 using System.Text; 10 using System.Text;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
14 14
15 internal class VerifyPayloadsWithCatalogCommand 15 internal class VerifyPayloadsWithCatalogCommand
16 { 16 {
17 public VerifyPayloadsWithCatalogCommand(IMessaging messaging, IEnumerable<WixBundleCatalogTuple> catalogs, IEnumerable<WixBundlePayloadTuple> payloads) 17 public VerifyPayloadsWithCatalogCommand(IMessaging messaging, IEnumerable<WixBundleCatalogSymbol> catalogs, IEnumerable<WixBundlePayloadSymbol> payloads)
18 { 18 {
19 this.Messaging = messaging; 19 this.Messaging = messaging;
20 this.Catalogs = catalogs; 20 this.Catalogs = catalogs;
@@ -23,9 +23,9 @@ namespace WixToolset.Core.Burn.Bundles
23 23
24 private IMessaging Messaging { get; } 24 private IMessaging Messaging { get; }
25 25
26 private IEnumerable<WixBundleCatalogTuple> Catalogs { get; } 26 private IEnumerable<WixBundleCatalogSymbol> Catalogs { get; }
27 27
28 private IEnumerable<WixBundlePayloadTuple> Payloads { get; } 28 private IEnumerable<WixBundlePayloadSymbol> Payloads { get; }
29 29
30 public void Execute() 30 public void Execute()
31 { 31 {
diff --git a/src/WixToolset.Core.Burn/ExtensibilityServices/BurnBackendHelper.cs b/src/WixToolset.Core.Burn/ExtensibilityServices/BurnBackendHelper.cs
index 10ac9931..7d3acff9 100644
--- a/src/WixToolset.Core.Burn/ExtensibilityServices/BurnBackendHelper.cs
+++ b/src/WixToolset.Core.Burn/ExtensibilityServices/BurnBackendHelper.cs
@@ -24,9 +24,9 @@ namespace WixToolset.Core.Burn.ExtensibilityServices
24 this.BootstrapperApplicationManifestData.AddXml(xml); 24 this.BootstrapperApplicationManifestData.AddXml(xml);
25 } 25 }
26 26
27 public void AddBootstrapperApplicationData(IntermediateTuple tuple, bool tupleIdIsIdAttribute = false) 27 public void AddBootstrapperApplicationData(IntermediateSymbol symbol, bool symbolIdIsIdAttribute = false)
28 { 28 {
29 this.BootstrapperApplicationManifestData.AddTuple(tuple, tupleIdIsIdAttribute, BurnCommon.BADataNamespace); 29 this.BootstrapperApplicationManifestData.AddSymbol(symbol, symbolIdIsIdAttribute, BurnCommon.BADataNamespace);
30 } 30 }
31 31
32 public void AddBundleExtensionData(string extensionId, string xml) 32 public void AddBundleExtensionData(string extensionId, string xml)
@@ -35,10 +35,10 @@ namespace WixToolset.Core.Burn.ExtensibilityServices
35 manifestData.AddXml(xml); 35 manifestData.AddXml(xml);
36 } 36 }
37 37
38 public void AddBundleExtensionData(string extensionId, IntermediateTuple tuple, bool tupleIdIsIdAttribute = false) 38 public void AddBundleExtensionData(string extensionId, IntermediateSymbol symbol, bool symbolIdIsIdAttribute = false)
39 { 39 {
40 var manifestData = this.GetBundleExtensionManifestData(extensionId); 40 var manifestData = this.GetBundleExtensionManifestData(extensionId);
41 manifestData.AddTuple(tuple, tupleIdIsIdAttribute, BurnCommon.BundleExtensionDataNamespace); 41 manifestData.AddSymbol(symbol, symbolIdIsIdAttribute, BurnCommon.BundleExtensionDataNamespace);
42 } 42 }
43 43
44 public void WriteBootstrapperApplicationData(XmlWriter writer) 44 public void WriteBootstrapperApplicationData(XmlWriter writer)
@@ -90,21 +90,21 @@ namespace WixToolset.Core.Burn.ExtensibilityServices
90 90
91 private StringBuilder Builder { get; } 91 private StringBuilder Builder { get; }
92 92
93 public void AddTuple(IntermediateTuple tuple, bool tupleIdIsIdAttribute, string ns) 93 public void AddSymbol(IntermediateSymbol symbol, bool symbolIdIsIdAttribute, string ns)
94 { 94 {
95 // There might be a more efficient way to do this, 95 // There might be a more efficient way to do this,
96 // but this is an easy way to ensure we're creating valid XML. 96 // but this is an easy way to ensure we're creating valid XML.
97 var sb = new StringBuilder(); 97 var sb = new StringBuilder();
98 using (var writer = XmlWriter.Create(sb, WriterSettings)) 98 using (var writer = XmlWriter.Create(sb, WriterSettings))
99 { 99 {
100 writer.WriteStartElement(tuple.Definition.Name, ns); 100 writer.WriteStartElement(symbol.Definition.Name, ns);
101 101
102 if (tupleIdIsIdAttribute && tuple.Id != null) 102 if (symbolIdIsIdAttribute && symbol.Id != null)
103 { 103 {
104 writer.WriteAttributeString("Id", tuple.Id.Id); 104 writer.WriteAttributeString("Id", symbol.Id.Id);
105 } 105 }
106 106
107 foreach (var field in tuple.Fields) 107 foreach (var field in symbol.Fields)
108 { 108 {
109 if (!field.IsNull()) 109 if (!field.IsNull())
110 { 110 {
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;
diff --git a/src/WixToolset.Core/Bind/DelayedField.cs b/src/WixToolset.Core/Bind/DelayedField.cs
index 7d0045e6..25641516 100644
--- a/src/WixToolset.Core/Bind/DelayedField.cs
+++ b/src/WixToolset.Core/Bind/DelayedField.cs
@@ -6,26 +6,26 @@ namespace WixToolset.Core.Bind
6 using WixToolset.Extensibility.Data; 6 using WixToolset.Extensibility.Data;
7 7
8 /// <summary> 8 /// <summary>
9 /// Structure used to hold a row and field that contain binder variables, which need to be resolved 9 /// Holds a symbol and field that contain binder variables, which need to be resolved
10 /// later, once the files have been resolved. 10 /// later, once the files have been resolved.
11 /// </summary> 11 /// </summary>
12 internal class DelayedField : IDelayedField 12 internal class DelayedField : IDelayedField
13 { 13 {
14 /// <summary> 14 /// <summary>
15 /// Basic constructor for struct 15 /// Creates a delayed field.
16 /// </summary> 16 /// </summary>
17 /// <param name="row">Row for the field.</param> 17 /// <param name="symbol">Symbol for the field.</param>
18 /// <param name="field">Field needing further resolution.</param> 18 /// <param name="field">Field needing further resolution.</param>
19 public DelayedField(IntermediateTuple row, IntermediateField field) 19 public DelayedField(IntermediateSymbol symbol, IntermediateField field)
20 { 20 {
21 this.Row = row; 21 this.Symbol = symbol;
22 this.Field = field; 22 this.Field = field;
23 } 23 }
24 24
25 /// <summary> 25 /// <summary>
26 /// The row containing the field. 26 /// The row containing the field.
27 /// </summary> 27 /// </summary>
28 public IntermediateTuple Row { get; } 28 public IntermediateSymbol Symbol { get; }
29 29
30 /// <summary> 30 /// <summary>
31 /// The field needing further resolving. 31 /// The field needing further resolving.
diff --git a/src/WixToolset.Core/Bind/FileFacade.cs b/src/WixToolset.Core/Bind/FileFacade.cs
index 511f4aab..075d3d34 100644
--- a/src/WixToolset.Core/Bind/FileFacade.cs
+++ b/src/WixToolset.Core/Bind/FileFacade.cs
@@ -5,25 +5,25 @@ namespace WixToolset.Core.Bind
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Tuples; 8 using WixToolset.Data.Symbols;
9 using WixToolset.Data.WindowsInstaller; 9 using WixToolset.Data.WindowsInstaller;
10 using WixToolset.Data.WindowsInstaller.Rows; 10 using WixToolset.Data.WindowsInstaller.Rows;
11 11
12 public class FileFacade 12 public class FileFacade
13 { 13 {
14 public FileFacade(FileTuple file, AssemblyTuple assembly) 14 public FileFacade(FileSymbol file, AssemblySymbol assembly)
15 { 15 {
16 this.FileTuple = file; 16 this.FileSymbol = file;
17 this.AssemblyTuple = assembly; 17 this.AssemblySymbol = assembly;
18 18
19 this.Identifier = file.Id; 19 this.Identifier = file.Id;
20 this.ComponentRef = file.ComponentRef; 20 this.ComponentRef = file.ComponentRef;
21 } 21 }
22 22
23 public FileFacade(bool fromModule, FileTuple file) 23 public FileFacade(bool fromModule, FileSymbol file)
24 { 24 {
25 this.FromModule = fromModule; 25 this.FromModule = fromModule;
26 this.FileTuple = file; 26 this.FileSymbol = file;
27 27
28 this.Identifier = file.Id; 28 this.Identifier = file.Id;
29 this.ComponentRef = file.ComponentRef; 29 this.ComponentRef = file.ComponentRef;
@@ -44,9 +44,9 @@ namespace WixToolset.Core.Bind
44 44
45 private FileRow FileRow { get; } 45 private FileRow FileRow { get; }
46 46
47 private FileTuple FileTuple { get; } 47 private FileSymbol FileSymbol { get; }
48 48
49 private AssemblyTuple AssemblyTuple { get; } 49 private AssemblySymbol AssemblySymbol { get; }
50 50
51 public string Id => this.Identifier.Id; 51 public string Id => this.Identifier.Id;
52 52
@@ -56,12 +56,12 @@ namespace WixToolset.Core.Bind
56 56
57 public int DiskId 57 public int DiskId
58 { 58 {
59 get => this.FileRow == null ? this.FileTuple.DiskId ?? 1 : this.FileRow.DiskId; 59 get => this.FileRow == null ? this.FileSymbol.DiskId ?? 1 : this.FileRow.DiskId;
60 set 60 set
61 { 61 {
62 if (this.FileRow == null) 62 if (this.FileRow == null)
63 { 63 {
64 this.FileTuple.DiskId = value; 64 this.FileSymbol.DiskId = value;
65 } 65 }
66 else 66 else
67 { 67 {
@@ -70,16 +70,16 @@ namespace WixToolset.Core.Bind
70 } 70 }
71 } 71 }
72 72
73 public string FileName => this.FileRow == null ? this.FileTuple.Name : this.FileRow.FileName; 73 public string FileName => this.FileRow == null ? this.FileSymbol.Name : this.FileRow.FileName;
74 74
75 public int FileSize 75 public int FileSize
76 { 76 {
77 get => this.FileRow == null ? this.FileTuple.FileSize : this.FileRow.FileSize; 77 get => this.FileRow == null ? this.FileSymbol.FileSize : this.FileRow.FileSize;
78 set 78 set
79 { 79 {
80 if (this.FileRow == null) 80 if (this.FileRow == null)
81 { 81 {
82 this.FileTuple.FileSize = value; 82 this.FileSymbol.FileSize = value;
83 } 83 }
84 else 84 else
85 { 85 {
@@ -90,12 +90,12 @@ namespace WixToolset.Core.Bind
90 90
91 public string Language 91 public string Language
92 { 92 {
93 get => this.FileRow == null ? this.FileTuple.Language : this.FileRow.Language; 93 get => this.FileRow == null ? this.FileSymbol.Language : this.FileRow.Language;
94 set 94 set
95 { 95 {
96 if (this.FileRow == null) 96 if (this.FileRow == null)
97 { 97 {
98 this.FileTuple.Language = value; 98 this.FileSymbol.Language = value;
99 } 99 }
100 else 100 else
101 { 101 {
@@ -104,16 +104,16 @@ namespace WixToolset.Core.Bind
104 } 104 }
105 } 105 }
106 106
107 public int? PatchGroup => this.FileRow == null ? this.FileTuple.PatchGroup : null; 107 public int? PatchGroup => this.FileRow == null ? this.FileSymbol.PatchGroup : null;
108 108
109 public int Sequence 109 public int Sequence
110 { 110 {
111 get => this.FileRow == null ? this.FileTuple.Sequence : this.FileRow.Sequence; 111 get => this.FileRow == null ? this.FileSymbol.Sequence : this.FileRow.Sequence;
112 set 112 set
113 { 113 {
114 if (this.FileRow == null) 114 if (this.FileRow == null)
115 { 115 {
116 this.FileTuple.Sequence = value; 116 this.FileSymbol.Sequence = value;
117 } 117 }
118 else 118 else
119 { 119 {
@@ -122,22 +122,22 @@ namespace WixToolset.Core.Bind
122 } 122 }
123 } 123 }
124 124
125 public SourceLineNumber SourceLineNumber => this.FileRow == null ? this.FileTuple.SourceLineNumbers : this.FileRow.SourceLineNumbers; 125 public SourceLineNumber SourceLineNumber => this.FileRow == null ? this.FileSymbol.SourceLineNumbers : this.FileRow.SourceLineNumbers;
126 126
127 public string SourcePath => this.FileRow == null ? this.FileTuple.Source.Path : this.FileRow.Source; 127 public string SourcePath => this.FileRow == null ? this.FileSymbol.Source.Path : this.FileRow.Source;
128 128
129 public bool Compressed => this.FileRow == null ? (this.FileTuple.Attributes & FileTupleAttributes.Compressed) == FileTupleAttributes.Compressed : (this.FileRow.Attributes & WindowsInstallerConstants.MsidbFileAttributesCompressed) == WindowsInstallerConstants.MsidbFileAttributesCompressed; 129 public bool Compressed => this.FileRow == null ? (this.FileSymbol.Attributes & FileSymbolAttributes.Compressed) == FileSymbolAttributes.Compressed : (this.FileRow.Attributes & WindowsInstallerConstants.MsidbFileAttributesCompressed) == WindowsInstallerConstants.MsidbFileAttributesCompressed;
130 130
131 public bool Uncompressed => this.FileRow == null ? (this.FileTuple.Attributes & FileTupleAttributes.Uncompressed) == FileTupleAttributes.Uncompressed : (this.FileRow.Attributes & WindowsInstallerConstants.MsidbFileAttributesNoncompressed) == WindowsInstallerConstants.MsidbFileAttributesNoncompressed; 131 public bool Uncompressed => this.FileRow == null ? (this.FileSymbol.Attributes & FileSymbolAttributes.Uncompressed) == FileSymbolAttributes.Uncompressed : (this.FileRow.Attributes & WindowsInstallerConstants.MsidbFileAttributesNoncompressed) == WindowsInstallerConstants.MsidbFileAttributesNoncompressed;
132 132
133 public string Version 133 public string Version
134 { 134 {
135 get => this.FileRow == null ? this.FileTuple.Version : this.FileRow.Version; 135 get => this.FileRow == null ? this.FileSymbol.Version : this.FileRow.Version;
136 set 136 set
137 { 137 {
138 if (this.FileRow == null) 138 if (this.FileRow == null)
139 { 139 {
140 this.FileTuple.Version = value; 140 this.FileSymbol.Version = value;
141 } 141 }
142 else 142 else
143 { 143 {
@@ -146,22 +146,22 @@ namespace WixToolset.Core.Bind
146 } 146 }
147 } 147 }
148 148
149 public AssemblyType? AssemblyType => this.FileRow == null ? this.AssemblyTuple?.Type : null; 149 public AssemblyType? AssemblyType => this.FileRow == null ? this.AssemblySymbol?.Type : null;
150 150
151 public string AssemblyApplicationFileRef => this.FileRow == null ? this.AssemblyTuple?.ApplicationFileRef : throw new NotImplementedException(); 151 public string AssemblyApplicationFileRef => this.FileRow == null ? this.AssemblySymbol?.ApplicationFileRef : throw new NotImplementedException();
152 152
153 public string AssemblyManifestFileRef => this.FileRow == null ? this.AssemblyTuple?.ManifestFileRef : throw new NotImplementedException(); 153 public string AssemblyManifestFileRef => this.FileRow == null ? this.AssemblySymbol?.ManifestFileRef : throw new NotImplementedException();
154 154
155 /// <summary> 155 /// <summary>
156 /// Gets the set of MsiAssemblyName rows created for this file. 156 /// Gets the set of MsiAssemblyName rows created for this file.
157 /// </summary> 157 /// </summary>
158 /// <value>RowCollection of MsiAssemblyName table.</value> 158 /// <value>RowCollection of MsiAssemblyName table.</value>
159 public List<MsiAssemblyNameTuple> AssemblyNames { get; set; } 159 public List<MsiAssemblyNameSymbol> AssemblyNames { get; set; }
160 160
161 /// <summary> 161 /// <summary>
162 /// Gets or sets the MsiFileHash row for this file. 162 /// Gets or sets the MsiFileHash row for this file.
163 /// </summary> 163 /// </summary>
164 public MsiFileHashTuple Hash { get; set; } 164 public MsiFileHashSymbol Hash { get; set; }
165 165
166 /// <summary> 166 /// <summary>
167 /// Allows direct access to the underlying FileRow as requried for patching. 167 /// Allows direct access to the underlying FileRow as requried for patching.
diff --git a/src/WixToolset.Core/Bind/FileResolver.cs b/src/WixToolset.Core/Bind/FileResolver.cs
index 6bc5a676..d11fcadc 100644
--- a/src/WixToolset.Core/Bind/FileResolver.cs
+++ b/src/WixToolset.Core/Bind/FileResolver.cs
@@ -41,13 +41,13 @@ namespace WixToolset.Core.Bind
41 41
42 private IEnumerable<ILibrarianExtension> LibrarianExtensions { get; } 42 private IEnumerable<ILibrarianExtension> LibrarianExtensions { get; }
43 43
44 public string Resolve(SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, string source) 44 public string Resolve(SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, string source)
45 { 45 {
46 var checkedPaths = new List<string>(); 46 var checkedPaths = new List<string>();
47 47
48 foreach (var extension in this.LibrarianExtensions) 48 foreach (var extension in this.LibrarianExtensions)
49 { 49 {
50 var resolved = extension.ResolveFile(sourceLineNumbers, tupleDefinition, source); 50 var resolved = extension.ResolveFile(sourceLineNumbers, symbolDefinition, source);
51 51
52 if (resolved?.CheckedPaths != null) 52 if (resolved?.CheckedPaths != null)
53 { 53 {
@@ -60,7 +60,7 @@ namespace WixToolset.Core.Bind
60 } 60 }
61 } 61 }
62 62
63 return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, BindStage.Normal, checkedPaths); 63 return this.MustResolveUsingBindPaths(source, symbolDefinition, sourceLineNumbers, BindStage.Normal, checkedPaths);
64 } 64 }
65 65
66 /// <summary> 66 /// <summary>
@@ -72,7 +72,7 @@ namespace WixToolset.Core.Bind
72 /// <param name="bindStage">The binding stage used to determine what collection of bind paths will be used</param> 72 /// <param name="bindStage">The binding stage used to determine what collection of bind paths will be used</param>
73 /// <param name="alreadyCheckedPaths">Optional collection of paths already checked.</param> 73 /// <param name="alreadyCheckedPaths">Optional collection of paths already checked.</param>
74 /// <returns>Should return a valid path for the stream to be imported.</returns> 74 /// <returns>Should return a valid path for the stream to be imported.</returns>
75 public string ResolveFile(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, IEnumerable<string> alreadyCheckedPaths = null) 75 public string ResolveFile(string source, IntermediateSymbolDefinition symbolDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, IEnumerable<string> alreadyCheckedPaths = null)
76 { 76 {
77 var checkedPaths = new List<string>(); 77 var checkedPaths = new List<string>();
78 78
@@ -83,7 +83,7 @@ namespace WixToolset.Core.Bind
83 83
84 foreach (var extension in this.ResolverExtensions) 84 foreach (var extension in this.ResolverExtensions)
85 { 85 {
86 var resolved = extension.ResolveFile(source, tupleDefinition, sourceLineNumbers, bindStage); 86 var resolved = extension.ResolveFile(source, symbolDefinition, sourceLineNumbers, bindStage);
87 87
88 if (resolved?.CheckedPaths != null) 88 if (resolved?.CheckedPaths != null)
89 { 89 {
@@ -96,10 +96,10 @@ namespace WixToolset.Core.Bind
96 } 96 }
97 } 97 }
98 98
99 return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, bindStage, checkedPaths); 99 return this.MustResolveUsingBindPaths(source, symbolDefinition, sourceLineNumbers, bindStage, checkedPaths);
100 } 100 }
101 101
102 private string MustResolveUsingBindPaths(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, List<string> checkedPaths) 102 private string MustResolveUsingBindPaths(string source, IntermediateSymbolDefinition symbolDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, List<string> checkedPaths)
103 { 103 {
104 string resolved = null; 104 string resolved = null;
105 105
@@ -180,7 +180,7 @@ namespace WixToolset.Core.Bind
180 180
181 if (null == resolved) 181 if (null == resolved)
182 { 182 {
183 throw new WixException(ErrorMessages.FileNotFound(sourceLineNumbers, source, tupleDefinition.Name, checkedPaths)); 183 throw new WixException(ErrorMessages.FileNotFound(sourceLineNumbers, source, symbolDefinition.Name, checkedPaths));
184 } 184 }
185 185
186 return resolved; 186 return resolved;
diff --git a/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
index be0e4578..a10b98dc 100644
--- a/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
+++ b/src/WixToolset.Core/Bind/ResolveDelayedFieldsCommand.cs
@@ -42,15 +42,15 @@ namespace WixToolset.Core.Bind
42 { 42 {
43 try 43 try
44 { 44 {
45 var propertyRow = delayedField.Row; 45 var propertySymbol = delayedField.Symbol;
46 46
47 // process properties first in case they refer to other binder variables 47 // process properties first in case they refer to other binder variables
48 if (delayedField.Row.Definition.Type == TupleDefinitionType.Property) 48 if (delayedField.Symbol.Definition.Type == SymbolDefinitionType.Property)
49 { 49 {
50 var value = ResolveDelayedVariables(propertyRow.SourceLineNumbers, delayedField.Field.AsString(), this.VariableCache); 50 var value = ResolveDelayedVariables(propertySymbol.SourceLineNumbers, delayedField.Field.AsString(), this.VariableCache);
51 51
52 // update the variable cache with the new value 52 // update the variable cache with the new value
53 var key = String.Concat("property.", propertyRow.AsString(0)); 53 var key = String.Concat("property.", propertySymbol.Id.Id);
54 this.VariableCache[key] = value; 54 this.VariableCache[key] = value;
55 55
56 // update the field data 56 // update the field data
@@ -103,7 +103,7 @@ namespace WixToolset.Core.Bind
103 { 103 {
104 try 104 try
105 { 105 {
106 var value = ResolveDelayedVariables(delayedField.Row.SourceLineNumbers, delayedField.Field.AsString(), this.VariableCache); 106 var value = ResolveDelayedVariables(delayedField.Symbol.SourceLineNumbers, delayedField.Field.AsString(), this.VariableCache);
107 delayedField.Field.Set(value); 107 delayedField.Field.Set(value);
108 } 108 }
109 catch (WixException we) 109 catch (WixException we)
diff --git a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
index af7e262a..629e5f28 100644
--- a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
+++ b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.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; 10 using WixToolset.Extensibility;
11 using WixToolset.Extensibility.Data; 11 using WixToolset.Extensibility.Data;
12 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
@@ -45,13 +45,13 @@ namespace WixToolset.Core.Bind
45 var fileResolver = new FileResolver(this.BindPaths, this.Extensions); 45 var fileResolver = new FileResolver(this.BindPaths, this.Extensions);
46 46
47 // Build the column lookup only when needed. 47 // Build the column lookup only when needed.
48 Dictionary<string, WixCustomTableColumnTuple> customColumnsById = null; 48 Dictionary<string, WixCustomTableColumnSymbol> customColumnsById = null;
49 49
50 foreach (var sections in this.Intermediate.Sections) 50 foreach (var sections in this.Intermediate.Sections)
51 { 51 {
52 foreach (var tuple in sections.Tuples) 52 foreach (var symbol in sections.Symbols)
53 { 53 {
54 foreach (var field in tuple.Fields) 54 foreach (var field in symbol.Fields)
55 { 55 {
56 if (field.IsNull()) 56 if (field.IsNull())
57 { 57 {
@@ -63,20 +63,20 @@ namespace WixToolset.Core.Bind
63 // Custom table cells require an extra look up to the column definition as the 63 // Custom table cells require an extra look up to the column definition as the
64 // cell's data type is always a string (because strings can store anything) but 64 // cell's data type is always a string (because strings can store anything) but
65 // the column definition may be more specific. 65 // the column definition may be more specific.
66 if (tuple.Definition.Type == TupleDefinitionType.WixCustomTableCell) 66 if (symbol.Definition.Type == SymbolDefinitionType.WixCustomTableCell)
67 { 67 {
68 // We only care about the Data in a CustomTable cell. 68 // We only care about the Data in a CustomTable cell.
69 if (field.Name != nameof(WixCustomTableCellTupleFields.Data)) 69 if (field.Name != nameof(WixCustomTableCellSymbolFields.Data))
70 { 70 {
71 continue; 71 continue;
72 } 72 }
73 73
74 if (customColumnsById == null) 74 if (customColumnsById == null)
75 { 75 {
76 customColumnsById = this.Intermediate.Sections.SelectMany(s => s.Tuples.OfType<WixCustomTableColumnTuple>()).ToDictionary(t => t.Id.Id); 76 customColumnsById = this.Intermediate.Sections.SelectMany(s => s.Symbols.OfType<WixCustomTableColumnSymbol>()).ToDictionary(t => t.Id.Id);
77 } 77 }
78 78
79 if (customColumnsById.TryGetValue(tuple.Fields[(int)WixCustomTableCellTupleFields.TableRef].AsString() + "/" + tuple.Fields[(int)WixCustomTableCellTupleFields.ColumnRef].AsString(), out var customColumn)) 79 if (customColumnsById.TryGetValue(symbol.Fields[(int)WixCustomTableCellSymbolFields.TableRef].AsString() + "/" + symbol.Fields[(int)WixCustomTableCellSymbolFields.ColumnRef].AsString(), out var customColumn))
80 { 80 {
81 fieldType = customColumn.Type; 81 fieldType = customColumn.Type;
82 } 82 }
@@ -93,7 +93,7 @@ namespace WixToolset.Core.Bind
93 var original = field.AsString(); 93 var original = field.AsString();
94 if (!String.IsNullOrEmpty(original)) 94 if (!String.IsNullOrEmpty(original))
95 { 95 {
96 var resolution = this.VariableResolver.ResolveVariables(tuple.SourceLineNumbers, original, !this.AllowUnresolvedVariables); 96 var resolution = this.VariableResolver.ResolveVariables(symbol.SourceLineNumbers, original, !this.AllowUnresolvedVariables);
97 if (resolution.UpdatedValue) 97 if (resolution.UpdatedValue)
98 { 98 {
99 field.Set(resolution.Value); 99 field.Set(resolution.Value);
@@ -101,7 +101,7 @@ namespace WixToolset.Core.Bind
101 101
102 if (resolution.DelayedResolve) 102 if (resolution.DelayedResolve)
103 { 103 {
104 delayedFields.Add(new DelayedField(tuple, field)); 104 delayedFields.Add(new DelayedField(symbol, field));
105 } 105 }
106 106
107 isDefault = resolution.IsDefault; 107 isDefault = resolution.IsDefault;
@@ -109,7 +109,7 @@ namespace WixToolset.Core.Bind
109 } 109 }
110 } 110 }
111 111
112 // Move to next tuple if we've hit an error resolving variables. 112 // Move to next symbol if we've hit an error resolving variables.
113 if (this.Messaging.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field. 113 if (this.Messaging.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field.
114 { 114 {
115 continue; 115 continue;
@@ -122,7 +122,7 @@ namespace WixToolset.Core.Bind
122 122
123#if TODO_PATCHING 123#if TODO_PATCHING
124 // Skip file resolution if the file is to be deleted. 124 // Skip file resolution if the file is to be deleted.
125 if (RowOperation.Delete == tuple.Operation) 125 if (RowOperation.Delete == symbol.Operation)
126 { 126 {
127 continue; 127 continue;
128 } 128 }
@@ -151,13 +151,13 @@ namespace WixToolset.Core.Bind
151#endif 151#endif
152 152
153 // resolve the path to the file 153 // resolve the path to the file
154 var value = fileResolver.ResolveFile(objectField.Path, tuple.Definition, tuple.SourceLineNumbers, BindStage.Normal); 154 var value = fileResolver.ResolveFile(objectField.Path, symbol.Definition, symbol.SourceLineNumbers, BindStage.Normal);
155 field.Set(value); 155 field.Set(value);
156 } 156 }
157 else if (!fileResolver.RebaseTarget && !fileResolver.RebaseUpdated) // Normal binding for Patch Scenario (normal patch, no re-basing logic) 157 else if (!fileResolver.RebaseTarget && !fileResolver.RebaseUpdated) // Normal binding for Patch Scenario (normal patch, no re-basing logic)
158 { 158 {
159 // resolve the path to the file 159 // resolve the path to the file
160 var value = fileResolver.ResolveFile(objectField.Path, tuple.Definition, tuple.SourceLineNumbers, BindStage.Normal); 160 var value = fileResolver.ResolveFile(objectField.Path, symbol.Definition, symbol.SourceLineNumbers, BindStage.Normal);
161 field.Set(value); 161 field.Set(value);
162 } 162 }
163#if TODO_PATCHING 163#if TODO_PATCHING
@@ -179,7 +179,7 @@ namespace WixToolset.Core.Bind
179 } 179 }
180 } 180 }
181 181
182 objectField.Data = fileResolver.ResolveFile(filePathToResolve, tuple.Definition.Name, tuple.SourceLineNumbers, BindStage.Updated); 182 objectField.Data = fileResolver.ResolveFile(filePathToResolve, symbol.Definition.Name, symbol.SourceLineNumbers, BindStage.Updated);
183 } 183 }
184#endif 184#endif
185 } 185 }
@@ -192,7 +192,7 @@ namespace WixToolset.Core.Bind
192#if TODO_PATCHING 192#if TODO_PATCHING
193 if (null != objectField.PreviousData) 193 if (null != objectField.PreviousData)
194 { 194 {
195 objectField.PreviousData = this.BindVariableResolver.ResolveVariables(tuple.SourceLineNumbers, objectField.PreviousData, false, out isDefault); 195 objectField.PreviousData = this.BindVariableResolver.ResolveVariables(symbol.SourceLineNumbers, objectField.PreviousData, false, out isDefault);
196 196
197 if (!Messaging.Instance.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field. 197 if (!Messaging.Instance.EncounteredError) // TODO: make this error handling more specific to just the failure to resolve variables in this field.
198 { 198 {
@@ -217,7 +217,7 @@ namespace WixToolset.Core.Bind
217 if (!fileResolver.RebaseTarget && !fileResolver.RebaseUpdated) 217 if (!fileResolver.RebaseTarget && !fileResolver.RebaseUpdated)
218 { 218 {
219 // resolve the path to the file 219 // resolve the path to the file
220 objectField.PreviousData = fileResolver.ResolveFile((string)objectField.PreviousData, tuple.Definition.Name, tuple.SourceLineNumbers, BindStage.Normal); 220 objectField.PreviousData = fileResolver.ResolveFile((string)objectField.PreviousData, symbol.Definition.Name, symbol.SourceLineNumbers, BindStage.Normal);
221 } 221 }
222 else 222 else
223 { 223 {
@@ -235,14 +235,14 @@ namespace WixToolset.Core.Bind
235 } 235 }
236 236
237 // resolve the path to the file 237 // resolve the path to the file
238 objectField.PreviousData = fileResolver.ResolveFile((string)objectField.PreviousData, tuple.Definition.Name, tuple.SourceLineNumbers, BindStage.Target); 238 objectField.PreviousData = fileResolver.ResolveFile((string)objectField.PreviousData, symbol.Definition.Name, symbol.SourceLineNumbers, BindStage.Target);
239 239
240 } 240 }
241 } 241 }
242 catch (WixFileNotFoundException) 242 catch (WixFileNotFoundException)
243 { 243 {
244 // display the error with source line information 244 // display the error with source line information
245 Messaging.Instance.Write(WixErrors.FileNotFound(tuple.SourceLineNumbers, (string)objectField.PreviousData)); 245 Messaging.Instance.Write(WixErrors.FileNotFound(symbol.SourceLineNumbers, (string)objectField.PreviousData));
246 } 246 }
247 } 247 }
248 } 248 }
diff --git a/src/WixToolset.Core/Binder.cs b/src/WixToolset.Core/Binder.cs
index a670714a..faaa3ec0 100644
--- a/src/WixToolset.Core/Binder.cs
+++ b/src/WixToolset.Core/Binder.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core
7 using System.Linq; 7 using System.Linq;
8 using System.Reflection; 8 using System.Reflection;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -35,7 +35,7 @@ namespace WixToolset.Core
35 35
36 // Bind. 36 // Bind.
37 // 37 //
38 this.WriteBuildInfoTuple(context.IntermediateRepresentation, context.OutputPath, context.PdbPath); 38 this.WriteBuildInfoSymbol(context.IntermediateRepresentation, context.OutputPath, context.PdbPath);
39 39
40 var bindResult = this.BackendBind(context); 40 var bindResult = this.BackendBind(context);
41 41
@@ -74,14 +74,14 @@ namespace WixToolset.Core
74 return null; 74 return null;
75 } 75 }
76 76
77 private void WriteBuildInfoTuple(Intermediate output, string outputFile, string outputPdbPath) 77 private void WriteBuildInfoSymbol(Intermediate output, string outputFile, string outputPdbPath)
78 { 78 {
79 var entrySection = output.Sections.First(s => s.Type != SectionType.Fragment); 79 var entrySection = output.Sections.First(s => s.Type != SectionType.Fragment);
80 80
81 var executingAssembly = Assembly.GetExecutingAssembly(); 81 var executingAssembly = Assembly.GetExecutingAssembly();
82 var fileVersion = FileVersionInfo.GetVersionInfo(executingAssembly.Location); 82 var fileVersion = FileVersionInfo.GetVersionInfo(executingAssembly.Location);
83 83
84 var buildInfoTuple = entrySection.AddTuple(new WixBuildInfoTuple() 84 var buildInfoSymbol = entrySection.AddSymbol(new WixBuildInfoSymbol()
85 { 85 {
86 WixVersion = fileVersion.FileVersion, 86 WixVersion = fileVersion.FileVersion,
87 WixOutputFile = outputFile, 87 WixOutputFile = outputFile,
@@ -89,7 +89,7 @@ namespace WixToolset.Core
89 89
90 if (!String.IsNullOrEmpty(outputPdbPath)) 90 if (!String.IsNullOrEmpty(outputPdbPath))
91 { 91 {
92 buildInfoTuple.WixPdbFile = outputPdbPath; 92 buildInfoSymbol.WixPdbFile = outputPdbPath;
93 } 93 }
94 } 94 }
95 } 95 }
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs
index 8602c514..04a55264 100644
--- a/src/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -88,7 +88,7 @@ namespace WixToolset.Core.CommandLine
88 88
89 var filterCultures = this.commandLine.CalculateFilterCultures(); 89 var filterCultures = this.commandLine.CalculateFilterCultures();
90 90
91 var creator = this.ServiceProvider.GetService<ITupleDefinitionCreator>(); 91 var creator = this.ServiceProvider.GetService<ISymbolDefinitionCreator>();
92 92
93 this.EvaluateSourceFiles(sourceFiles, creator, out var codeFiles, out var wixipl); 93 this.EvaluateSourceFiles(sourceFiles, creator, out var codeFiles, out var wixipl);
94 94
@@ -174,7 +174,7 @@ namespace WixToolset.Core.CommandLine
174 return this.commandLine.TryParseArgument(argument, parser); 174 return this.commandLine.TryParseArgument(argument, parser);
175 } 175 }
176 176
177 private void EvaluateSourceFiles(IEnumerable<SourceFile> sourceFiles, ITupleDefinitionCreator creator, out List<SourceFile> codeFiles, out Intermediate wixipl) 177 private void EvaluateSourceFiles(IEnumerable<SourceFile> sourceFiles, ISymbolDefinitionCreator creator, out List<SourceFile> codeFiles, out Intermediate wixipl)
178 { 178 {
179 codeFiles = new List<SourceFile>(); 179 codeFiles = new List<SourceFile>();
180 180
@@ -278,7 +278,7 @@ namespace WixToolset.Core.CommandLine
278 return library; 278 return library;
279 } 279 }
280 280
281 private Intermediate LinkPhase(IEnumerable<Intermediate> intermediates, IEnumerable<string> libraryFiles, ITupleDefinitionCreator creator, CancellationToken cancellationToken) 281 private Intermediate LinkPhase(IEnumerable<Intermediate> intermediates, IEnumerable<string> libraryFiles, ISymbolDefinitionCreator creator, CancellationToken cancellationToken)
282 { 282 {
283 var libraries = this.LoadLibraries(libraryFiles, creator); 283 var libraries = this.LoadLibraries(libraryFiles, creator);
284 284
@@ -292,7 +292,7 @@ namespace WixToolset.Core.CommandLine
292 context.ExtensionData = this.ExtensionManager.GetServices<IExtensionData>(); 292 context.ExtensionData = this.ExtensionManager.GetServices<IExtensionData>();
293 context.ExpectedOutputType = this.OutputType; 293 context.ExpectedOutputType = this.OutputType;
294 context.Intermediates = intermediates.Concat(libraries).ToList(); 294 context.Intermediates = intermediates.Concat(libraries).ToList();
295 context.TupleDefinitionCreator = creator; 295 context.SymbolDefinitionCreator = creator;
296 context.CancellationToken = cancellationToken; 296 context.CancellationToken = cancellationToken;
297 297
298 var linker = this.ServiceProvider.GetService<ILinker>(); 298 var linker = this.ServiceProvider.GetService<ILinker>();
@@ -382,7 +382,7 @@ namespace WixToolset.Core.CommandLine
382 } 382 }
383 } 383 }
384 384
385 private IEnumerable<Intermediate> LoadLibraries(IEnumerable<string> libraryFiles, ITupleDefinitionCreator creator) 385 private IEnumerable<Intermediate> LoadLibraries(IEnumerable<string> libraryFiles, ISymbolDefinitionCreator creator)
386 { 386 {
387 try 387 try
388 { 388 {
diff --git a/src/WixToolset.Core/Compiler.cs b/src/WixToolset.Core/Compiler.cs
index 56f6322a..e598f540 100644
--- a/src/WixToolset.Core/Compiler.cs
+++ b/src/WixToolset.Core/Compiler.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Core
12 using System.Text.RegularExpressions; 12 using System.Text.RegularExpressions;
13 using System.Xml.Linq; 13 using System.Xml.Linq;
14 using WixToolset.Data; 14 using WixToolset.Data;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using WixToolset.Data.WindowsInstaller; 16 using WixToolset.Data.WindowsInstaller;
17 using WixToolset.Extensibility; 17 using WixToolset.Extensibility;
18 using WixToolset.Extensibility.Data; 18 using WixToolset.Extensibility.Data;
@@ -252,16 +252,16 @@ namespace WixToolset.Core
252 { 252 {
253 foreach (var section in target.Sections) 253 foreach (var section in target.Sections)
254 { 254 {
255 foreach (var tuple in section.Tuples) 255 foreach (var symbol in section.Symbols)
256 { 256 {
257 foreach (var field in tuple.Fields) 257 foreach (var field in symbol.Fields)
258 { 258 {
259 if (field?.Type == IntermediateFieldType.String) 259 if (field?.Type == IntermediateFieldType.String)
260 { 260 {
261 var data = field.AsString(); 261 var data = field.AsString();
262 if (!String.IsNullOrEmpty(data)) 262 if (!String.IsNullOrEmpty(data))
263 { 263 {
264 var resolved = this.componentIdPlaceholdersResolver.ResolveVariables(tuple.SourceLineNumbers, data, errorOnUnknown: false); 264 var resolved = this.componentIdPlaceholdersResolver.ResolveVariables(symbol.SourceLineNumbers, data, errorOnUnknown: false);
265 if (resolved.UpdatedValue) 265 if (resolved.UpdatedValue)
266 { 266 {
267 field.Set(resolved.Value); 267 field.Set(resolved.Value);
@@ -332,7 +332,7 @@ namespace WixToolset.Core
332 this.Core.Write(ErrorMessages.SearchPropertyNotUppercase(sourceLineNumbers, "Property", "Id", propertyId.Id)); 332 this.Core.Write(ErrorMessages.SearchPropertyNotUppercase(sourceLineNumbers, "Property", "Id", propertyId.Id));
333 } 333 }
334 334
335 this.Core.AddTuple(new AppSearchTuple(sourceLineNumbers, new Identifier(propertyId.Access, propertyId.Id, signature)) 335 this.Core.AddSymbol(new AppSearchSymbol(sourceLineNumbers, new Identifier(propertyId.Access, propertyId.Id, signature))
336 { 336 {
337 PropertyRef = propertyId.Id, 337 PropertyRef = propertyId.Id,
338 SignatureRef = signature 338 SignatureRef = signature
@@ -377,7 +377,7 @@ namespace WixToolset.Core
377 { 377 {
378 var section = this.Core.ActiveSection; 378 var section = this.Core.ActiveSection;
379 379
380 // Add the tuple to a separate section if requested. 380 // Add the symbol to a separate section if requested.
381 if (fragment) 381 if (fragment)
382 { 382 {
383 var id = String.Concat(this.Core.ActiveSection.Id, ".", propertyId.Id); 383 var id = String.Concat(this.Core.ActiveSection.Id, ".", propertyId.Id);
@@ -385,24 +385,24 @@ namespace WixToolset.Core
385 section = this.Core.CreateSection(id, SectionType.Fragment, this.Core.ActiveSection.Codepage, this.Context.CompilationId); 385 section = this.Core.CreateSection(id, SectionType.Fragment, this.Core.ActiveSection.Codepage, this.Context.CompilationId);
386 386
387 // Reference the property in the active section. 387 // Reference the property in the active section.
388 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Property, propertyId.Id); 388 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, propertyId.Id);
389 } 389 }
390 390
391 // Allow tuple to exist with no value so that PropertyRefs can be made for *Search elements 391 // Allow symbol to exist with no value so that PropertyRefs can be made for *Search elements
392 // the linker will remove these tuples before the final output is created. 392 // the linker will remove these symbols before the final output is created.
393 section.AddTuple(new PropertyTuple(sourceLineNumbers, propertyId) 393 section.AddSymbol(new PropertySymbol(sourceLineNumbers, propertyId)
394 { 394 {
395 Value = value, 395 Value = value,
396 }); 396 });
397 397
398 if (admin || hidden || secure) 398 if (admin || hidden || secure)
399 { 399 {
400 this.AddWixPropertyTuple(sourceLineNumbers, propertyId, admin, secure, hidden, section); 400 this.AddWixPropertySymbol(sourceLineNumbers, propertyId, admin, secure, hidden, section);
401 } 401 }
402 } 402 }
403 } 403 }
404 404
405 private void AddWixPropertyTuple(SourceLineNumber sourceLineNumbers, Identifier property, bool admin, bool secure, bool hidden, IntermediateSection section = null) 405 private void AddWixPropertySymbol(SourceLineNumber sourceLineNumbers, Identifier property, bool admin, bool secure, bool hidden, IntermediateSection section = null)
406 { 406 {
407 if (secure && property.Id != property.Id.ToUpperInvariant()) 407 if (secure && property.Id != property.Id.ToUpperInvariant())
408 { 408 {
@@ -416,7 +416,7 @@ namespace WixToolset.Core
416 this.Core.EnsureTable(sourceLineNumbers, WindowsInstallerTableDefinitions.Property); // Property table is always required when using WixProperty table. 416 this.Core.EnsureTable(sourceLineNumbers, WindowsInstallerTableDefinitions.Property); // Property table is always required when using WixProperty table.
417 } 417 }
418 418
419 section.AddTuple(new WixPropertyTuple(sourceLineNumbers) 419 section.AddSymbol(new WixPropertySymbol(sourceLineNumbers)
420 { 420 {
421 PropertyRef = property.Id, 421 PropertyRef = property.Id,
422 Admin = admin, 422 Admin = admin,
@@ -552,7 +552,7 @@ namespace WixToolset.Core
552 552
553 if (!this.Core.EncounteredError) 553 if (!this.Core.EncounteredError)
554 { 554 {
555 this.Core.AddTuple(new AppIdTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, appId)) 555 this.Core.AddSymbol(new AppIdSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, appId))
556 { 556 {
557 AppId = appId, 557 AppId = appId,
558 RemoteServerName = remoteServerName, 558 RemoteServerName = remoteServerName,
@@ -650,7 +650,7 @@ namespace WixToolset.Core
650 650
651 if (!this.Core.EncounteredError) 651 if (!this.Core.EncounteredError)
652 { 652 {
653 this.Core.AddTuple(new MsiAssemblyNameTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, componentId, id)) 653 this.Core.AddSymbol(new MsiAssemblyNameSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, componentId, id))
654 { 654 {
655 ComponentRef = componentId, 655 ComponentRef = componentId,
656 Name = id, 656 Name = id,
@@ -737,14 +737,14 @@ namespace WixToolset.Core
737 737
738 if (!this.Core.EncounteredError) 738 if (!this.Core.EncounteredError)
739 { 739 {
740 var tuple = this.Core.AddTuple(new BinaryTuple(sourceLineNumbers, id) 740 var symbol = this.Core.AddSymbol(new BinarySymbol(sourceLineNumbers, id)
741 { 741 {
742 Data = new IntermediateFieldPathValue { Path = sourceFile } 742 Data = new IntermediateFieldPathValue { Path = sourceFile }
743 }); 743 });
744 744
745 if (YesNoType.Yes == suppressModularization) 745 if (YesNoType.Yes == suppressModularization)
746 { 746 {
747 this.Core.AddTuple(new WixSuppressModularizationTuple(sourceLineNumbers, id)); 747 this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
748 } 748 }
749 } 749 }
750 750
@@ -814,7 +814,7 @@ namespace WixToolset.Core
814 814
815 if (!this.Core.EncounteredError) 815 if (!this.Core.EncounteredError)
816 { 816 {
817 this.Core.AddTuple(new IconTuple(sourceLineNumbers, id) 817 this.Core.AddSymbol(new IconSymbol(sourceLineNumbers, id)
818 { 818 {
819 Data = new IntermediateFieldPathValue { Path = sourceFile }, 819 Data = new IntermediateFieldPathValue { Path = sourceFile },
820 }); 820 });
@@ -840,7 +840,7 @@ namespace WixToolset.Core
840 { 840 {
841 case "Property": 841 case "Property":
842 property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 842 property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
843 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Property, property); 843 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, property);
844 break; 844 break;
845 default: 845 default:
846 this.Core.UnexpectedAttribute(node, attrib); 846 this.Core.UnexpectedAttribute(node, attrib);
@@ -936,7 +936,7 @@ namespace WixToolset.Core
936 936
937 if (!this.Core.EncounteredError) 937 if (!this.Core.EncounteredError)
938 { 938 {
939 this.Core.AddTuple(new WixInstanceTransformsTuple(sourceLineNumbers, id) 939 this.Core.AddSymbol(new WixInstanceTransformsSymbol(sourceLineNumbers, id)
940 { 940 {
941 PropertyId = propertyId, 941 PropertyId = propertyId,
942 ProductCode = productCode, 942 ProductCode = productCode,
@@ -973,7 +973,7 @@ namespace WixToolset.Core
973 break; 973 break;
974 case "Feature": 974 case "Feature":
975 feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 975 feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
976 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Feature, feature); 976 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, feature);
977 break; 977 break;
978 case "Qualifier": 978 case "Qualifier":
979 qualifier = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 979 qualifier = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -1003,7 +1003,7 @@ namespace WixToolset.Core
1003 1003
1004 if (!this.Core.EncounteredError) 1004 if (!this.Core.EncounteredError)
1005 { 1005 {
1006 this.Core.AddTuple(new PublishComponentTuple(sourceLineNumbers) 1006 this.Core.AddSymbol(new PublishComponentSymbol(sourceLineNumbers)
1007 { 1007 {
1008 ComponentId = id, 1008 ComponentId = id,
1009 Qualifier = qualifier, 1009 Qualifier = qualifier,
@@ -1187,7 +1187,7 @@ namespace WixToolset.Core
1187 1187
1188 if (!String.IsNullOrEmpty(localFileServer)) 1188 if (!String.IsNullOrEmpty(localFileServer))
1189 { 1189 {
1190 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, localFileServer); 1190 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, localFileServer);
1191 } 1191 }
1192 1192
1193 // Local variables used strictly for child node processing. 1193 // Local variables used strictly for child node processing.
@@ -1260,7 +1260,7 @@ namespace WixToolset.Core
1260 { 1260 {
1261 foreach (var context in contexts) 1261 foreach (var context in contexts)
1262 { 1262 {
1263 var tuple = this.Core.AddTuple(new ClassTuple(sourceLineNumbers) 1263 var symbol = this.Core.AddSymbol(new ClassSymbol(sourceLineNumbers)
1264 { 1264 {
1265 CLSID = classId, 1265 CLSID = classId,
1266 Context = context, 1266 Context = context,
@@ -1276,19 +1276,19 @@ namespace WixToolset.Core
1276 1276
1277 if (null != appId) 1277 if (null != appId)
1278 { 1278 {
1279 tuple.AppIdRef = appId; 1279 symbol.AppIdRef = appId;
1280 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.AppId, appId); 1280 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.AppId, appId);
1281 } 1281 }
1282 1282
1283 if (null != icon) 1283 if (null != icon)
1284 { 1284 {
1285 tuple.IconRef = icon; 1285 symbol.IconRef = icon;
1286 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Icon, icon); 1286 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Icon, icon);
1287 } 1287 }
1288 1288
1289 if (CompilerConstants.IntegerNotSet != iconIndex) 1289 if (CompilerConstants.IntegerNotSet != iconIndex)
1290 { 1290 {
1291 tuple.IconIndex = iconIndex; 1291 symbol.IconIndex = iconIndex;
1292 } 1292 }
1293 } 1293 }
1294 } 1294 }
@@ -1369,7 +1369,7 @@ namespace WixToolset.Core
1369 1369
1370 if (null != icon) // ClassId default icon 1370 if (null != icon) // ClassId default icon
1371 { 1371 {
1372 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, icon); 1372 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, icon);
1373 1373
1374 icon = String.Format(CultureInfo.InvariantCulture, "\"[#{0}]\"", icon); 1374 icon = String.Format(CultureInfo.InvariantCulture, "\"[#{0}]\"", icon);
1375 1375
@@ -1649,7 +1649,7 @@ namespace WixToolset.Core
1649 string maximum = null; 1649 string maximum = null;
1650 string minimum = null; 1650 string minimum = null;
1651 var excludeLanguages = false; 1651 var excludeLanguages = false;
1652 var maxInclusive = false; 1652 var maxInclusive = false;
1653 var minInclusive = true; 1653 var minInclusive = true;
1654 1654
1655 foreach (var attrib in node.Attributes()) 1655 foreach (var attrib in node.Attributes())
@@ -1699,7 +1699,7 @@ namespace WixToolset.Core
1699 1699
1700 if (!this.Core.EncounteredError) 1700 if (!this.Core.EncounteredError)
1701 { 1701 {
1702 this.Core.AddTuple(new UpgradeTuple(sourceLineNumbers) 1702 this.Core.AddSymbol(new UpgradeSymbol(sourceLineNumbers)
1703 { 1703 {
1704 UpgradeCode = upgradeCode, 1704 UpgradeCode = upgradeCode,
1705 VersionMin = minimum, 1705 VersionMin = minimum,
@@ -1850,7 +1850,7 @@ namespace WixToolset.Core
1850 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 1850 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
1851 } 1851 }
1852 oneChild = true; 1852 oneChild = true;
1853 var newId = this.ParseSimpleRefElement(child, TupleDefinitions.Signature); // FileSearch signatures override parent signatures 1853 var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures
1854 id = new Identifier(AccessModifier.Private, newId); 1854 id = new Identifier(AccessModifier.Private, newId);
1855 signature = null; 1855 signature = null;
1856 break; 1856 break;
@@ -1867,7 +1867,7 @@ namespace WixToolset.Core
1867 1867
1868 if (!this.Core.EncounteredError) 1868 if (!this.Core.EncounteredError)
1869 { 1869 {
1870 this.Core.AddTuple(new RegLocatorTuple(sourceLineNumbers, id) 1870 this.Core.AddSymbol(new RegLocatorSymbol(sourceLineNumbers, id)
1871 { 1871 {
1872 Root = root.Value, 1872 Root = root.Value,
1873 Key = key, 1873 Key = key,
@@ -1898,7 +1898,7 @@ namespace WixToolset.Core
1898 { 1898 {
1899 case "Id": 1899 case "Id":
1900 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1900 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1901 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.RegLocator, id); 1901 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.RegLocator, id);
1902 break; 1902 break;
1903 default: 1903 default:
1904 this.Core.UnexpectedAttribute(node, attrib); 1904 this.Core.UnexpectedAttribute(node, attrib);
@@ -2085,7 +2085,7 @@ namespace WixToolset.Core
2085 2085
2086 if (!this.Core.EncounteredError) 2086 if (!this.Core.EncounteredError)
2087 { 2087 {
2088 this.Core.AddTuple(new CCPSearchTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, signature))); 2088 this.Core.AddSymbol(new CCPSearchSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, signature)));
2089 } 2089 }
2090 } 2090 }
2091 2091
@@ -2351,10 +2351,10 @@ namespace WixToolset.Core
2351 encounteredODBCDataSource = true; 2351 encounteredODBCDataSource = true;
2352 break; 2352 break;
2353 case "ODBCDriver": 2353 case "ODBCDriver":
2354 this.ParseODBCDriverOrTranslator(child, id.Id, null, TupleDefinitionType.ODBCDriver); 2354 this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCDriver);
2355 break; 2355 break;
2356 case "ODBCTranslator": 2356 case "ODBCTranslator":
2357 this.ParseODBCDriverOrTranslator(child, id.Id, null, TupleDefinitionType.ODBCTranslator); 2357 this.ParseODBCDriverOrTranslator(child, id.Id, null, SymbolDefinitionType.ODBCTranslator);
2358 break; 2358 break;
2359 case "ProgId": 2359 case "ProgId":
2360 var foundExtension = false; 2360 var foundExtension = false;
@@ -2480,7 +2480,7 @@ namespace WixToolset.Core
2480 } 2480 }
2481 2481
2482 // if there isn't an @Id attribute value, replace the placeholder with the id of the keypath. 2482 // if there isn't an @Id attribute value, replace the placeholder with the id of the keypath.
2483 // either an explicit KeyPath="yes" attribute must be specified or requirements for 2483 // either an explicit KeyPath="yes" attribute must be specified or requirements for
2484 // generatable guid must be met. 2484 // generatable guid must be met.
2485 if (componentIdPlaceholderWixVariable == id.Id) 2485 if (componentIdPlaceholderWixVariable == id.Id)
2486 { 2486 {
@@ -2505,7 +2505,7 @@ namespace WixToolset.Core
2505 // finally add the Component table row 2505 // finally add the Component table row
2506 if (!this.Core.EncounteredError) 2506 if (!this.Core.EncounteredError)
2507 { 2507 {
2508 this.Core.AddTuple(new ComponentTuple(sourceLineNumbers, id) 2508 this.Core.AddSymbol(new ComponentSymbol(sourceLineNumbers, id)
2509 { 2509 {
2510 ComponentId = guid, 2510 ComponentId = guid,
2511 DirectoryRef = directoryId, 2511 DirectoryRef = directoryId,
@@ -2525,7 +2525,7 @@ namespace WixToolset.Core
2525 2525
2526 if (multiInstance) 2526 if (multiInstance)
2527 { 2527 {
2528 this.Core.AddTuple(new WixInstanceComponentTuple(sourceLineNumbers, id) 2528 this.Core.AddSymbol(new WixInstanceComponentSymbol(sourceLineNumbers, id)
2529 { 2529 {
2530 ComponentRef = id.Id, 2530 ComponentRef = id.Id,
2531 }); 2531 });
@@ -2533,7 +2533,7 @@ namespace WixToolset.Core
2533 2533
2534 if (0 < symbols.Count) 2534 if (0 < symbols.Count)
2535 { 2535 {
2536 this.Core.AddTuple(new WixDeltaPatchSymbolPathsTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, SymbolPathType.Component, id.Id)) 2536 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, SymbolPathType.Component, id.Id))
2537 { 2537 {
2538 SymbolType = SymbolPathType.Component, 2538 SymbolType = SymbolPathType.Component,
2539 SymbolId = id.Id, 2539 SymbolId = id.Id,
@@ -2544,7 +2544,7 @@ namespace WixToolset.Core
2544 // Complus 2544 // Complus
2545 if (CompilerConstants.IntegerNotSet != comPlusBits) 2545 if (CompilerConstants.IntegerNotSet != comPlusBits)
2546 { 2546 {
2547 this.Core.AddTuple(new ComplusTuple(sourceLineNumbers) 2547 this.Core.AddSymbol(new ComplusSymbol(sourceLineNumbers)
2548 { 2548 {
2549 ComponentRef = id.Id, 2549 ComponentRef = id.Id,
2550 ExpType = comPlusBits, 2550 ExpType = comPlusBits,
@@ -2643,7 +2643,7 @@ namespace WixToolset.Core
2643 2643
2644 if (!this.Core.EncounteredError) 2644 if (!this.Core.EncounteredError)
2645 { 2645 {
2646 this.Core.AddTuple(new WixComponentGroupTuple(sourceLineNumbers, id)); 2646 this.Core.AddSymbol(new WixComponentGroupSymbol(sourceLineNumbers, id));
2647 2647
2648 // Add this componentGroup and its parent in WixGroup. 2648 // Add this componentGroup and its parent in WixGroup.
2649 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.ComponentGroup, id.Id); 2649 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.ComponentGroup, id.Id);
@@ -2673,7 +2673,7 @@ namespace WixToolset.Core
2673 { 2673 {
2674 case "Id": 2674 case "Id":
2675 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2675 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2676 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixComponentGroup, id); 2676 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixComponentGroup, id);
2677 break; 2677 break;
2678 case "Primary": 2678 case "Primary":
2679 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 2679 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -2722,7 +2722,7 @@ namespace WixToolset.Core
2722 { 2722 {
2723 case "Id": 2723 case "Id":
2724 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2724 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2725 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Component, id); 2725 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, id);
2726 break; 2726 break;
2727 case "Primary": 2727 case "Primary":
2728 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 2728 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -2846,7 +2846,7 @@ namespace WixToolset.Core
2846 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 2846 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
2847 } 2847 }
2848 oneChild = true; 2848 oneChild = true;
2849 var newId = this.ParseSimpleRefElement(child, TupleDefinitions.Signature); // FileSearch signatures override parent signatures 2849 var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures
2850 id = new Identifier(AccessModifier.Private, newId); 2850 id = new Identifier(AccessModifier.Private, newId);
2851 signature = null; 2851 signature = null;
2852 break; 2852 break;
@@ -2863,7 +2863,7 @@ namespace WixToolset.Core
2863 2863
2864 if (!this.Core.EncounteredError) 2864 if (!this.Core.EncounteredError)
2865 { 2865 {
2866 this.Core.AddTuple(new CompLocatorTuple(sourceLineNumbers, id) 2866 this.Core.AddSymbol(new CompLocatorSymbol(sourceLineNumbers, id)
2867 { 2867 {
2868 SignatureRef = id.Id, 2868 SignatureRef = id.Id,
2869 ComponentId = componentId, 2869 ComponentId = componentId,
@@ -2934,7 +2934,7 @@ namespace WixToolset.Core
2934 2934
2935 if (!this.Core.EncounteredError) 2935 if (!this.Core.EncounteredError)
2936 { 2936 {
2937 this.Core.AddTuple(new CreateFolderTuple(sourceLineNumbers) 2937 this.Core.AddSymbol(new CreateFolderSymbol(sourceLineNumbers)
2938 { 2938 {
2939 DirectoryRef = directoryId, 2939 DirectoryRef = directoryId,
2940 ComponentRef = componentId, 2940 ComponentRef = componentId,
@@ -2994,7 +2994,7 @@ namespace WixToolset.Core
2994 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 2994 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
2995 } 2995 }
2996 fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2996 fileId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2997 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, fileId); 2997 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, fileId);
2998 break; 2998 break;
2999 case "SourceDirectory": 2999 case "SourceDirectory":
3000 sourceDirectory = this.Core.CreateDirectoryReferenceFromInlineSyntax(sourceLineNumbers, attrib, null); 3000 sourceDirectory = this.Core.CreateDirectoryReferenceFromInlineSyntax(sourceLineNumbers, attrib, null);
@@ -3059,7 +3059,7 @@ namespace WixToolset.Core
3059 3059
3060 if (!this.Core.EncounteredError) 3060 if (!this.Core.EncounteredError)
3061 { 3061 {
3062 this.Core.AddTuple(new MoveFileTuple(sourceLineNumbers, id) 3062 this.Core.AddSymbol(new MoveFileSymbol(sourceLineNumbers, id)
3063 { 3063 {
3064 ComponentRef = componentId, 3064 ComponentRef = componentId,
3065 SourceName = sourceName, 3065 SourceName = sourceName,
@@ -3104,7 +3104,7 @@ namespace WixToolset.Core
3104 3104
3105 if (!this.Core.EncounteredError) 3105 if (!this.Core.EncounteredError)
3106 { 3106 {
3107 this.Core.AddTuple(new DuplicateFileTuple(sourceLineNumbers, id) 3107 this.Core.AddSymbol(new DuplicateFileSymbol(sourceLineNumbers, id)
3108 { 3108 {
3109 ComponentRef = componentId, 3109 ComponentRef = componentId,
3110 FileRef = fileId, 3110 FileRef = fileId,
@@ -3158,7 +3158,7 @@ namespace WixToolset.Core
3158 } 3158 }
3159 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3159 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3160 sourceType = CustomActionSourceType.Binary; 3160 sourceType = CustomActionSourceType.Binary;
3161 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, source); // add a reference to the appropriate Binary 3161 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, source); // add a reference to the appropriate Binary
3162 break; 3162 break;
3163 case "Directory": 3163 case "Directory":
3164 if (null != source) 3164 if (null != source)
@@ -3185,12 +3185,12 @@ namespace WixToolset.Core
3185 sourceType = CustomActionSourceType.File; 3185 sourceType = CustomActionSourceType.File;
3186 targetType = CustomActionTargetType.TextData; 3186 targetType = CustomActionTargetType.TextData;
3187 3187
3188 // The target can be either a formatted error string or a literal 3188 // The target can be either a formatted error string or a literal
3189 // error number. Try to convert to error number to determine whether 3189 // error number. Try to convert to error number to determine whether
3190 // to add a reference. No need to look at the value. 3190 // to add a reference. No need to look at the value.
3191 if (Int32.TryParse(target, out var ignored)) 3191 if (Int32.TryParse(target, out var ignored))
3192 { 3192 {
3193 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Error, target); 3193 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Error, target);
3194 } 3194 }
3195 break; 3195 break;
3196 case "ExeCommand": 3196 case "ExeCommand":
@@ -3238,7 +3238,7 @@ namespace WixToolset.Core
3238 } 3238 }
3239 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3239 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3240 sourceType = CustomActionSourceType.File; 3240 sourceType = CustomActionSourceType.File;
3241 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, source); // add a reference to the appropriate File 3241 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, source); // add a reference to the appropriate File
3242 break; 3242 break;
3243 case "HideTarget": 3243 case "HideTarget":
3244 hidden = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 3244 hidden = YesNoType.Yes == this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -3459,7 +3459,7 @@ namespace WixToolset.Core
3459 3459
3460 if (!this.Core.EncounteredError) 3460 if (!this.Core.EncounteredError)
3461 { 3461 {
3462 this.Core.AddTuple(new CustomActionTuple(sourceLineNumbers, id) 3462 this.Core.AddSymbol(new CustomActionSymbol(sourceLineNumbers, id)
3463 { 3463 {
3464 ExecutionType = executionType, 3464 ExecutionType = executionType,
3465 Source = source, 3465 Source = source,
@@ -3478,7 +3478,7 @@ namespace WixToolset.Core
3478 3478
3479 if (YesNoType.Yes == suppressModularization) 3479 if (YesNoType.Yes == suppressModularization)
3480 { 3480 {
3481 this.Core.AddTuple(new WixSuppressModularizationTuple(sourceLineNumbers, id)); 3481 this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
3482 } 3482 }
3483 } 3483 }
3484 } 3484 }
@@ -3487,9 +3487,9 @@ namespace WixToolset.Core
3487 /// Parses a simple reference element. 3487 /// Parses a simple reference element.
3488 /// </summary> 3488 /// </summary>
3489 /// <param name="node">Element to parse.</param> 3489 /// <param name="node">Element to parse.</param>
3490 /// <param name="tupleDefinition">Tuple which contains the target of the simple reference.</param> 3490 /// <param name="symbolDefinition">Symbol which contains the target of the simple reference.</param>
3491 /// <returns>Id of the referenced element.</returns> 3491 /// <returns>Id of the referenced element.</returns>
3492 private string ParseSimpleRefElement(XElement node, IntermediateTupleDefinition tupleDefinition) 3492 private string ParseSimpleRefElement(XElement node, IntermediateSymbolDefinition symbolDefinition)
3493 { 3493 {
3494 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 3494 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
3495 string id = null; 3495 string id = null;
@@ -3502,7 +3502,7 @@ namespace WixToolset.Core
3502 { 3502 {
3503 case "Id": 3503 case "Id":
3504 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3504 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3505 this.Core.CreateSimpleReference(sourceLineNumbers, tupleDefinition.Name, id); 3505 this.Core.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, id);
3506 break; 3506 break;
3507 default: 3507 default:
3508 this.Core.UnexpectedAttribute(node, attrib); 3508 this.Core.UnexpectedAttribute(node, attrib);
@@ -3565,7 +3565,7 @@ namespace WixToolset.Core
3565 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id")); 3565 this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Id"));
3566 } 3566 }
3567 3567
3568 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.MsiPatchSequence, primaryKeys); 3568 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.MsiPatchSequence, primaryKeys);
3569 3569
3570 this.Core.ParseForExtensionElements(node); 3570 this.Core.ParseForExtensionElements(node);
3571 3571
@@ -3628,7 +3628,7 @@ namespace WixToolset.Core
3628 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 3628 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
3629 string tableId = null; 3629 string tableId = null;
3630 var unreal = false; 3630 var unreal = false;
3631 var columns = new List<WixCustomTableColumnTuple>(); 3631 var columns = new List<WixCustomTableColumnSymbol>();
3632 3632
3633 foreach (var attrib in node.Attributes()) 3633 foreach (var attrib in node.Attributes())
3634 { 3634 {
@@ -3699,9 +3699,9 @@ namespace WixToolset.Core
3699 3699
3700 if (!this.Core.EncounteredError) 3700 if (!this.Core.EncounteredError)
3701 { 3701 {
3702 var columnNames = String.Join(new string(WixCustomTableTuple.ColumnNamesSeparator, 1), columns.Select(c => c.Name)); 3702 var columnNames = String.Join(new string(WixCustomTableSymbol.ColumnNamesSeparator, 1), columns.Select(c => c.Name));
3703 3703
3704 this.Core.AddTuple(new WixCustomTableTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, tableId)) 3704 this.Core.AddSymbol(new WixCustomTableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, tableId))
3705 { 3705 {
3706 ColumnNames = columnNames, 3706 ColumnNames = columnNames,
3707 Unreal = unreal, 3707 Unreal = unreal,
@@ -3716,7 +3716,7 @@ namespace WixToolset.Core
3716 /// <param name="child">Element to parse.</param> 3716 /// <param name="child">Element to parse.</param>
3717 /// <param name="childSourceLineNumbers">Element's SourceLineNumbers.</param> 3717 /// <param name="childSourceLineNumbers">Element's SourceLineNumbers.</param>
3718 /// <param name="tableId">Table Id.</param> 3718 /// <param name="tableId">Table Id.</param>
3719 private WixCustomTableColumnTuple ParseColumnElement(XElement child, SourceLineNumber childSourceLineNumbers, string tableId) 3719 private WixCustomTableColumnSymbol ParseColumnElement(XElement child, SourceLineNumber childSourceLineNumbers, string tableId)
3720 { 3720 {
3721 string columnName = null; 3721 string columnName = null;
3722 IntermediateFieldType? columnType = null; 3722 IntermediateFieldType? columnType = null;
@@ -3968,12 +3968,12 @@ namespace WixToolset.Core
3968 return null; 3968 return null;
3969 } 3969 }
3970 3970
3971 var attributes = primaryKey ? WixCustomTableColumnTupleAttributes.PrimaryKey : WixCustomTableColumnTupleAttributes.None; 3971 var attributes = primaryKey ? WixCustomTableColumnSymbolAttributes.PrimaryKey : WixCustomTableColumnSymbolAttributes.None;
3972 attributes |= localizable ? WixCustomTableColumnTupleAttributes.Localizable : WixCustomTableColumnTupleAttributes.None; 3972 attributes |= localizable ? WixCustomTableColumnSymbolAttributes.Localizable : WixCustomTableColumnSymbolAttributes.None;
3973 attributes |= nullable ? WixCustomTableColumnTupleAttributes.Nullable : WixCustomTableColumnTupleAttributes.None; 3973 attributes |= nullable ? WixCustomTableColumnSymbolAttributes.Nullable : WixCustomTableColumnSymbolAttributes.None;
3974 attributes |= columnUnreal ? WixCustomTableColumnTupleAttributes.Unreal : WixCustomTableColumnTupleAttributes.None; 3974 attributes |= columnUnreal ? WixCustomTableColumnSymbolAttributes.Unreal : WixCustomTableColumnSymbolAttributes.None;
3975 3975
3976 var column = this.Core.AddTuple(new WixCustomTableColumnTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, columnName)) 3976 var column = this.Core.AddSymbol(new WixCustomTableColumnSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, columnName))
3977 { 3977 {
3978 TableRef = tableId, 3978 TableRef = tableId,
3979 Name = columnName, 3979 Name = columnName,
@@ -4038,7 +4038,7 @@ namespace WixToolset.Core
4038 4038
4039 if (!this.Core.EncounteredError) 4039 if (!this.Core.EncounteredError)
4040 { 4040 {
4041 this.Core.AddTuple(new WixCustomTableCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, rowId, columnName)) 4041 this.Core.AddSymbol(new WixCustomTableCellSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Private, tableId, rowId, columnName))
4042 { 4042 {
4043 RowId = rowId, 4043 RowId = rowId,
4044 ColumnRef = columnName, 4044 ColumnRef = columnName,
@@ -4055,7 +4055,7 @@ namespace WixToolset.Core
4055 4055
4056 if (!this.Core.EncounteredError) 4056 if (!this.Core.EncounteredError)
4057 { 4057 {
4058 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixCustomTable, tableId); 4058 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixCustomTable, tableId);
4059 } 4059 }
4060 } 4060 }
4061 4061
@@ -4153,7 +4153,7 @@ namespace WixToolset.Core
4153 if (inlineSyntax[0].EndsWith(":")) 4153 if (inlineSyntax[0].EndsWith(":"))
4154 { 4154 {
4155 parentId = inlineSyntax[0].TrimEnd(':'); 4155 parentId = inlineSyntax[0].TrimEnd(':');
4156 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Directory, parentId); 4156 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, parentId);
4157 4157
4158 pathStartsAt = 1; 4158 pathStartsAt = 1;
4159 } 4159 }
@@ -4298,7 +4298,7 @@ namespace WixToolset.Core
4298 4298
4299 if (!this.Core.EncounteredError) 4299 if (!this.Core.EncounteredError)
4300 { 4300 {
4301 this.Core.AddTuple(new DirectoryTuple(sourceLineNumbers, id) 4301 this.Core.AddSymbol(new DirectorySymbol(sourceLineNumbers, id)
4302 { 4302 {
4303 ParentDirectoryRef = parentId, 4303 ParentDirectoryRef = parentId,
4304 Name = name, 4304 Name = name,
@@ -4310,7 +4310,7 @@ namespace WixToolset.Core
4310 4310
4311 if (null != symbols) 4311 if (null != symbols)
4312 { 4312 {
4313 this.Core.AddTuple(new WixDeltaPatchSymbolPathsTuple(sourceLineNumbers, id) 4313 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers, id)
4314 { 4314 {
4315 SymbolType = SymbolPathType.Directory, 4315 SymbolType = SymbolPathType.Directory,
4316 SymbolId = id.Id, 4316 SymbolId = id.Id,
@@ -4340,7 +4340,7 @@ namespace WixToolset.Core
4340 { 4340 {
4341 case "Id": 4341 case "Id":
4342 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 4342 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
4343 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Directory, id); 4343 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, id);
4344 break; 4344 break;
4345 case "DiskId": 4345 case "DiskId":
4346 diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); 4346 diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue);
@@ -4487,7 +4487,7 @@ namespace WixToolset.Core
4487 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 4487 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
4488 } 4488 }
4489 oneChild = true; 4489 oneChild = true;
4490 signature = this.ParseSimpleRefElement(child, TupleDefinitions.Signature); 4490 signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature);
4491 break; 4491 break;
4492 default: 4492 default:
4493 this.Core.UnexpectedElement(node, child); 4493 this.Core.UnexpectedElement(node, child);
@@ -4532,7 +4532,7 @@ namespace WixToolset.Core
4532 signature = id.Id; 4532 signature = id.Id;
4533 } 4533 }
4534 4534
4535 var tuple = this.Core.AddTuple(new DrLocatorTuple(sourceLineNumbers, new Identifier(access, rowId, parentSignature, path)) 4535 var symbol = this.Core.AddSymbol(new DrLocatorSymbol(sourceLineNumbers, new Identifier(access, rowId, parentSignature, path))
4536 { 4536 {
4537 SignatureRef = rowId, 4537 SignatureRef = rowId,
4538 Parent = parentSignature, 4538 Parent = parentSignature,
@@ -4541,7 +4541,7 @@ namespace WixToolset.Core
4541 4541
4542 if (CompilerConstants.IntegerNotSet != depth) 4542 if (CompilerConstants.IntegerNotSet != depth)
4543 { 4543 {
4544 tuple.Depth = depth; 4544 symbol.Depth = depth;
4545 } 4545 }
4546 } 4546 }
4547 4547
@@ -4645,7 +4645,7 @@ namespace WixToolset.Core
4645 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 4645 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
4646 } 4646 }
4647 oneChild = true; 4647 oneChild = true;
4648 signature = this.ParseSimpleRefElement(child, TupleDefinitions.Signature); 4648 signature = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature);
4649 break; 4649 break;
4650 default: 4650 default:
4651 this.Core.UnexpectedElement(node, child); 4651 this.Core.UnexpectedElement(node, child);
@@ -4659,7 +4659,7 @@ namespace WixToolset.Core
4659 } 4659 }
4660 4660
4661 4661
4662 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.DrLocator, id.Id, parentSignature, path); 4662 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.DrLocator, id.Id, parentSignature, path);
4663 4663
4664 return signature; 4664 return signature;
4665 } 4665 }
@@ -4670,7 +4670,7 @@ namespace WixToolset.Core
4670 /// <param name="node">Element to parse.</param> 4670 /// <param name="node">Element to parse.</param>
4671 /// <param name="parentType">The type of parent.</param> 4671 /// <param name="parentType">The type of parent.</param>
4672 /// <param name="parentId">Optional identifer for parent feature.</param> 4672 /// <param name="parentId">Optional identifer for parent feature.</param>
4673 /// <param name="lastDisplay">Display value for last feature used to get the features to display in the same order as specified 4673 /// <param name="lastDisplay">Display value for last feature used to get the features to display in the same order as specified
4674 /// in the source code.</param> 4674 /// in the source code.</param>
4675 [SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] 4675 [SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
4676 private void ParseFeatureElement(XElement node, ComplexReferenceParentType parentType, string parentId, ref int lastDisplay) 4676 private void ParseFeatureElement(XElement node, ComplexReferenceParentType parentType, string parentId, ref int lastDisplay)
@@ -4899,7 +4899,7 @@ namespace WixToolset.Core
4899 4899
4900 if (!this.Core.EncounteredError) 4900 if (!this.Core.EncounteredError)
4901 { 4901 {
4902 this.Core.AddTuple(new FeatureTuple(sourceLineNumbers, id) 4902 this.Core.AddSymbol(new FeatureSymbol(sourceLineNumbers, id)
4903 { 4903 {
4904 ParentFeatureRef = null, // this field is set in the linker 4904 ParentFeatureRef = null, // this field is set in the linker
4905 Title = title, 4905 Title = title,
@@ -4941,7 +4941,7 @@ namespace WixToolset.Core
4941 { 4941 {
4942 case "Id": 4942 case "Id":
4943 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 4943 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
4944 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Feature, id); 4944 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, id);
4945 break; 4945 break;
4946 case "IgnoreParent": 4946 case "IgnoreParent":
4947 ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 4947 ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -5091,7 +5091,7 @@ namespace WixToolset.Core
5091 5091
5092 if (!this.Core.EncounteredError) 5092 if (!this.Core.EncounteredError)
5093 { 5093 {
5094 this.Core.AddTuple(new WixFeatureGroupTuple(sourceLineNumbers, id)); 5094 this.Core.AddSymbol(new WixFeatureGroupSymbol(sourceLineNumbers, id));
5095 5095
5096 //Add this FeatureGroup and its parent in WixGroup. 5096 //Add this FeatureGroup and its parent in WixGroup.
5097 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.FeatureGroup, id.Id); 5097 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.FeatureGroup, id.Id);
@@ -5121,7 +5121,7 @@ namespace WixToolset.Core
5121 { 5121 {
5122 case "Id": 5122 case "Id":
5123 id = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 5123 id = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
5124 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixFeatureGroup, id); 5124 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixFeatureGroup, id);
5125 break; 5125 break;
5126 case "IgnoreParent": 5126 case "IgnoreParent":
5127 ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 5127 ignoreParent = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -5290,7 +5290,7 @@ namespace WixToolset.Core
5290 5290
5291 if (!this.Core.EncounteredError) 5291 if (!this.Core.EncounteredError)
5292 { 5292 {
5293 this.Core.AddTuple(new EnvironmentTuple(sourceLineNumbers, id) 5293 this.Core.AddSymbol(new EnvironmentSymbol(sourceLineNumbers, id)
5294 { 5294 {
5295 Name = name, 5295 Name = name,
5296 Value = value, 5296 Value = value,
@@ -5347,7 +5347,7 @@ namespace WixToolset.Core
5347 5347
5348 if (!this.Core.EncounteredError) 5348 if (!this.Core.EncounteredError)
5349 { 5349 {
5350 this.Core.AddTuple(new ErrorTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, id)) 5350 this.Core.AddSymbol(new ErrorSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, id))
5351 { 5351 {
5352 Message = message 5352 Message = message
5353 }); 5353 });
@@ -5436,7 +5436,7 @@ namespace WixToolset.Core
5436 { 5436 {
5437 if (!this.Core.EncounteredError) 5437 if (!this.Core.EncounteredError)
5438 { 5438 {
5439 this.Core.AddTuple(new ExtensionTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, extension, componentId)) 5439 this.Core.AddSymbol(new ExtensionSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, extension, componentId))
5440 { 5440 {
5441 Extension = extension, 5441 Extension = extension,
5442 ComponentRef = componentId, 5442 ComponentRef = componentId,
@@ -5542,11 +5542,11 @@ namespace WixToolset.Core
5542 break; 5542 break;
5543 case "AssemblyApplication": 5543 case "AssemblyApplication":
5544 assemblyApplication = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 5544 assemblyApplication = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
5545 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, assemblyApplication); 5545 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyApplication);
5546 break; 5546 break;
5547 case "AssemblyManifest": 5547 case "AssemblyManifest":
5548 assemblyManifest = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 5548 assemblyManifest = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
5549 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, assemblyManifest); 5549 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, assemblyManifest);
5550 break; 5550 break;
5551 case "BindPath": 5551 case "BindPath":
5552 bindPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty); 5552 bindPath = this.Core.GetAttributeValue(sourceLineNumbers, attrib, EmptyRule.CanBeEmpty);
@@ -5560,7 +5560,7 @@ namespace WixToolset.Core
5560 break; 5560 break;
5561 case "CompanionFile": 5561 case "CompanionFile":
5562 companionFile = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 5562 companionFile = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
5563 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, companionFile); 5563 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, companionFile);
5564 break; 5564 break;
5565 case "Compressed": 5565 case "Compressed":
5566 var compressedValue = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib); 5566 var compressedValue = this.Core.GetAttributeYesNoDefaultValue(sourceLineNumbers, attrib);
@@ -5781,10 +5781,10 @@ namespace WixToolset.Core
5781 this.ParseRangeElement(child, ref ignoreOffsets, ref ignoreLengths); 5781 this.ParseRangeElement(child, ref ignoreOffsets, ref ignoreLengths);
5782 break; 5782 break;
5783 case "ODBCDriver": 5783 case "ODBCDriver":
5784 this.ParseODBCDriverOrTranslator(child, componentId, id.Id, TupleDefinitionType.ODBCDriver); 5784 this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCDriver);
5785 break; 5785 break;
5786 case "ODBCTranslator": 5786 case "ODBCTranslator":
5787 this.ParseODBCDriverOrTranslator(child, componentId, id.Id, TupleDefinitionType.ODBCTranslator); 5787 this.ParseODBCDriverOrTranslator(child, componentId, id.Id, SymbolDefinitionType.ODBCTranslator);
5788 break; 5788 break;
5789 case "Permission": 5789 case "Permission":
5790 this.ParsePermissionElement(child, id.Id, "File"); 5790 this.ParsePermissionElement(child, id.Id, "File");
@@ -5848,17 +5848,17 @@ namespace WixToolset.Core
5848 source = null == name ? Path.Combine(source, shortName) : Path.Combine(source, name); 5848 source = null == name ? Path.Combine(source, shortName) : Path.Combine(source, name);
5849 } 5849 }
5850 5850
5851 var attributes = FileTupleAttributes.None; 5851 var attributes = FileSymbolAttributes.None;
5852 attributes |= readOnly ? FileTupleAttributes.ReadOnly : 0; 5852 attributes |= readOnly ? FileSymbolAttributes.ReadOnly : 0;
5853 attributes |= hidden ? FileTupleAttributes.Hidden : 0; 5853 attributes |= hidden ? FileSymbolAttributes.Hidden : 0;
5854 attributes |= system ? FileTupleAttributes.System : 0; 5854 attributes |= system ? FileSymbolAttributes.System : 0;
5855 attributes |= vital ? FileTupleAttributes.Vital : 0; 5855 attributes |= vital ? FileSymbolAttributes.Vital : 0;
5856 attributes |= checksum ? FileTupleAttributes.Checksum : 0; 5856 attributes |= checksum ? FileSymbolAttributes.Checksum : 0;
5857 attributes |= compressed.HasValue && compressed == true ? FileTupleAttributes.Compressed : 0; 5857 attributes |= compressed.HasValue && compressed == true ? FileSymbolAttributes.Compressed : 0;
5858 attributes |= compressed.HasValue && compressed == false ? FileTupleAttributes.Uncompressed : 0; 5858 attributes |= compressed.HasValue && compressed == false ? FileSymbolAttributes.Uncompressed : 0;
5859 attributes |= generatedShortFileName ? FileTupleAttributes.GeneratedShortFileName : 0; 5859 attributes |= generatedShortFileName ? FileSymbolAttributes.GeneratedShortFileName : 0;
5860 5860
5861 this.Core.AddTuple(new FileTuple(sourceLineNumbers, id) 5861 this.Core.AddSymbol(new FileSymbol(sourceLineNumbers, id)
5862 { 5862 {
5863 ComponentRef = componentId, 5863 ComponentRef = componentId,
5864 Name = name, 5864 Name = name,
@@ -5897,7 +5897,7 @@ namespace WixToolset.Core
5897 5897
5898 if (AssemblyType.NotAnAssembly != assemblyType) 5898 if (AssemblyType.NotAnAssembly != assemblyType)
5899 { 5899 {
5900 this.Core.AddTuple(new AssemblyTuple(sourceLineNumbers, id) 5900 this.Core.AddSymbol(new AssemblySymbol(sourceLineNumbers, id)
5901 { 5901 {
5902 ComponentRef = componentId, 5902 ComponentRef = componentId,
5903 FeatureRef = Guid.Empty.ToString("B"), 5903 FeatureRef = Guid.Empty.ToString("B"),
@@ -5911,7 +5911,7 @@ namespace WixToolset.Core
5911 5911
5912 if (CompilerConstants.IntegerNotSet != diskId) 5912 if (CompilerConstants.IntegerNotSet != diskId)
5913 { 5913 {
5914 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat)); 5914 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat));
5915 } 5915 }
5916 5916
5917 // If this component does not have a companion file this file is a possible keypath. 5917 // If this component does not have a companion file this file is a possible keypath.
@@ -6052,7 +6052,7 @@ namespace WixToolset.Core
6052 6052
6053 if (!this.Core.EncounteredError) 6053 if (!this.Core.EncounteredError)
6054 { 6054 {
6055 var tuple = this.Core.AddTuple(new SignatureTuple(sourceLineNumbers, id) 6055 var symbol = this.Core.AddSymbol(new SignatureSymbol(sourceLineNumbers, id)
6056 { 6056 {
6057 FileName = name ?? shortName, 6057 FileName = name ?? shortName,
6058 MinVersion = minVersion, 6058 MinVersion = minVersion,
@@ -6062,22 +6062,22 @@ namespace WixToolset.Core
6062 6062
6063 if (CompilerConstants.IntegerNotSet != minSize) 6063 if (CompilerConstants.IntegerNotSet != minSize)
6064 { 6064 {
6065 tuple.MinSize = minSize; 6065 symbol.MinSize = minSize;
6066 } 6066 }
6067 6067
6068 if (CompilerConstants.IntegerNotSet != maxSize) 6068 if (CompilerConstants.IntegerNotSet != maxSize)
6069 { 6069 {
6070 tuple.MaxSize = maxSize; 6070 symbol.MaxSize = maxSize;
6071 } 6071 }
6072 6072
6073 if (CompilerConstants.IntegerNotSet != minDate) 6073 if (CompilerConstants.IntegerNotSet != minDate)
6074 { 6074 {
6075 tuple.MinDate = minDate; 6075 symbol.MinDate = minDate;
6076 } 6076 }
6077 6077
6078 if (CompilerConstants.IntegerNotSet != maxDate) 6078 if (CompilerConstants.IntegerNotSet != maxDate)
6079 { 6079 {
6080 tuple.MaxDate = maxDate; 6080 symbol.MaxDate = maxDate;
6081 } 6081 }
6082 6082
6083 // Create a DrLocator row to associate the file with a directory 6083 // Create a DrLocator row to associate the file with a directory
@@ -6088,7 +6088,7 @@ namespace WixToolset.Core
6088 { 6088 {
6089 // Creates the DrLocator row for the directory search while 6089 // Creates the DrLocator row for the directory search while
6090 // the parent DirectorySearch creates the file locator row. 6090 // the parent DirectorySearch creates the file locator row.
6091 this.Core.AddTuple(new DrLocatorTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, parentSignature, id.Id, String.Empty)) 6091 this.Core.AddSymbol(new DrLocatorSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, parentSignature, id.Id, String.Empty))
6092 { 6092 {
6093 SignatureRef = parentSignature, 6093 SignatureRef = parentSignature,
6094 Parent = id.Id 6094 Parent = id.Id
@@ -6096,7 +6096,7 @@ namespace WixToolset.Core
6096 } 6096 }
6097 else 6097 else
6098 { 6098 {
6099 this.Core.AddTuple(new DrLocatorTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, id.Id, parentSignature, String.Empty)) 6099 this.Core.AddSymbol(new DrLocatorSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, id.Id, parentSignature, String.Empty))
6100 { 6100 {
6101 SignatureRef = id.Id, 6101 SignatureRef = id.Id,
6102 Parent = parentSignature 6102 Parent = parentSignature
@@ -6191,7 +6191,7 @@ namespace WixToolset.Core
6191 this.ParseBundleExtensionElement(child); 6191 this.ParseBundleExtensionElement(child);
6192 break; 6192 break;
6193 case "BundleExtensionRef": 6193 case "BundleExtensionRef":
6194 this.ParseSimpleRefElement(child, TupleDefinitions.WixBundleExtension); 6194 this.ParseSimpleRefElement(child, SymbolDefinitions.WixBundleExtension);
6195 break; 6195 break;
6196 case "ComplianceCheck": 6196 case "ComplianceCheck":
6197 this.ParseComplianceCheckElement(child); 6197 this.ParseComplianceCheckElement(child);
@@ -6209,7 +6209,7 @@ namespace WixToolset.Core
6209 this.ParseCustomActionElement(child); 6209 this.ParseCustomActionElement(child);
6210 break; 6210 break;
6211 case "CustomActionRef": 6211 case "CustomActionRef":
6212 this.ParseSimpleRefElement(child, TupleDefinitions.CustomAction); 6212 this.ParseSimpleRefElement(child, SymbolDefinitions.CustomAction);
6213 break; 6213 break;
6214 case "CustomTable": 6214 case "CustomTable":
6215 this.ParseCustomTableElement(child); 6215 this.ParseCustomTableElement(child);
@@ -6224,7 +6224,7 @@ namespace WixToolset.Core
6224 this.ParseEmbeddedChainerElement(child); 6224 this.ParseEmbeddedChainerElement(child);
6225 break; 6225 break;
6226 case "EmbeddedChainerRef": 6226 case "EmbeddedChainerRef":
6227 this.ParseSimpleRefElement(child, TupleDefinitions.MsiEmbeddedChainer); 6227 this.ParseSimpleRefElement(child, SymbolDefinitions.MsiEmbeddedChainer);
6228 break; 6228 break;
6229 case "EnsureTable": 6229 case "EnsureTable":
6230 this.ParseEnsureTableElement(child); 6230 this.ParseEnsureTableElement(child);
@@ -6276,7 +6276,7 @@ namespace WixToolset.Core
6276 this.ParsePropertyElement(child); 6276 this.ParsePropertyElement(child);
6277 break; 6277 break;
6278 case "PropertyRef": 6278 case "PropertyRef":
6279 this.ParseSimpleRefElement(child, TupleDefinitions.Property); 6279 this.ParseSimpleRefElement(child, SymbolDefinitions.Property);
6280 break; 6280 break;
6281 case "RelatedBundle": 6281 case "RelatedBundle":
6282 this.ParseRelatedBundleElement(child); 6282 this.ParseRelatedBundleElement(child);
@@ -6291,7 +6291,7 @@ namespace WixToolset.Core
6291 this.ParseSetVariableElement(child); 6291 this.ParseSetVariableElement(child);
6292 break; 6292 break;
6293 case "SetVariableRef": 6293 case "SetVariableRef":
6294 this.ParseSimpleRefElement(child, TupleDefinitions.WixSetVariable); 6294 this.ParseSimpleRefElement(child, SymbolDefinitions.WixSetVariable);
6295 break; 6295 break;
6296 case "SFPCatalog": 6296 case "SFPCatalog":
6297 string parentName = null; 6297 string parentName = null;
@@ -6301,7 +6301,7 @@ namespace WixToolset.Core
6301 this.ParseUIElement(child); 6301 this.ParseUIElement(child);
6302 break; 6302 break;
6303 case "UIRef": 6303 case "UIRef":
6304 this.ParseSimpleRefElement(child, TupleDefinitions.WixUI); 6304 this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI);
6305 break; 6305 break;
6306 case "Upgrade": 6306 case "Upgrade":
6307 this.ParseUpgradeElement(child); 6307 this.ParseUpgradeElement(child);
@@ -6325,7 +6325,7 @@ namespace WixToolset.Core
6325 6325
6326 if (!this.Core.EncounteredError && null != id) 6326 if (!this.Core.EncounteredError && null != id)
6327 { 6327 {
6328 this.Core.AddTuple(new WixFragmentTuple(sourceLineNumbers, id)); 6328 this.Core.AddSymbol(new WixFragmentSymbol(sourceLineNumbers, id));
6329 } 6329 }
6330 } 6330 }
6331 6331
@@ -6377,7 +6377,7 @@ namespace WixToolset.Core
6377 6377
6378 if (!this.Core.EncounteredError) 6378 if (!this.Core.EncounteredError)
6379 { 6379 {
6380 this.Core.AddTuple(new LaunchConditionTuple(sourceLineNumbers) 6380 this.Core.AddSymbol(new LaunchConditionSymbol(sourceLineNumbers)
6381 { 6381 {
6382 Condition = condition, 6382 Condition = condition,
6383 Description = message 6383 Description = message
@@ -6521,7 +6521,7 @@ namespace WixToolset.Core
6521 6521
6522 if (!this.Core.EncounteredError) 6522 if (!this.Core.EncounteredError)
6523 { 6523 {
6524 this.Core.AddTuple(new IniFileTuple(sourceLineNumbers, id) 6524 this.Core.AddSymbol(new IniFileSymbol(sourceLineNumbers, id)
6525 { 6525 {
6526 FileName = this.GetMsiFilenameValue(shortName, name), 6526 FileName = this.GetMsiFilenameValue(shortName, name),
6527 DirProperty = directory, 6527 DirProperty = directory,
@@ -6688,7 +6688,7 @@ namespace WixToolset.Core
6688 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName)); 6688 this.Core.Write(ErrorMessages.TooManySearchElements(sourceLineNumbers, node.Name.LocalName));
6689 } 6689 }
6690 oneChild = true; 6690 oneChild = true;
6691 var newId = this.ParseSimpleRefElement(child, TupleDefinitions.Signature); // FileSearch signatures override parent signatures 6691 var newId = this.ParseSimpleRefElement(child, SymbolDefinitions.Signature); // FileSearch signatures override parent signatures
6692 id = new Identifier(AccessModifier.Private, newId); 6692 id = new Identifier(AccessModifier.Private, newId);
6693 signature = null; 6693 signature = null;
6694 break; 6694 break;
@@ -6705,7 +6705,7 @@ namespace WixToolset.Core
6705 6705
6706 if (!this.Core.EncounteredError) 6706 if (!this.Core.EncounteredError)
6707 { 6707 {
6708 var tuple = this.Core.AddTuple(new IniLocatorTuple(sourceLineNumbers, id) 6708 var symbol = this.Core.AddSymbol(new IniLocatorSymbol(sourceLineNumbers, id)
6709 { 6709 {
6710 SignatureRef = id.Id, 6710 SignatureRef = id.Id,
6711 FileName = this.GetMsiFilenameValue(shortName, name), 6711 FileName = this.GetMsiFilenameValue(shortName, name),
@@ -6716,7 +6716,7 @@ namespace WixToolset.Core
6716 6716
6717 if (CompilerConstants.IntegerNotSet != field) 6717 if (CompilerConstants.IntegerNotSet != field)
6718 { 6718 {
6719 tuple.Field = field; 6719 symbol.Field = field;
6720 } 6720 }
6721 } 6721 }
6722 6722
@@ -6741,7 +6741,7 @@ namespace WixToolset.Core
6741 { 6741 {
6742 case "Shared": 6742 case "Shared":
6743 shared = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 6743 shared = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
6744 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Component, shared); 6744 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Component, shared);
6745 break; 6745 break;
6746 default: 6746 default:
6747 this.Core.UnexpectedAttribute(node, attrib); 6747 this.Core.UnexpectedAttribute(node, attrib);
@@ -6763,7 +6763,7 @@ namespace WixToolset.Core
6763 6763
6764 if (!this.Core.EncounteredError) 6764 if (!this.Core.EncounteredError)
6765 { 6765 {
6766 this.Core.AddTuple(new IsolatedComponentTuple(sourceLineNumbers) 6766 this.Core.AddSymbol(new IsolatedComponentSymbol(sourceLineNumbers)
6767 { 6767 {
6768 SharedComponentRef = shared, 6768 SharedComponentRef = shared,
6769 ApplicationComponentRef = componentId 6769 ApplicationComponentRef = componentId
@@ -6805,7 +6805,7 @@ namespace WixToolset.Core
6805 { 6805 {
6806 if ("PatchCertificates" == node.Name.LocalName) 6806 if ("PatchCertificates" == node.Name.LocalName)
6807 { 6807 {
6808 this.Core.AddTuple(new MsiPatchCertificateTuple(sourceLineNumbers) 6808 this.Core.AddSymbol(new MsiPatchCertificateSymbol(sourceLineNumbers)
6809 { 6809 {
6810 PatchCertificate = name, 6810 PatchCertificate = name,
6811 DigitalCertificateRef = name, 6811 DigitalCertificateRef = name,
@@ -6813,7 +6813,7 @@ namespace WixToolset.Core
6813 } 6813 }
6814 else 6814 else
6815 { 6815 {
6816 this.Core.AddTuple(new MsiPackageCertificateTuple(sourceLineNumbers) 6816 this.Core.AddSymbol(new MsiPackageCertificateSymbol(sourceLineNumbers)
6817 { 6817 {
6818 PackageCertificate = name, 6818 PackageCertificate = name,
6819 DigitalCertificateRef = name, 6819 DigitalCertificateRef = name,
@@ -6889,7 +6889,7 @@ namespace WixToolset.Core
6889 6889
6890 if (!this.Core.EncounteredError) 6890 if (!this.Core.EncounteredError)
6891 { 6891 {
6892 this.Core.AddTuple(new MsiDigitalCertificateTuple(sourceLineNumbers, id) 6892 this.Core.AddSymbol(new MsiDigitalCertificateSymbol(sourceLineNumbers, id)
6893 { 6893 {
6894 CertData = sourceFile 6894 CertData = sourceFile
6895 }); 6895 });
@@ -6962,7 +6962,7 @@ namespace WixToolset.Core
6962 6962
6963 if (!this.Core.EncounteredError) 6963 if (!this.Core.EncounteredError)
6964 { 6964 {
6965 this.Core.AddTuple(new MsiDigitalSignatureTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "Media", diskId)) 6965 this.Core.AddSymbol(new MsiDigitalSignatureSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, "Media", diskId))
6966 { 6966 {
6967 Table = "Media", 6967 Table = "Media",
6968 SignObject = diskId, 6968 SignObject = diskId,
@@ -7084,7 +7084,7 @@ namespace WixToolset.Core
7084 if (!this.Core.EncounteredError) 7084 if (!this.Core.EncounteredError)
7085 { 7085 {
7086 // create the row that performs the upgrade (or downgrade) 7086 // create the row that performs the upgrade (or downgrade)
7087 var tuple = this.Core.AddTuple(new UpgradeTuple(sourceLineNumbers) 7087 var symbol = this.Core.AddSymbol(new UpgradeSymbol(sourceLineNumbers)
7088 { 7088 {
7089 UpgradeCode = upgradeCode, 7089 UpgradeCode = upgradeCode,
7090 Remove = removeFeatures, 7090 Remove = removeFeatures,
@@ -7095,21 +7095,21 @@ namespace WixToolset.Core
7095 7095
7096 if (allowDowngrades) 7096 if (allowDowngrades)
7097 { 7097 {
7098 tuple.VersionMin = "0"; 7098 symbol.VersionMin = "0";
7099 tuple.Language = productLanguage; 7099 symbol.Language = productLanguage;
7100 tuple.VersionMinInclusive = true; 7100 symbol.VersionMinInclusive = true;
7101 } 7101 }
7102 else 7102 else
7103 { 7103 {
7104 tuple.VersionMax = productVersion; 7104 symbol.VersionMax = productVersion;
7105 tuple.Language = productLanguage; 7105 symbol.Language = productLanguage;
7106 tuple.VersionMaxInclusive = allowSameVersionUpgrades; 7106 symbol.VersionMaxInclusive = allowSameVersionUpgrades;
7107 } 7107 }
7108 7108
7109 // Add launch condition that blocks upgrades 7109 // Add launch condition that blocks upgrades
7110 if (blockUpgrades) 7110 if (blockUpgrades)
7111 { 7111 {
7112 this.Core.AddTuple(new LaunchConditionTuple(sourceLineNumbers) 7112 this.Core.AddSymbol(new LaunchConditionSymbol(sourceLineNumbers)
7113 { 7113 {
7114 Condition = Common.UpgradePreventedCondition, 7114 Condition = Common.UpgradePreventedCondition,
7115 Description = downgradeErrorMessage 7115 Description = downgradeErrorMessage
@@ -7119,7 +7119,7 @@ namespace WixToolset.Core
7119 // now create the Upgrade row and launch conditions to prevent downgrades (unless explicitly permitted) 7119 // now create the Upgrade row and launch conditions to prevent downgrades (unless explicitly permitted)
7120 if (!allowDowngrades) 7120 if (!allowDowngrades)
7121 { 7121 {
7122 this.Core.AddTuple(new UpgradeTuple(sourceLineNumbers) 7122 this.Core.AddSymbol(new UpgradeSymbol(sourceLineNumbers)
7123 { 7123 {
7124 UpgradeCode = upgradeCode, 7124 UpgradeCode = upgradeCode,
7125 VersionMin = productVersion, 7125 VersionMin = productVersion,
@@ -7129,7 +7129,7 @@ namespace WixToolset.Core
7129 ActionProperty = Common.DowngradeDetectedProperty 7129 ActionProperty = Common.DowngradeDetectedProperty
7130 }); 7130 });
7131 7131
7132 this.Core.AddTuple(new LaunchConditionTuple(sourceLineNumbers) 7132 this.Core.AddSymbol(new LaunchConditionSymbol(sourceLineNumbers)
7133 { 7133 {
7134 Condition = Common.DowngradePreventedCondition, 7134 Condition = Common.DowngradePreventedCondition,
7135 Description = downgradeErrorMessage 7135 Description = downgradeErrorMessage
@@ -7158,7 +7158,7 @@ namespace WixToolset.Core
7158 break; 7158 break;
7159 } 7159 }
7160 7160
7161 this.Core.ScheduleActionTuple(sourceLineNumbers, AccessModifier.Public, SequenceTable.InstallExecuteSequence, "RemoveExistingProducts", afterAction: after); 7161 this.Core.ScheduleActionSymbol(sourceLineNumbers, AccessModifier.Public, SequenceTable.InstallExecuteSequence, "RemoveExistingProducts", afterAction: after);
7162 } 7162 }
7163 } 7163 }
7164 7164
@@ -7199,7 +7199,7 @@ namespace WixToolset.Core
7199 break; 7199 break;
7200 case "DiskPrompt": 7200 case "DiskPrompt":
7201 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7201 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7202 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined 7202 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined
7203 break; 7203 break;
7204 case "EmbedCab": 7204 case "EmbedCab":
7205 embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 7205 embedCab = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -7331,7 +7331,7 @@ namespace WixToolset.Core
7331 // add the row to the section 7331 // add the row to the section
7332 if (!this.Core.EncounteredError) 7332 if (!this.Core.EncounteredError)
7333 { 7333 {
7334 this.Core.AddTuple(new MediaTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, id)) 7334 this.Core.AddSymbol(new MediaSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, id))
7335 { 7335 {
7336 DiskId = id, 7336 DiskId = id,
7337 DiskPrompt = diskPrompt, 7337 DiskPrompt = diskPrompt,
@@ -7344,7 +7344,7 @@ namespace WixToolset.Core
7344 7344
7345 if (null != symbols) 7345 if (null != symbols)
7346 { 7346 {
7347 this.Core.AddTuple(new WixDeltaPatchSymbolPathsTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, SymbolPathType.Media, id)) 7347 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, SymbolPathType.Media, id))
7348 { 7348 {
7349 SymbolType = SymbolPathType.Media, 7349 SymbolType = SymbolPathType.Media,
7350 SymbolId = id.ToString(CultureInfo.InvariantCulture), 7350 SymbolId = id.ToString(CultureInfo.InvariantCulture),
@@ -7406,7 +7406,7 @@ namespace WixToolset.Core
7406 break; 7406 break;
7407 case "DiskPrompt": 7407 case "DiskPrompt":
7408 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 7408 diskPrompt = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
7409 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined 7409 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, "DiskPrompt"); // ensure the output has a DiskPrompt Property defined
7410 this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName)); 7410 this.Core.Write(WarningMessages.ReservedAttribute(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName));
7411 break; 7411 break;
7412 case "EmbedCab": 7412 case "EmbedCab":
@@ -7440,12 +7440,12 @@ namespace WixToolset.Core
7440 7440
7441 if (!this.Core.EncounteredError) 7441 if (!this.Core.EncounteredError)
7442 { 7442 {
7443 this.Core.AddTuple(new MediaTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, 1)) 7443 this.Core.AddSymbol(new MediaSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, 1))
7444 { 7444 {
7445 DiskId = 1 7445 DiskId = 1
7446 }); 7446 });
7447 7447
7448 this.Core.AddTuple(new WixMediaTemplateTuple(sourceLineNumbers) 7448 this.Core.AddSymbol(new WixMediaTemplateSymbol(sourceLineNumbers)
7449 { 7449 {
7450 CabinetTemplate = cabinetTemplate, 7450 CabinetTemplate = cabinetTemplate,
7451 VolumeLabel = volumeLabel, 7451 VolumeLabel = volumeLabel,
@@ -7478,7 +7478,7 @@ namespace WixToolset.Core
7478 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 7478 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
7479 Identifier id = null; 7479 Identifier id = null;
7480 var configData = String.Empty; 7480 var configData = String.Empty;
7481 FileTupleAttributes attributes = 0; 7481 FileSymbolAttributes attributes = 0;
7482 string language = null; 7482 string language = null;
7483 string sourceFile = null; 7483 string sourceFile = null;
7484 7484
@@ -7493,12 +7493,12 @@ namespace WixToolset.Core
7493 break; 7493 break;
7494 case "DiskId": 7494 case "DiskId":
7495 diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue); 7495 diskId = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue);
7496 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat)); 7496 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Media, diskId.ToString(CultureInfo.InvariantCulture.NumberFormat));
7497 break; 7497 break;
7498 case "FileCompression": 7498 case "FileCompression":
7499 var compress = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 7499 var compress = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
7500 attributes |= compress == YesNoType.Yes ? FileTupleAttributes.Compressed : 0; 7500 attributes |= compress == YesNoType.Yes ? FileSymbolAttributes.Compressed : 0;
7501 attributes |= compress == YesNoType.No ? FileTupleAttributes.Uncompressed : 0; 7501 attributes |= compress == YesNoType.No ? FileSymbolAttributes.Uncompressed : 0;
7502 break; 7502 break;
7503 case "Language": 7503 case "Language":
7504 language = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue); 7504 language = this.Core.GetAttributeLocalizableIntegerValue(sourceLineNumbers, attrib, 0, Int16.MaxValue);
@@ -7561,7 +7561,7 @@ namespace WixToolset.Core
7561 7561
7562 if (!this.Core.EncounteredError) 7562 if (!this.Core.EncounteredError)
7563 { 7563 {
7564 var tuple = this.Core.AddTuple(new WixMergeTuple(sourceLineNumbers, id) 7564 var symbol = this.Core.AddSymbol(new WixMergeSymbol(sourceLineNumbers, id)
7565 { 7565 {
7566 DirectoryRef = directoryId, 7566 DirectoryRef = directoryId,
7567 SourceFile = sourceFile, 7567 SourceFile = sourceFile,
@@ -7571,7 +7571,7 @@ namespace WixToolset.Core
7571 FeatureRef = Guid.Empty.ToString("B") 7571 FeatureRef = Guid.Empty.ToString("B")
7572 }); 7572 });
7573 7573
7574 tuple.Set((int)WixMergeTupleFields.Language, language); 7574 symbol.Set((int)WixMergeSymbolFields.Language, language);
7575 } 7575 }
7576 } 7576 }
7577 7577
@@ -7692,7 +7692,7 @@ namespace WixToolset.Core
7692 7692
7693 if (!this.Core.EncounteredError) 7693 if (!this.Core.EncounteredError)
7694 { 7694 {
7695 this.Core.AddTuple(new ConditionTuple(sourceLineNumbers) 7695 this.Core.AddSymbol(new ConditionSymbol(sourceLineNumbers)
7696 { 7696 {
7697 FeatureRef = featureId, 7697 FeatureRef = featureId,
7698 Level = level.Value, 7698 Level = level.Value,
@@ -7722,7 +7722,7 @@ namespace WixToolset.Core
7722 { 7722 {
7723 case "Id": 7723 case "Id":
7724 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 7724 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
7725 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixMerge, id); 7725 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixMerge, id);
7726 break; 7726 break;
7727 case "Primary": 7727 case "Primary":
7728 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib); 7728 primary = this.Core.GetAttributeYesNoValue(sourceLineNumbers, attrib);
@@ -7815,7 +7815,7 @@ namespace WixToolset.Core
7815 7815
7816 if (!this.Core.EncounteredError) 7816 if (!this.Core.EncounteredError)
7817 { 7817 {
7818 this.Core.AddTuple(new MIMETuple(sourceLineNumbers, new Identifier(AccessModifier.Private, contentType)) 7818 this.Core.AddSymbol(new MIMESymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, contentType))
7819 { 7819 {
7820 ContentType = contentType, 7820 ContentType = contentType,
7821 ExtensionRef = extension, 7821 ExtensionRef = extension,
@@ -7894,7 +7894,7 @@ namespace WixToolset.Core
7894 if (patch) 7894 if (patch)
7895 { 7895 {
7896 // /Patch/PatchProperty goes directly into MsiPatchMetadata table 7896 // /Patch/PatchProperty goes directly into MsiPatchMetadata table
7897 this.Core.AddTuple(new MsiPatchMetadataTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, company, name)) 7897 this.Core.AddSymbol(new MsiPatchMetadataSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, company, name))
7898 { 7898 {
7899 Company = company, 7899 Company = company,
7900 Property = name, 7900 Property = name,
@@ -7921,7 +7921,7 @@ namespace WixToolset.Core
7921 { 7921 {
7922 if (!this.Core.EncounteredError) 7922 if (!this.Core.EncounteredError)
7923 { 7923 {
7924 this.Core.AddTuple(new PropertyTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, name)) 7924 this.Core.AddSymbol(new PropertySymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, name))
7925 { 7925 {
7926 Value = value 7926 Value = value
7927 }); 7927 });
@@ -7971,7 +7971,7 @@ namespace WixToolset.Core
7971 7971
7972 return id; 7972 return id;
7973 } 7973 }
7974 7974
7975 /// <summary> 7975 /// <summary>
7976 /// Parses a ReplacePatch element. 7976 /// Parses a ReplacePatch element.
7977 /// </summary> 7977 /// </summary>
@@ -8080,7 +8080,7 @@ namespace WixToolset.Core
8080 8080
8081 if (!this.Core.EncounteredError) 8081 if (!this.Core.EncounteredError)
8082 { 8082 {
8083 this.Core.AddTuple(new WixPatchRefTuple(sourceLineNumbers) 8083 this.Core.AddSymbol(new WixPatchRefSymbol(sourceLineNumbers)
8084 { 8084 {
8085 Table = "*", 8085 Table = "*",
8086 PrimaryKeys = "*", 8086 PrimaryKeys = "*",
@@ -8127,7 +8127,7 @@ namespace WixToolset.Core
8127 8127
8128 if (!this.Core.EncounteredError) 8128 if (!this.Core.EncounteredError)
8129 { 8129 {
8130 this.Core.AddTuple(new WixPatchRefTuple(sourceLineNumbers) 8130 this.Core.AddSymbol(new WixPatchRefSymbol(sourceLineNumbers)
8131 { 8131 {
8132 Table = tableName, 8132 Table = tableName,
8133 PrimaryKeys = id 8133 PrimaryKeys = id
@@ -8245,7 +8245,7 @@ namespace WixToolset.Core
8245 8245
8246 if (!this.Core.EncounteredError) 8246 if (!this.Core.EncounteredError)
8247 { 8247 {
8248 this.Core.AddTuple(new WixPatchBaselineTuple(sourceLineNumbers, id) 8248 this.Core.AddSymbol(new WixPatchBaselineSymbol(sourceLineNumbers, id)
8249 { 8249 {
8250 DiskId = diskId ?? 1, 8250 DiskId = diskId ?? 1,
8251 ValidationFlags = validationFlags, 8251 ValidationFlags = validationFlags,
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs
index 5d0edaf1..7ec83a7d 100644
--- a/src/WixToolset.Core/CompilerCore.cs
+++ b/src/WixToolset.Core/CompilerCore.cs
@@ -13,7 +13,7 @@ namespace WixToolset.Core
13 using System.Text.RegularExpressions; 13 using System.Text.RegularExpressions;
14 using System.Xml.Linq; 14 using System.Xml.Linq;
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; 18 using WixToolset.Extensibility;
19 using WixToolset.Extensibility.Data; 19 using WixToolset.Extensibility.Data;
@@ -164,13 +164,13 @@ namespace WixToolset.Core
164 public bool ShowPedanticMessages { get; set; } 164 public bool ShowPedanticMessages { get; set; }
165 165
166 /// <summary> 166 /// <summary>
167 /// Add a tuple to the active section. 167 /// Add a symbol to the active section.
168 /// </summary> 168 /// </summary>
169 /// <param name="tuple">Tuple to add.</param> 169 /// <param name="symbol">Symbol to add.</param>
170 public T AddTuple<T>(T tuple) 170 public T AddSymbol<T>(T symbol)
171 where T : IntermediateTuple 171 where T : IntermediateSymbol
172 { 172 {
173 return this.ActiveSection.AddTuple(tuple); 173 return this.ActiveSection.AddSymbol(symbol);
174 } 174 }
175 175
176 /// <summary> 176 /// <summary>
@@ -355,39 +355,39 @@ namespace WixToolset.Core
355 /// <param name="componentId">The component which will control installation/uninstallation of the registry entry.</param> 355 /// <param name="componentId">The component which will control installation/uninstallation of the registry entry.</param>
356 public Identifier CreateRegistryRow(SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId) 356 public Identifier CreateRegistryRow(SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId)
357 { 357 {
358 return this.parseHelper.CreateRegistryTuple(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true); 358 return this.parseHelper.CreateRegistrySymbol(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true);
359 } 359 }
360 360
361 /// <summary> 361 /// <summary>
362 /// Create a WixSimpleReferenceTuple in the active section. 362 /// Create a WixSimpleReferenceSymbol in the active section.
363 /// </summary> 363 /// </summary>
364 /// <param name="sourceLineNumbers">Source line information for the row.</param> 364 /// <param name="sourceLineNumbers">Source line information for the row.</param>
365 /// <param name="tupleName">The tuple name of the simple reference.</param> 365 /// <param name="symbolName">The symbol name of the simple reference.</param>
366 /// <param name="primaryKeys">The primary keys of the simple reference.</param> 366 /// <param name="primaryKeys">The primary keys of the simple reference.</param>
367 public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, string tupleName, params string[] primaryKeys) 367 public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, string symbolName, params string[] primaryKeys)
368 { 368 {
369 if (!this.EncounteredError) 369 if (!this.EncounteredError)
370 { 370 {
371 var joinedKeys = String.Join("/", primaryKeys); 371 var joinedKeys = String.Join("/", primaryKeys);
372 var id = String.Concat(tupleName, ":", joinedKeys); 372 var id = String.Concat(symbolName, ":", joinedKeys);
373 373
374 // If this simple reference hasn't been added to the active section already, add it. 374 // If this simple reference hasn't been added to the active section already, add it.
375 if (this.activeSectionSimpleReferences.Add(id)) 375 if (this.activeSectionSimpleReferences.Add(id))
376 { 376 {
377 this.parseHelper.CreateSimpleReference(this.ActiveSection, sourceLineNumbers, tupleName, primaryKeys); 377 this.parseHelper.CreateSimpleReference(this.ActiveSection, sourceLineNumbers, symbolName, primaryKeys);
378 } 378 }
379 } 379 }
380 } 380 }
381 381
382 /// <summary> 382 /// <summary>
383 /// Create a WixSimpleReferenceTuple in the active section. 383 /// Create a WixSimpleReferenceSymbol in the active section.
384 /// </summary> 384 /// </summary>
385 /// <param name="sourceLineNumbers">Source line information for the row.</param> 385 /// <param name="sourceLineNumbers">Source line information for the row.</param>
386 /// <param name="tupleDefinition">The tuple definition of the simple reference.</param> 386 /// <param name="symbolDefinition">The symbol definition of the simple reference.</param>
387 /// <param name="primaryKeys">The primary keys of the simple reference.</param> 387 /// <param name="primaryKeys">The primary keys of the simple reference.</param>
388 public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, params string[] primaryKeys) 388 public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, params string[] primaryKeys)
389 { 389 {
390 this.CreateSimpleReference(sourceLineNumbers, tupleDefinition.Name, primaryKeys); 390 this.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, primaryKeys);
391 } 391 }
392 392
393 /// <summary> 393 /// <summary>
@@ -402,12 +402,12 @@ namespace WixToolset.Core
402 { 402 {
403 if (!this.EncounteredError) 403 if (!this.EncounteredError)
404 { 404 {
405 this.parseHelper.CreateWixGroupTuple(this.ActiveSection, sourceLineNumbers, parentType, parentId, childType, childId); 405 this.parseHelper.CreateWixGroupSymbol(this.ActiveSection, sourceLineNumbers, parentType, parentId, childType, childId);
406 } 406 }
407 } 407 }
408 408
409 /// <summary> 409 /// <summary>
410 /// Add the appropriate tuples to make sure that the given table shows up 410 /// Add the appropriate symbols to make sure that the given table shows up
411 /// in the resulting output. 411 /// in the resulting output.
412 /// </summary> 412 /// </summary>
413 /// <param name="sourceLineNumbers">Source line numbers.</param> 413 /// <param name="sourceLineNumbers">Source line numbers.</param>
@@ -421,7 +421,7 @@ namespace WixToolset.Core
421 } 421 }
422 422
423 /// <summary> 423 /// <summary>
424 /// Add the appropriate tuples to make sure that the given table shows up 424 /// Add the appropriate symbols to make sure that the given table shows up
425 /// in the resulting output. 425 /// in the resulting output.
426 /// </summary> 426 /// </summary>
427 /// <param name="sourceLineNumbers">Source line numbers.</param> 427 /// <param name="sourceLineNumbers">Source line numbers.</param>
@@ -1013,12 +1013,12 @@ namespace WixToolset.Core
1013 /// <returns>Identifier for the newly created row.</returns> 1013 /// <returns>Identifier for the newly created row.</returns>
1014 internal Identifier CreateDirectoryRow(SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, string shortName = null, string sourceName = null, string shortSourceName = null) 1014 internal Identifier CreateDirectoryRow(SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, string shortName = null, string sourceName = null, string shortSourceName = null)
1015 { 1015 {
1016 return this.parseHelper.CreateDirectoryTuple(this.ActiveSection, sourceLineNumbers, id, parentId, name, this.activeSectionInlinedDirectoryIds, shortName, sourceName, shortSourceName); 1016 return this.parseHelper.CreateDirectorySymbol(this.ActiveSection, sourceLineNumbers, id, parentId, name, this.activeSectionInlinedDirectoryIds, shortName, sourceName, shortSourceName);
1017 } 1017 }
1018 1018
1019 public void CreateWixSearchTuple(SourceLineNumber sourceLineNumbers, string elementName, Identifier id, string variable, string condition, string after) 1019 public void CreateWixSearchSymbol(SourceLineNumber sourceLineNumbers, string elementName, Identifier id, string variable, string condition, string after)
1020 { 1020 {
1021 this.parseHelper.CreateWixSearchTuple(this.ActiveSection, sourceLineNumbers, elementName, id, variable, condition, after, null); 1021 this.parseHelper.CreateWixSearchSymbol(this.ActiveSection, sourceLineNumbers, elementName, id, variable, condition, after, null);
1022 } 1022 }
1023 1023
1024 /// <summary> 1024 /// <summary>
@@ -1033,9 +1033,9 @@ namespace WixToolset.Core
1033 return this.parseHelper.GetAttributeInlineDirectorySyntax(sourceLineNumbers, attribute, resultUsedToCreateReference); 1033 return this.parseHelper.GetAttributeInlineDirectorySyntax(sourceLineNumbers, attribute, resultUsedToCreateReference);
1034 } 1034 }
1035 1035
1036 internal WixActionTuple ScheduleActionTuple(SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition = null, string beforeAction = null, string afterAction = null, bool overridable = false) 1036 internal WixActionSymbol ScheduleActionSymbol(SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition = null, string beforeAction = null, string afterAction = null, bool overridable = false)
1037 { 1037 {
1038 return this.parseHelper.ScheduleActionTuple(this.ActiveSection, sourceLineNumbers, access, sequence, actionName, condition, beforeAction, afterAction, overridable); 1038 return this.parseHelper.ScheduleActionSymbol(this.ActiveSection, sourceLineNumbers, access, sequence, actionName, condition, beforeAction, afterAction, overridable);
1039 } 1039 }
1040 1040
1041 /// <summary> 1041 /// <summary>
diff --git a/src/WixToolset.Core/Compiler_2.cs b/src/WixToolset.Core/Compiler_2.cs
index 18a0366e..72550ed9 100644
--- a/src/WixToolset.Core/Compiler_2.cs
+++ b/src/WixToolset.Core/Compiler_2.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core
10 using System.IO; 10 using System.IO;
11 using System.Xml.Linq; 11 using System.Xml.Linq;
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 16
@@ -190,7 +190,7 @@ namespace WixToolset.Core
190 this.ParseCustomActionElement(child); 190 this.ParseCustomActionElement(child);
191 break; 191 break;
192 case "CustomActionRef": 192 case "CustomActionRef":
193 this.ParseSimpleRefElement(child, TupleDefinitions.CustomAction); 193 this.ParseSimpleRefElement(child, SymbolDefinitions.CustomAction);
194 break; 194 break;
195 case "CustomTable": 195 case "CustomTable":
196 this.ParseCustomTableElement(child); 196 this.ParseCustomTableElement(child);
@@ -205,7 +205,7 @@ namespace WixToolset.Core
205 this.ParseEmbeddedChainerElement(child); 205 this.ParseEmbeddedChainerElement(child);
206 break; 206 break;
207 case "EmbeddedChainerRef": 207 case "EmbeddedChainerRef":
208 this.ParseSimpleRefElement(child, TupleDefinitions.MsiEmbeddedChainer); 208 this.ParseSimpleRefElement(child, SymbolDefinitions.MsiEmbeddedChainer);
209 break; 209 break;
210 case "EnsureTable": 210 case "EnsureTable":
211 this.ParseEnsureTableElement(child); 211 this.ParseEnsureTableElement(child);
@@ -248,7 +248,7 @@ namespace WixToolset.Core
248 this.ParsePropertyElement(child); 248 this.ParsePropertyElement(child);
249 break; 249 break;
250 case "PropertyRef": 250 case "PropertyRef":
251 this.ParseSimpleRefElement(child, TupleDefinitions.Property); 251 this.ParseSimpleRefElement(child, SymbolDefinitions.Property);
252 break; 252 break;
253 case "SetDirectory": 253 case "SetDirectory":
254 this.ParseSetDirectoryElement(child); 254 this.ParseSetDirectoryElement(child);
@@ -274,7 +274,7 @@ namespace WixToolset.Core
274 this.ParseUIElement(child); 274 this.ParseUIElement(child);
275 break; 275 break;
276 case "UIRef": 276 case "UIRef":
277 this.ParseSimpleRefElement(child, TupleDefinitions.WixUI); 277 this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI);
278 break; 278 break;
279 case "Upgrade": 279 case "Upgrade":
280 this.ParseUpgradeElement(child); 280 this.ParseUpgradeElement(child);
@@ -297,7 +297,7 @@ namespace WixToolset.Core
297 { 297 {
298 if (null != symbols) 298 if (null != symbols)
299 { 299 {
300 this.Core.AddTuple(new WixDeltaPatchSymbolPathsTuple(sourceLineNumbers) 300 this.Core.AddSymbol(new WixDeltaPatchSymbolPathsSymbol(sourceLineNumbers)
301 { 301 {
302 SymbolId = productCode, 302 SymbolId = productCode,
303 SymbolType = SymbolPathType.Product, 303 SymbolType = SymbolPathType.Product,
@@ -318,8 +318,8 @@ namespace WixToolset.Core
318 /// <param name="node">Element to parse.</param> 318 /// <param name="node">Element to parse.</param>
319 /// <param name="componentId">Identifier of parent component.</param> 319 /// <param name="componentId">Identifier of parent component.</param>
320 /// <param name="fileId">Default identifer for driver/translator file.</param> 320 /// <param name="fileId">Default identifer for driver/translator file.</param>
321 /// <param name="tupleDefinitionType">Tuple type we're processing for.</param> 321 /// <param name="symbolDefinitionType">Symbol type we're processing for.</param>
322 private void ParseODBCDriverOrTranslator(XElement node, string componentId, string fileId, TupleDefinitionType tupleDefinitionType) 322 private void ParseODBCDriverOrTranslator(XElement node, string componentId, string fileId, SymbolDefinitionType symbolDefinitionType)
323 { 323 {
324 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 324 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
325 Identifier id = null; 325 Identifier id = null;
@@ -338,14 +338,14 @@ namespace WixToolset.Core
338 break; 338 break;
339 case "File": 339 case "File":
340 driver = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 340 driver = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
341 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, driver); 341 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, driver);
342 break; 342 break;
343 case "Name": 343 case "Name":
344 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 344 name = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
345 break; 345 break;
346 case "SetupFile": 346 case "SetupFile":
347 setup = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 347 setup = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
348 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, setup); 348 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, setup);
349 break; 349 break;
350 default: 350 default:
351 this.Core.UnexpectedAttribute(node, attrib); 351 this.Core.UnexpectedAttribute(node, attrib);
@@ -369,7 +369,7 @@ namespace WixToolset.Core
369 } 369 }
370 370
371 // drivers have a few possible children 371 // drivers have a few possible children
372 if (TupleDefinitionType.ODBCDriver == tupleDefinitionType) 372 if (SymbolDefinitionType.ODBCDriver == symbolDefinitionType)
373 { 373 {
374 // process any data sources for the driver 374 // process any data sources for the driver
375 foreach (var child in node.Elements()) 375 foreach (var child in node.Elements())
@@ -383,7 +383,7 @@ namespace WixToolset.Core
383 this.ParseODBCDataSource(child, componentId, name, out ignoredKeyPath); 383 this.ParseODBCDataSource(child, componentId, name, out ignoredKeyPath);
384 break; 384 break;
385 case "Property": 385 case "Property":
386 this.ParseODBCProperty(child, id.Id, TupleDefinitionType.ODBCAttribute); 386 this.ParseODBCProperty(child, id.Id, SymbolDefinitionType.ODBCAttribute);
387 break; 387 break;
388 default: 388 default:
389 this.Core.UnexpectedElement(node, child); 389 this.Core.UnexpectedElement(node, child);
@@ -403,10 +403,10 @@ namespace WixToolset.Core
403 403
404 if (!this.Core.EncounteredError) 404 if (!this.Core.EncounteredError)
405 { 405 {
406 switch (tupleDefinitionType) 406 switch (symbolDefinitionType)
407 { 407 {
408 case TupleDefinitionType.ODBCDriver: 408 case SymbolDefinitionType.ODBCDriver:
409 this.Core.AddTuple(new ODBCDriverTuple(sourceLineNumbers, id) 409 this.Core.AddSymbol(new ODBCDriverSymbol(sourceLineNumbers, id)
410 { 410 {
411 ComponentRef = componentId, 411 ComponentRef = componentId,
412 Description = name, 412 Description = name,
@@ -414,8 +414,8 @@ namespace WixToolset.Core
414 SetupFileRef = setup, 414 SetupFileRef = setup,
415 }); 415 });
416 break; 416 break;
417 case TupleDefinitionType.ODBCTranslator: 417 case SymbolDefinitionType.ODBCTranslator:
418 this.Core.AddTuple(new ODBCTranslatorTuple(sourceLineNumbers, id) 418 this.Core.AddSymbol(new ODBCTranslatorSymbol(sourceLineNumbers, id)
419 { 419 {
420 ComponentRef = componentId, 420 ComponentRef = componentId,
421 Description = name, 421 Description = name,
@@ -424,7 +424,7 @@ namespace WixToolset.Core
424 }); 424 });
425 break; 425 break;
426 default: 426 default:
427 throw new ArgumentOutOfRangeException(nameof(tupleDefinitionType)); 427 throw new ArgumentOutOfRangeException(nameof(symbolDefinitionType));
428 } 428 }
429 } 429 }
430 } 430 }
@@ -434,8 +434,8 @@ namespace WixToolset.Core
434 /// </summary> 434 /// </summary>
435 /// <param name="node">Element to parse.</param> 435 /// <param name="node">Element to parse.</param>
436 /// <param name="parentId">Identifier of parent driver or translator.</param> 436 /// <param name="parentId">Identifier of parent driver or translator.</param>
437 /// <param name="tupleDefinitionType">Name of the table to create property in.</param> 437 /// <param name="symbolDefinitionType">Name of the table to create property in.</param>
438 private void ParseODBCProperty(XElement node, string parentId, TupleDefinitionType tupleDefinitionType) 438 private void ParseODBCProperty(XElement node, string parentId, SymbolDefinitionType symbolDefinitionType)
439 { 439 {
440 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 440 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
441 string id = null; 441 string id = null;
@@ -474,18 +474,18 @@ namespace WixToolset.Core
474 if (!this.Core.EncounteredError) 474 if (!this.Core.EncounteredError)
475 { 475 {
476 var identifier = new Identifier(AccessModifier.Private, parentId, id); 476 var identifier = new Identifier(AccessModifier.Private, parentId, id);
477 switch (tupleDefinitionType) 477 switch (symbolDefinitionType)
478 { 478 {
479 case TupleDefinitionType.ODBCAttribute: 479 case SymbolDefinitionType.ODBCAttribute:
480 this.Core.AddTuple(new ODBCAttributeTuple(sourceLineNumbers, identifier) 480 this.Core.AddSymbol(new ODBCAttributeSymbol(sourceLineNumbers, identifier)
481 { 481 {
482 DriverRef = parentId, 482 DriverRef = parentId,
483 Attribute = id, 483 Attribute = id,
484 Value = propertyValue, 484 Value = propertyValue,
485 }); 485 });
486 break; 486 break;
487 case TupleDefinitionType.ODBCSourceAttribute: 487 case SymbolDefinitionType.ODBCSourceAttribute:
488 this.Core.AddTuple(new ODBCSourceAttributeTuple(sourceLineNumbers, identifier) 488 this.Core.AddSymbol(new ODBCSourceAttributeSymbol(sourceLineNumbers, identifier)
489 { 489 {
490 DataSourceRef = parentId, 490 DataSourceRef = parentId,
491 Attribute = id, 491 Attribute = id,
@@ -493,7 +493,7 @@ namespace WixToolset.Core
493 }); 493 });
494 break; 494 break;
495 default: 495 default:
496 throw new ArgumentOutOfRangeException(nameof(tupleDefinitionType)); 496 throw new ArgumentOutOfRangeException(nameof(symbolDefinitionType));
497 } 497 }
498 } 498 }
499 } 499 }
@@ -578,7 +578,7 @@ namespace WixToolset.Core
578 switch (child.Name.LocalName) 578 switch (child.Name.LocalName)
579 { 579 {
580 case "Property": 580 case "Property":
581 this.ParseODBCProperty(child, id.Id, TupleDefinitionType.ODBCSourceAttribute); 581 this.ParseODBCProperty(child, id.Id, SymbolDefinitionType.ODBCSourceAttribute);
582 break; 582 break;
583 default: 583 default:
584 this.Core.UnexpectedElement(node, child); 584 this.Core.UnexpectedElement(node, child);
@@ -593,7 +593,7 @@ namespace WixToolset.Core
593 593
594 if (!this.Core.EncounteredError) 594 if (!this.Core.EncounteredError)
595 { 595 {
596 this.Core.AddTuple(new ODBCDataSourceTuple(sourceLineNumbers, id) 596 this.Core.AddSymbol(new ODBCDataSourceSymbol(sourceLineNumbers, id)
597 { 597 {
598 ComponentRef = componentId, 598 ComponentRef = componentId,
599 Description = name, 599 Description = name,
@@ -712,7 +712,7 @@ namespace WixToolset.Core
712 switch (installScope) 712 switch (installScope)
713 { 713 {
714 case "perMachine": 714 case "perMachine":
715 this.Core.AddTuple(new PropertyTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, "ALLUSERS")) 715 this.Core.AddSymbol(new PropertySymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, "ALLUSERS"))
716 { 716 {
717 Value = "1" 717 Value = "1"
718 }); 718 });
@@ -870,67 +870,67 @@ namespace WixToolset.Core
870 870
871 if (!this.Core.EncounteredError) 871 if (!this.Core.EncounteredError)
872 { 872 {
873 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 873 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
874 { 874 {
875 PropertyId = SummaryInformationType.Codepage, 875 PropertyId = SummaryInformationType.Codepage,
876 Value = codepage 876 Value = codepage
877 }); 877 });
878 878
879 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 879 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
880 { 880 {
881 PropertyId = SummaryInformationType.Title, 881 PropertyId = SummaryInformationType.Title,
882 Value = "Installation Database" 882 Value = "Installation Database"
883 }); 883 });
884 884
885 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 885 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
886 { 886 {
887 PropertyId = SummaryInformationType.Subject, 887 PropertyId = SummaryInformationType.Subject,
888 Value = packageName 888 Value = packageName
889 }); 889 });
890 890
891 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 891 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
892 { 892 {
893 PropertyId = SummaryInformationType.Author, 893 PropertyId = SummaryInformationType.Author,
894 Value = packageAuthor 894 Value = packageAuthor
895 }); 895 });
896 896
897 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 897 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
898 { 898 {
899 PropertyId = SummaryInformationType.Keywords, 899 PropertyId = SummaryInformationType.Keywords,
900 Value = keywords 900 Value = keywords
901 }); 901 });
902 902
903 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 903 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
904 { 904 {
905 PropertyId = SummaryInformationType.Comments, 905 PropertyId = SummaryInformationType.Comments,
906 Value = comments 906 Value = comments
907 }); 907 });
908 908
909 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 909 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
910 { 910 {
911 PropertyId = SummaryInformationType.PlatformAndLanguage, 911 PropertyId = SummaryInformationType.PlatformAndLanguage,
912 Value = String.Format(CultureInfo.InvariantCulture, "{0};{1}", platform, packageLanguages) 912 Value = String.Format(CultureInfo.InvariantCulture, "{0};{1}", platform, packageLanguages)
913 }); 913 });
914 914
915 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 915 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
916 { 916 {
917 PropertyId = SummaryInformationType.PackageCode, 917 PropertyId = SummaryInformationType.PackageCode,
918 Value = packageCode 918 Value = packageCode
919 }); 919 });
920 920
921 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 921 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
922 { 922 {
923 PropertyId = SummaryInformationType.WindowsInstallerVersion, 923 PropertyId = SummaryInformationType.WindowsInstallerVersion,
924 Value = msiVersion.ToString(CultureInfo.InvariantCulture) 924 Value = msiVersion.ToString(CultureInfo.InvariantCulture)
925 }); 925 });
926 926
927 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 927 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
928 { 928 {
929 PropertyId = SummaryInformationType.WordCount, 929 PropertyId = SummaryInformationType.WordCount,
930 Value = sourceBits.ToString(CultureInfo.InvariantCulture) 930 Value = sourceBits.ToString(CultureInfo.InvariantCulture)
931 }); 931 });
932 932
933 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 933 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
934 { 934 {
935 PropertyId = SummaryInformationType.Security, 935 PropertyId = SummaryInformationType.Security,
936 Value = YesNoDefaultType.No == security ? "0" : YesNoDefaultType.Yes == security ? "4" : "2" 936 Value = YesNoDefaultType.No == security ? "0" : YesNoDefaultType.Yes == security ? "4" : "2"
@@ -1007,13 +1007,13 @@ namespace WixToolset.Core
1007 1007
1008 if (!this.Core.EncounteredError) 1008 if (!this.Core.EncounteredError)
1009 { 1009 {
1010 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1010 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1011 { 1011 {
1012 PropertyId = SummaryInformationType.Codepage, 1012 PropertyId = SummaryInformationType.Codepage,
1013 Value = codepage 1013 Value = codepage
1014 }); 1014 });
1015 1015
1016 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1016 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1017 { 1017 {
1018 PropertyId = SummaryInformationType.Title, 1018 PropertyId = SummaryInformationType.Title,
1019 Value = "Patch" 1019 Value = "Patch"
@@ -1021,7 +1021,7 @@ namespace WixToolset.Core
1021 1021
1022 if (null != packageName) 1022 if (null != packageName)
1023 { 1023 {
1024 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1024 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1025 { 1025 {
1026 PropertyId = SummaryInformationType.Subject, 1026 PropertyId = SummaryInformationType.Subject,
1027 Value = packageName 1027 Value = packageName
@@ -1030,7 +1030,7 @@ namespace WixToolset.Core
1030 1030
1031 if (null != packageAuthor) 1031 if (null != packageAuthor)
1032 { 1032 {
1033 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1033 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1034 { 1034 {
1035 PropertyId = SummaryInformationType.Author, 1035 PropertyId = SummaryInformationType.Author,
1036 Value = packageAuthor 1036 Value = packageAuthor
@@ -1039,7 +1039,7 @@ namespace WixToolset.Core
1039 1039
1040 if (null != keywords) 1040 if (null != keywords)
1041 { 1041 {
1042 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1042 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1043 { 1043 {
1044 PropertyId = SummaryInformationType.Keywords, 1044 PropertyId = SummaryInformationType.Keywords,
1045 Value = keywords 1045 Value = keywords
@@ -1048,26 +1048,26 @@ namespace WixToolset.Core
1048 1048
1049 if (null != comments) 1049 if (null != comments)
1050 { 1050 {
1051 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1051 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1052 { 1052 {
1053 PropertyId = SummaryInformationType.Comments, 1053 PropertyId = SummaryInformationType.Comments,
1054 Value = comments 1054 Value = comments
1055 }); 1055 });
1056 } 1056 }
1057 1057
1058 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1058 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1059 { 1059 {
1060 PropertyId = SummaryInformationType.WindowsInstallerVersion, 1060 PropertyId = SummaryInformationType.WindowsInstallerVersion,
1061 Value = msiVersion.ToString(CultureInfo.InvariantCulture) 1061 Value = msiVersion.ToString(CultureInfo.InvariantCulture)
1062 }); 1062 });
1063 1063
1064 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1064 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1065 { 1065 {
1066 PropertyId = SummaryInformationType.WordCount, 1066 PropertyId = SummaryInformationType.WordCount,
1067 Value = "0" 1067 Value = "0"
1068 }); 1068 });
1069 1069
1070 this.Core.AddTuple(new SummaryInformationTuple(sourceLineNumbers) 1070 this.Core.AddSymbol(new SummaryInformationSymbol(sourceLineNumbers)
1071 { 1071 {
1072 PropertyId = SummaryInformationType.Security, 1072 PropertyId = SummaryInformationType.Security,
1073 Value = YesNoDefaultType.No == security ? "0" : YesNoDefaultType.Yes == security ? "4" : "2" 1073 Value = YesNoDefaultType.No == security ? "0" : YesNoDefaultType.Yes == security ? "4" : "2"
@@ -1163,7 +1163,7 @@ namespace WixToolset.Core
1163 1163
1164 if (!this.Core.EncounteredError) 1164 if (!this.Core.EncounteredError)
1165 { 1165 {
1166 this.Core.AddTuple(new LockPermissionsTuple(sourceLineNumbers) 1166 this.Core.AddSymbol(new LockPermissionsSymbol(sourceLineNumbers)
1167 { 1167 {
1168 LockObject = objectId, 1168 LockObject = objectId,
1169 Table = tableName, 1169 Table = tableName,
@@ -1239,7 +1239,7 @@ namespace WixToolset.Core
1239 1239
1240 if (!this.Core.EncounteredError) 1240 if (!this.Core.EncounteredError)
1241 { 1241 {
1242 this.Core.AddTuple(new MsiLockPermissionsExTuple(sourceLineNumbers, id) 1242 this.Core.AddSymbol(new MsiLockPermissionsExSymbol(sourceLineNumbers, id)
1243 { 1243 {
1244 LockObject = objectId, 1244 LockObject = objectId,
1245 Table = tableName, 1245 Table = tableName,
@@ -1371,7 +1371,7 @@ namespace WixToolset.Core
1371 { 1371 {
1372 if (!this.Core.EncounteredError) 1372 if (!this.Core.EncounteredError)
1373 { 1373 {
1374 var tuple = this.Core.AddTuple(new ProgIdTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, progId)) 1374 var symbol = this.Core.AddSymbol(new ProgIdSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, progId))
1375 { 1375 {
1376 ProgId = progId, 1376 ProgId = progId,
1377 ParentProgIdRef = parent, 1377 ParentProgIdRef = parent,
@@ -1381,13 +1381,13 @@ namespace WixToolset.Core
1381 1381
1382 if (null != icon) 1382 if (null != icon)
1383 { 1383 {
1384 tuple.IconRef = icon; 1384 symbol.IconRef = icon;
1385 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Icon, icon); 1385 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Icon, icon);
1386 } 1386 }
1387 1387
1388 if (CompilerConstants.IntegerNotSet != iconIndex) 1388 if (CompilerConstants.IntegerNotSet != iconIndex)
1389 { 1389 {
1390 tuple.IconIndex = iconIndex; 1390 symbol.IconIndex = iconIndex;
1391 } 1391 }
1392 1392
1393 this.Core.EnsureTable(sourceLineNumbers, WindowsInstallerTableDefinitions.Class); 1393 this.Core.EnsureTable(sourceLineNumbers, WindowsInstallerTableDefinitions.Class);
@@ -1419,7 +1419,7 @@ namespace WixToolset.Core
1419 1419
1420 if (null != icon) // ProgId's Default Icon 1420 if (null != icon) // ProgId's Default Icon
1421 { 1421 {
1422 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, icon); 1422 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, icon);
1423 1423
1424 icon = String.Format(CultureInfo.InvariantCulture, "\"[#{0}]\"", icon); 1424 icon = String.Format(CultureInfo.InvariantCulture, "\"[#{0}]\"", icon);
1425 1425
@@ -1515,7 +1515,7 @@ namespace WixToolset.Core
1515 1515
1516 if ("ErrorDialog" == id.Id) 1516 if ("ErrorDialog" == id.Id)
1517 { 1517 {
1518 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Dialog, value); 1518 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Dialog, value);
1519 } 1519 }
1520 1520
1521 foreach (var child in node.Elements()) 1521 foreach (var child in node.Elements())
@@ -1550,7 +1550,7 @@ namespace WixToolset.Core
1550 { 1550 {
1551 if (complianceCheck && !this.Core.EncounteredError) 1551 if (complianceCheck && !this.Core.EncounteredError)
1552 { 1552 {
1553 this.Core.AddTuple(new CCPSearchTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, sig))); 1553 this.Core.AddSymbol(new CCPSearchSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, sig)));
1554 } 1554 }
1555 1555
1556 this.AddAppSearch(sourceLineNumbers, id, sig); 1556 this.AddAppSearch(sourceLineNumbers, id, sig);
@@ -1579,7 +1579,7 @@ namespace WixToolset.Core
1579 { 1579 {
1580 this.Core.Write(WarningMessages.PropertyModularizationSuppressed(sourceLineNumbers)); 1580 this.Core.Write(WarningMessages.PropertyModularizationSuppressed(sourceLineNumbers));
1581 1581
1582 this.Core.AddTuple(new WixSuppressModularizationTuple(sourceLineNumbers, id)); 1582 this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, id));
1583 } 1583 }
1584 } 1584 }
1585 1585
@@ -1766,7 +1766,7 @@ namespace WixToolset.Core
1766 1766
1767 if (!this.Core.EncounteredError && null != name) 1767 if (!this.Core.EncounteredError && null != name)
1768 { 1768 {
1769 this.Core.AddTuple(new RegistryTuple(sourceLineNumbers, id) 1769 this.Core.AddSymbol(new RegistrySymbol(sourceLineNumbers, id)
1770 { 1770 {
1771 Root = root.Value, 1771 Root = root.Value,
1772 Key = key, 1772 Key = key,
@@ -2008,7 +2008,7 @@ namespace WixToolset.Core
2008 2008
2009 if (!this.Core.EncounteredError) 2009 if (!this.Core.EncounteredError)
2010 { 2010 {
2011 this.Core.AddTuple(new RegistryTuple(sourceLineNumbers, id) 2011 this.Core.AddSymbol(new RegistrySymbol(sourceLineNumbers, id)
2012 { 2012 {
2013 Root = root.Value, 2013 Root = root.Value,
2014 Key = key, 2014 Key = key,
@@ -2154,7 +2154,7 @@ namespace WixToolset.Core
2154 2154
2155 if (!this.Core.EncounteredError) 2155 if (!this.Core.EncounteredError)
2156 { 2156 {
2157 this.Core.AddTuple(new RemoveRegistryTuple(sourceLineNumbers, id) 2157 this.Core.AddSymbol(new RemoveRegistrySymbol(sourceLineNumbers, id)
2158 { 2158 {
2159 Root = root.Value, 2159 Root = root.Value,
2160 Key = key, 2160 Key = key,
@@ -2230,7 +2230,7 @@ namespace WixToolset.Core
2230 2230
2231 if (!this.Core.EncounteredError) 2231 if (!this.Core.EncounteredError)
2232 { 2232 {
2233 this.Core.AddTuple(new RemoveRegistryTuple(sourceLineNumbers, id) 2233 this.Core.AddSymbol(new RemoveRegistrySymbol(sourceLineNumbers, id)
2234 { 2234 {
2235 Root = root.Value, 2235 Root = root.Value,
2236 Key = key, 2236 Key = key,
@@ -2349,7 +2349,7 @@ namespace WixToolset.Core
2349 2349
2350 if (!this.Core.EncounteredError) 2350 if (!this.Core.EncounteredError)
2351 { 2351 {
2352 this.Core.AddTuple(new RemoveFileTuple(sourceLineNumbers, id) 2352 this.Core.AddSymbol(new RemoveFileSymbol(sourceLineNumbers, id)
2353 { 2353 {
2354 ComponentRef = componentId, 2354 ComponentRef = componentId,
2355 FileName = this.GetMsiFilenameValue(shortName, name), 2355 FileName = this.GetMsiFilenameValue(shortName, name),
@@ -2437,7 +2437,7 @@ namespace WixToolset.Core
2437 2437
2438 if (!this.Core.EncounteredError) 2438 if (!this.Core.EncounteredError)
2439 { 2439 {
2440 this.Core.AddTuple(new RemoveFileTuple(sourceLineNumbers, id) 2440 this.Core.AddSymbol(new RemoveFileSymbol(sourceLineNumbers, id)
2441 { 2441 {
2442 ComponentRef = componentId, 2442 ComponentRef = componentId,
2443 DirProperty = directory ?? property ?? parentDirectory, 2443 DirProperty = directory ?? property ?? parentDirectory,
@@ -2508,7 +2508,7 @@ namespace WixToolset.Core
2508 2508
2509 if (!this.Core.EncounteredError) 2509 if (!this.Core.EncounteredError)
2510 { 2510 {
2511 this.Core.AddTuple(new ReserveCostTuple(sourceLineNumbers, id) 2511 this.Core.AddSymbol(new ReserveCostSymbol(sourceLineNumbers, id)
2512 { 2512 {
2513 ComponentRef = componentId, 2513 ComponentRef = componentId,
2514 ReserveFolder = directoryId, 2514 ReserveFolder = directoryId,
@@ -2552,7 +2552,7 @@ namespace WixToolset.Core
2552 if (customAction) 2552 if (customAction)
2553 { 2553 {
2554 actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); 2554 actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2555 this.Core.CreateSimpleReference(childSourceLineNumbers, TupleDefinitions.CustomAction, actionName); 2555 this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.CustomAction, actionName);
2556 } 2556 }
2557 else 2557 else
2558 { 2558 {
@@ -2563,7 +2563,7 @@ namespace WixToolset.Core
2563 if (customAction || showDialog || specialAction || specialStandardAction) 2563 if (customAction || showDialog || specialAction || specialStandardAction)
2564 { 2564 {
2565 afterAction = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); 2565 afterAction = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2566 this.Core.CreateSimpleReference(childSourceLineNumbers, TupleDefinitions.WixAction, sequenceTable.ToString(), afterAction); 2566 this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.WixAction, sequenceTable.ToString(), afterAction);
2567 } 2567 }
2568 else 2568 else
2569 { 2569 {
@@ -2574,7 +2574,7 @@ namespace WixToolset.Core
2574 if (customAction || showDialog || specialAction || specialStandardAction) 2574 if (customAction || showDialog || specialAction || specialStandardAction)
2575 { 2575 {
2576 beforeAction = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); 2576 beforeAction = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2577 this.Core.CreateSimpleReference(childSourceLineNumbers, TupleDefinitions.WixAction, sequenceTable.ToString(), beforeAction); 2577 this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.WixAction, sequenceTable.ToString(), beforeAction);
2578 } 2578 }
2579 else 2579 else
2580 { 2580 {
@@ -2588,7 +2588,7 @@ namespace WixToolset.Core
2588 if (showDialog) 2588 if (showDialog)
2589 { 2589 {
2590 actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib); 2590 actionName = this.Core.GetAttributeIdentifierValue(childSourceLineNumbers, attrib);
2591 this.Core.CreateSimpleReference(childSourceLineNumbers, TupleDefinitions.Dialog, actionName); 2591 this.Core.CreateSimpleReference(childSourceLineNumbers, SymbolDefinitions.Dialog, actionName);
2592 } 2592 }
2593 else 2593 else
2594 { 2594 {
@@ -2703,7 +2703,7 @@ namespace WixToolset.Core
2703 { 2703 {
2704 if (suppress) 2704 if (suppress)
2705 { 2705 {
2706 this.Core.AddTuple(new WixSuppressActionTuple(childSourceLineNumbers, new Identifier(AccessModifier.Public, sequenceTable, actionName)) 2706 this.Core.AddSymbol(new WixSuppressActionSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Public, sequenceTable, actionName))
2707 { 2707 {
2708 SequenceTable = sequenceTable, 2708 SequenceTable = sequenceTable,
2709 Action = actionName 2709 Action = actionName
@@ -2711,7 +2711,7 @@ namespace WixToolset.Core
2711 } 2711 }
2712 else 2712 else
2713 { 2713 {
2714 var tuple = this.Core.AddTuple(new WixActionTuple(childSourceLineNumbers, new Identifier(AccessModifier.Public, sequenceTable, actionName)) 2714 var symbol = this.Core.AddSymbol(new WixActionSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Public, sequenceTable, actionName))
2715 { 2715 {
2716 SequenceTable = sequenceTable, 2716 SequenceTable = sequenceTable,
2717 Action = actionName, 2717 Action = actionName,
@@ -2723,7 +2723,7 @@ namespace WixToolset.Core
2723 2723
2724 if (CompilerConstants.IntegerNotSet != sequence) 2724 if (CompilerConstants.IntegerNotSet != sequence)
2725 { 2725 {
2726 tuple.Sequence = sequence; 2726 symbol.Sequence = sequence;
2727 } 2727 }
2728 } 2728 }
2729 } 2729 }
@@ -2897,7 +2897,7 @@ namespace WixToolset.Core
2897 { 2897 {
2898 if (!String.IsNullOrEmpty(delayedAutoStart)) 2898 if (!String.IsNullOrEmpty(delayedAutoStart))
2899 { 2899 {
2900 this.Core.AddTuple(new MsiServiceConfigTuple(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".DS"))) 2900 this.Core.AddSymbol(new MsiServiceConfigSymbol(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".DS")))
2901 { 2901 {
2902 Name = name, 2902 Name = name,
2903 OnInstall = install, 2903 OnInstall = install,
@@ -2911,7 +2911,7 @@ namespace WixToolset.Core
2911 2911
2912 if (!String.IsNullOrEmpty(failureActionsWhen)) 2912 if (!String.IsNullOrEmpty(failureActionsWhen))
2913 { 2913 {
2914 this.Core.AddTuple(new MsiServiceConfigTuple(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".FA"))) 2914 this.Core.AddSymbol(new MsiServiceConfigSymbol(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".FA")))
2915 { 2915 {
2916 Name = name, 2916 Name = name,
2917 OnInstall = install, 2917 OnInstall = install,
@@ -2925,7 +2925,7 @@ namespace WixToolset.Core
2925 2925
2926 if (!String.IsNullOrEmpty(sid)) 2926 if (!String.IsNullOrEmpty(sid))
2927 { 2927 {
2928 this.Core.AddTuple(new MsiServiceConfigTuple(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".SS"))) 2928 this.Core.AddSymbol(new MsiServiceConfigSymbol(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".SS")))
2929 { 2929 {
2930 Name = name, 2930 Name = name,
2931 OnInstall = install, 2931 OnInstall = install,
@@ -2939,7 +2939,7 @@ namespace WixToolset.Core
2939 2939
2940 if (!String.IsNullOrEmpty(requiredPrivileges)) 2940 if (!String.IsNullOrEmpty(requiredPrivileges))
2941 { 2941 {
2942 this.Core.AddTuple(new MsiServiceConfigTuple(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".RP"))) 2942 this.Core.AddSymbol(new MsiServiceConfigSymbol(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".RP")))
2943 { 2943 {
2944 Name = name, 2944 Name = name,
2945 OnInstall = install, 2945 OnInstall = install,
@@ -2953,7 +2953,7 @@ namespace WixToolset.Core
2953 2953
2954 if (!String.IsNullOrEmpty(preShutdownDelay)) 2954 if (!String.IsNullOrEmpty(preShutdownDelay))
2955 { 2955 {
2956 this.Core.AddTuple(new MsiServiceConfigTuple(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".PD"))) 2956 this.Core.AddSymbol(new MsiServiceConfigSymbol(sourceLineNumbers, new Identifier(id.Access, String.Concat(id.Id, ".PD")))
2957 { 2957 {
2958 Name = name, 2958 Name = name,
2959 OnInstall = install, 2959 OnInstall = install,
@@ -3279,12 +3279,12 @@ namespace WixToolset.Core
3279 3279
3280 if (!this.Core.EncounteredError) 3280 if (!this.Core.EncounteredError)
3281 { 3281 {
3282 this.Core.AddTuple(new MsiServiceConfigFailureActionsTuple(sourceLineNumbers, id) 3282 this.Core.AddSymbol(new MsiServiceConfigFailureActionsSymbol(sourceLineNumbers, id)
3283 { 3283 {
3284 Name = name, 3284 Name = name,
3285 OnInstall = install, 3285 OnInstall = install,
3286 OnReinstall = reinstall, 3286 OnReinstall = reinstall,
3287 OnUninstall = uninstall, 3287 OnUninstall = uninstall,
3288 ResetPeriod = resetPeriod, 3288 ResetPeriod = resetPeriod,
3289 RebootMessage = rebootMessage, 3289 RebootMessage = rebootMessage,
3290 Command = command, 3290 Command = command,
@@ -3427,7 +3427,7 @@ namespace WixToolset.Core
3427 3427
3428 if (!this.Core.EncounteredError) 3428 if (!this.Core.EncounteredError)
3429 { 3429 {
3430 this.Core.AddTuple(new ServiceControlTuple(sourceLineNumbers, id) 3430 this.Core.AddSymbol(new ServiceControlSymbol(sourceLineNumbers, id)
3431 { 3431 {
3432 Name = name, 3432 Name = name,
3433 InstallRemove = installRemove, 3433 InstallRemove = installRemove,
@@ -3715,7 +3715,7 @@ namespace WixToolset.Core
3715 3715
3716 if (!this.Core.EncounteredError) 3716 if (!this.Core.EncounteredError)
3717 { 3717 {
3718 this.Core.AddTuple(new ServiceInstallTuple(sourceLineNumbers, id) 3718 this.Core.AddSymbol(new ServiceInstallSymbol(sourceLineNumbers, id)
3719 { 3719 {
3720 Name = name, 3720 Name = name,
3721 DisplayName = displayName, 3721 DisplayName = displayName,
@@ -3763,7 +3763,7 @@ namespace WixToolset.Core
3763 break; 3763 break;
3764 case "Id": 3764 case "Id":
3765 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 3765 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
3766 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Directory, id); 3766 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Directory, id);
3767 break; 3767 break;
3768 case "Sequence": 3768 case "Sequence":
3769 var sequenceValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 3769 var sequenceValue = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -3819,7 +3819,7 @@ namespace WixToolset.Core
3819 3819
3820 if (!this.Core.EncounteredError) 3820 if (!this.Core.EncounteredError)
3821 { 3821 {
3822 this.Core.AddTuple(new CustomActionTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, actionName)) 3822 this.Core.AddSymbol(new CustomActionSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, actionName))
3823 { 3823 {
3824 ExecutionType = executionType, 3824 ExecutionType = executionType,
3825 SourceType = CustomActionSourceType.Directory, 3825 SourceType = CustomActionSourceType.Directory,
@@ -3830,7 +3830,7 @@ namespace WixToolset.Core
3830 3830
3831 foreach (var sequence in sequences) 3831 foreach (var sequence in sequences)
3832 { 3832 {
3833 this.Core.ScheduleActionTuple(sourceLineNumbers, AccessModifier.Public, sequence, actionName, condition, afterAction: "CostInitialize"); 3833 this.Core.ScheduleActionSymbol(sourceLineNumbers, AccessModifier.Public, sequence, actionName, condition, afterAction: "CostInitialize");
3834 } 3834 }
3835 } 3835 }
3836 } 3836 }
@@ -3946,7 +3946,7 @@ namespace WixToolset.Core
3946 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "After", afterAction)); 3946 this.Core.Write(ErrorMessages.ActionScheduledRelativeToItself(sourceLineNumbers, node.Name.LocalName, "After", afterAction));
3947 } 3947 }
3948 3948
3949 this.Core.AddTuple(new CustomActionTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, actionName)) 3949 this.Core.AddSymbol(new CustomActionSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, actionName))
3950 { 3950 {
3951 ExecutionType = executionType, 3951 ExecutionType = executionType,
3952 SourceType = CustomActionSourceType.Property, 3952 SourceType = CustomActionSourceType.Property,
@@ -3957,7 +3957,7 @@ namespace WixToolset.Core
3957 3957
3958 foreach (var sequence in sequences) 3958 foreach (var sequence in sequences)
3959 { 3959 {
3960 this.Core.ScheduleActionTuple(sourceLineNumbers, AccessModifier.Public, sequence, actionName, condition, beforeAction, afterAction); 3960 this.Core.ScheduleActionSymbol(sourceLineNumbers, AccessModifier.Public, sequence, actionName, condition, beforeAction, afterAction);
3961 } 3961 }
3962 } 3962 }
3963 } 3963 }
@@ -4001,7 +4001,7 @@ namespace WixToolset.Core
4001 4001
4002 if (!this.Core.EncounteredError) 4002 if (!this.Core.EncounteredError)
4003 { 4003 {
4004 this.Core.AddTuple(new FileSFPCatalogTuple(sourceLineNumbers) 4004 this.Core.AddSymbol(new FileSFPCatalogSymbol(sourceLineNumbers)
4005 { 4005 {
4006 FileRef = id, 4006 FileRef = id,
4007 SFPCatalogRef = parentSFPCatalog 4007 SFPCatalogRef = parentSFPCatalog
@@ -4094,7 +4094,7 @@ namespace WixToolset.Core
4094 4094
4095 if (!this.Core.EncounteredError) 4095 if (!this.Core.EncounteredError)
4096 { 4096 {
4097 this.Core.AddTuple(new SFPCatalogTuple(sourceLineNumbers) 4097 this.Core.AddSymbol(new SFPCatalogSymbol(sourceLineNumbers)
4098 { 4098 {
4099 SFPCatalog = name, 4099 SFPCatalog = name,
4100 Catalog = sourceFile, 4100 Catalog = sourceFile,
@@ -4170,7 +4170,7 @@ namespace WixToolset.Core
4170 break; 4170 break;
4171 case "Icon": 4171 case "Icon":
4172 icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 4172 icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
4173 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Icon, icon); 4173 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Icon, icon);
4174 break; 4174 break;
4175 case "IconIndex": 4175 case "IconIndex":
4176 iconIndex = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Int16.MinValue + 1, Int16.MaxValue); 4176 iconIndex = this.Core.GetAttributeIntegerValue(sourceLineNumbers, attrib, Int16.MinValue + 1, Int16.MaxValue);
@@ -4368,7 +4368,7 @@ namespace WixToolset.Core
4368 target = String.Format(CultureInfo.InvariantCulture, "[#{0}]", defaultTarget); 4368 target = String.Format(CultureInfo.InvariantCulture, "[#{0}]", defaultTarget);
4369 } 4369 }
4370 4370
4371 this.Core.AddTuple(new ShortcutTuple(sourceLineNumbers, id) 4371 this.Core.AddSymbol(new ShortcutSymbol(sourceLineNumbers, id)
4372 { 4372 {
4373 DirectoryRef = directory, 4373 DirectoryRef = directory,
4374 Name = name, 4374 Name = name,
@@ -4445,7 +4445,7 @@ namespace WixToolset.Core
4445 4445
4446 if (!this.Core.EncounteredError) 4446 if (!this.Core.EncounteredError)
4447 { 4447 {
4448 this.Core.AddTuple(new MsiShortcutPropertyTuple(sourceLineNumbers, id) 4448 this.Core.AddSymbol(new MsiShortcutPropertySymbol(sourceLineNumbers, id)
4449 { 4449 {
4450 ShortcutRef = shortcutId, 4450 ShortcutRef = shortcutId,
4451 PropertyKey = key, 4451 PropertyKey = key,
@@ -4642,7 +4642,7 @@ namespace WixToolset.Core
4642 4642
4643 if (!this.Core.EncounteredError) 4643 if (!this.Core.EncounteredError)
4644 { 4644 {
4645 var tuple = this.Core.AddTuple(new TypeLibTuple(sourceLineNumbers) 4645 var symbol = this.Core.AddSymbol(new TypeLibSymbol(sourceLineNumbers)
4646 { 4646 {
4647 LibId = id, 4647 LibId = id,
4648 Language = language, 4648 Language = language,
@@ -4654,12 +4654,12 @@ namespace WixToolset.Core
4654 4654
4655 if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion) 4655 if (CompilerConstants.IntegerNotSet != majorVersion || CompilerConstants.IntegerNotSet != minorVersion)
4656 { 4656 {
4657 tuple.Version = (CompilerConstants.IntegerNotSet != majorVersion ? majorVersion * 256 : 0) + (CompilerConstants.IntegerNotSet != minorVersion ? minorVersion : 0); 4657 symbol.Version = (CompilerConstants.IntegerNotSet != majorVersion ? majorVersion * 256 : 0) + (CompilerConstants.IntegerNotSet != minorVersion ? minorVersion : 0);
4658 } 4658 }
4659 4659
4660 if (CompilerConstants.IntegerNotSet != cost) 4660 if (CompilerConstants.IntegerNotSet != cost)
4661 { 4661 {
4662 tuple.Cost = cost; 4662 symbol.Cost = cost;
4663 } 4663 }
4664 } 4664 }
4665 } 4665 }
@@ -4855,7 +4855,7 @@ namespace WixToolset.Core
4855 4855
4856 if (!this.Core.EncounteredError) 4856 if (!this.Core.EncounteredError)
4857 { 4857 {
4858 this.Core.AddTuple(new UpgradeTuple(sourceLineNumbers) 4858 this.Core.AddSymbol(new UpgradeSymbol(sourceLineNumbers)
4859 { 4859 {
4860 UpgradeCode = upgradeId, 4860 UpgradeCode = upgradeId,
4861 VersionMin = minimum, 4861 VersionMin = minimum,
@@ -4875,7 +4875,7 @@ namespace WixToolset.Core
4875 // if at least one row in Upgrade table lacks the OnlyDetect attribute. 4875 // if at least one row in Upgrade table lacks the OnlyDetect attribute.
4876 if (!onlyDetect) 4876 if (!onlyDetect)
4877 { 4877 {
4878 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixAction, "InstallExecuteSequence", "RemoveExistingProducts"); 4878 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixAction, "InstallExecuteSequence", "RemoveExistingProducts");
4879 } 4879 }
4880 } 4880 }
4881 } 4881 }
@@ -4923,7 +4923,7 @@ namespace WixToolset.Core
4923 break; 4923 break;
4924 case "TargetFile": 4924 case "TargetFile":
4925 targetFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 4925 targetFile = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
4926 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, targetFile); 4926 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, targetFile);
4927 break; 4927 break;
4928 case "TargetProperty": 4928 case "TargetProperty":
4929 targetProperty = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 4929 targetProperty = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -4980,7 +4980,7 @@ namespace WixToolset.Core
4980 4980
4981 if (!this.Core.EncounteredError) 4981 if (!this.Core.EncounteredError)
4982 { 4982 {
4983 var tuple = this.Core.AddTuple(new VerbTuple(sourceLineNumbers) 4983 var symbol = this.Core.AddSymbol(new VerbSymbol(sourceLineNumbers)
4984 { 4984 {
4985 ExtensionRef = extension, 4985 ExtensionRef = extension,
4986 Verb = id, 4986 Verb = id,
@@ -4990,7 +4990,7 @@ namespace WixToolset.Core
4990 4990
4991 if (CompilerConstants.IntegerNotSet != sequence) 4991 if (CompilerConstants.IntegerNotSet != sequence)
4992 { 4992 {
4993 tuple.Sequence = sequence; 4993 symbol.Sequence = sequence;
4994 } 4994 }
4995 } 4995 }
4996 } 4996 }
@@ -5086,7 +5086,7 @@ namespace WixToolset.Core
5086 5086
5087 if (!this.Core.EncounteredError) 5087 if (!this.Core.EncounteredError)
5088 { 5088 {
5089 this.Core.AddTuple(new WixVariableTuple(sourceLineNumbers, id) 5089 this.Core.AddSymbol(new WixVariableSymbol(sourceLineNumbers, id)
5090 { 5090 {
5091 Value = value, 5091 Value = value,
5092 Overridable = overridable 5092 Overridable = overridable
diff --git a/src/WixToolset.Core/Compiler_Bundle.cs b/src/WixToolset.Core/Compiler_Bundle.cs
index d88cb7f5..578c7dcd 100644
--- a/src/WixToolset.Core/Compiler_Bundle.cs
+++ b/src/WixToolset.Core/Compiler_Bundle.cs
@@ -11,7 +11,7 @@ namespace WixToolset.Core
11 using System.Xml.Linq; 11 using System.Xml.Linq;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Burn; 13 using WixToolset.Data.Burn;
14 using WixToolset.Data.Tuples; 14 using WixToolset.Data.Symbols;
15 using WixToolset.Extensibility; 15 using WixToolset.Extensibility;
16 16
17 /// <summary> 17 /// <summary>
@@ -85,7 +85,7 @@ namespace WixToolset.Core
85 85
86 if (!this.Core.EncounteredError) 86 if (!this.Core.EncounteredError)
87 { 87 {
88 this.Core.AddTuple(new WixApprovedExeForElevationTuple(sourceLineNumbers, id) 88 this.Core.AddSymbol(new WixApprovedExeForElevationSymbol(sourceLineNumbers, id)
89 { 89 {
90 Key = key, 90 Key = key,
91 ValueName = valueName, 91 ValueName = valueName,
@@ -287,7 +287,7 @@ namespace WixToolset.Core
287 this.ParseBundleExtensionElement(child); 287 this.ParseBundleExtensionElement(child);
288 break; 288 break;
289 case "BundleExtensionRef": 289 case "BundleExtensionRef":
290 this.ParseSimpleRefElement(child, TupleDefinitions.WixBundleExtension); 290 this.ParseSimpleRefElement(child, SymbolDefinitions.WixBundleExtension);
291 break; 291 break;
292 case "OptionalUpdateRegistration": 292 case "OptionalUpdateRegistration":
293 this.ParseOptionalUpdateRegistrationElement(child, manufacturer, parentName, name); 293 this.ParseOptionalUpdateRegistrationElement(child, manufacturer, parentName, name);
@@ -308,7 +308,7 @@ namespace WixToolset.Core
308 this.ParseContainerElement(child); 308 this.ParseContainerElement(child);
309 break; 309 break;
310 case "ContainerRef": 310 case "ContainerRef":
311 this.ParseSimpleRefElement(child, TupleDefinitions.WixBundleContainer); 311 this.ParseSimpleRefElement(child, SymbolDefinitions.WixBundleContainer);
312 break; 312 break;
313 case "Log": 313 case "Log":
314 if (logSeen) 314 if (logSeen)
@@ -332,7 +332,7 @@ namespace WixToolset.Core
332 this.ParseSetVariableElement(child); 332 this.ParseSetVariableElement(child);
333 break; 333 break;
334 case "SetVariableRef": 334 case "SetVariableRef":
335 this.ParseSimpleRefElement(child, TupleDefinitions.WixSetVariable); 335 this.ParseSimpleRefElement(child, SymbolDefinitions.WixSetVariable);
336 break; 336 break;
337 case "Update": 337 case "Update":
338 this.ParseUpdateElement(child); 338 this.ParseUpdateElement(child);
@@ -361,7 +361,7 @@ namespace WixToolset.Core
361 361
362 if (!this.Core.EncounteredError) 362 if (!this.Core.EncounteredError)
363 { 363 {
364 var tuple = this.Core.AddTuple(new WixBundleTuple(sourceLineNumbers) 364 var symbol = this.Core.AddSymbol(new WixBundleSymbol(sourceLineNumbers)
365 { 365 {
366 UpgradeCode = upgradeCode, 366 UpgradeCode = upgradeCode,
367 Version = version, 367 Version = version,
@@ -385,46 +385,46 @@ namespace WixToolset.Core
385 if (!String.IsNullOrEmpty(logVariablePrefixAndExtension)) 385 if (!String.IsNullOrEmpty(logVariablePrefixAndExtension))
386 { 386 {
387 var split = logVariablePrefixAndExtension.Split(':'); 387 var split = logVariablePrefixAndExtension.Split(':');
388 tuple.LogPathVariable = split[0]; 388 symbol.LogPathVariable = split[0];
389 tuple.LogPrefix = split[1]; 389 symbol.LogPrefix = split[1];
390 tuple.LogExtension = split[2]; 390 symbol.LogExtension = split[2];
391 } 391 }
392 392
393 if (null != upgradeCode) 393 if (null != upgradeCode)
394 { 394 {
395 this.Core.AddTuple(new WixRelatedBundleTuple(sourceLineNumbers) 395 this.Core.AddSymbol(new WixRelatedBundleSymbol(sourceLineNumbers)
396 { 396 {
397 BundleId = upgradeCode, 397 BundleId = upgradeCode,
398 Action = RelatedBundleActionType.Upgrade, 398 Action = RelatedBundleActionType.Upgrade,
399 }); 399 });
400 } 400 }
401 401
402 this.Core.AddTuple(new WixBundleContainerTuple(sourceLineNumbers, Compiler.BurnDefaultAttachedContainerId) 402 this.Core.AddSymbol(new WixBundleContainerSymbol(sourceLineNumbers, Compiler.BurnDefaultAttachedContainerId)
403 { 403 {
404 Name = "bundle-attached.cab", 404 Name = "bundle-attached.cab",
405 Type = ContainerType.Attached, 405 Type = ContainerType.Attached,
406 }); 406 });
407 407
408 // Ensure that the bundle stores the well-known persisted values. 408 // Ensure that the bundle stores the well-known persisted values.
409 this.Core.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_NAME)) 409 this.Core.AddSymbol(new WixBundleVariableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_NAME))
410 { 410 {
411 Hidden = false, 411 Hidden = false,
412 Persisted = true, 412 Persisted = true,
413 }); 413 });
414 414
415 this.Core.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_ORIGINAL_SOURCE)) 415 this.Core.AddSymbol(new WixBundleVariableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_ORIGINAL_SOURCE))
416 { 416 {
417 Hidden = false, 417 Hidden = false,
418 Persisted = true, 418 Persisted = true,
419 }); 419 });
420 420
421 this.Core.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_ORIGINAL_SOURCE_FOLDER)) 421 this.Core.AddSymbol(new WixBundleVariableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_ORIGINAL_SOURCE_FOLDER))
422 { 422 {
423 Hidden = false, 423 Hidden = false,
424 Persisted = true, 424 Persisted = true,
425 }); 425 });
426 426
427 this.Core.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_LAST_USED_SOURCE)) 427 this.Core.AddSymbol(new WixBundleVariableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, BurnConstants.BURN_BUNDLE_LAST_USED_SOURCE))
428 { 428 {
429 Hidden = false, 429 Hidden = false,
430 Persisted = true, 430 Persisted = true,
@@ -529,7 +529,7 @@ namespace WixToolset.Core
529 { 529 {
530 this.CreatePayloadRow(sourceLineNumbers, id, Path.GetFileName(sourceFile), sourceFile, null, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, ComplexReferenceChildType.Unknown, null, YesNoDefaultType.Yes, YesNoType.Yes, null, null, null); 530 this.CreatePayloadRow(sourceLineNumbers, id, Path.GetFileName(sourceFile), sourceFile, null, ComplexReferenceParentType.Container, Compiler.BurnUXContainerId, ComplexReferenceChildType.Unknown, null, YesNoDefaultType.Yes, YesNoType.Yes, null, null, null);
531 531
532 this.Core.AddTuple(new WixBundleCatalogTuple(sourceLineNumbers, id) 532 this.Core.AddSymbol(new WixBundleCatalogSymbol(sourceLineNumbers, id)
533 { 533 {
534 PayloadRef = id.Id, 534 PayloadRef = id.Id,
535 }); 535 });
@@ -631,7 +631,7 @@ namespace WixToolset.Core
631 631
632 if (!this.Core.EncounteredError) 632 if (!this.Core.EncounteredError)
633 { 633 {
634 this.Core.AddTuple(new WixBundleContainerTuple(sourceLineNumbers, id) 634 this.Core.AddSymbol(new WixBundleContainerSymbol(sourceLineNumbers, id)
635 { 635 {
636 Name = name, 636 Name = name,
637 Type = type, 637 Type = type,
@@ -694,7 +694,7 @@ namespace WixToolset.Core
694 // Add the application as an attached container and if an Id was provided add that too. 694 // Add the application as an attached container and if an Id was provided add that too.
695 if (!this.Core.EncounteredError) 695 if (!this.Core.EncounteredError)
696 { 696 {
697 this.Core.AddTuple(new WixBundleContainerTuple(sourceLineNumbers, Compiler.BurnUXContainerId) 697 this.Core.AddSymbol(new WixBundleContainerSymbol(sourceLineNumbers, Compiler.BurnUXContainerId)
698 { 698 {
699 Name = "bundle-ux.cab", 699 Name = "bundle-ux.cab",
700 Type = ContainerType.Attached 700 Type = ContainerType.Attached
@@ -702,7 +702,7 @@ namespace WixToolset.Core
702 702
703 if (null != id) 703 if (null != id)
704 { 704 {
705 this.Core.AddTuple(new WixBootstrapperApplicationTuple(sourceLineNumbers, id)); 705 this.Core.AddSymbol(new WixBootstrapperApplicationSymbol(sourceLineNumbers, id));
706 } 706 }
707 } 707 }
708 } 708 }
@@ -770,7 +770,7 @@ namespace WixToolset.Core
770 } 770 }
771 else 771 else
772 { 772 {
773 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBootstrapperApplication, id); 773 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBootstrapperApplication, id);
774 } 774 }
775 } 775 }
776 776
@@ -786,7 +786,7 @@ namespace WixToolset.Core
786 string customDataId = null; 786 string customDataId = null;
787 WixBundleCustomDataType? customDataType = null; 787 WixBundleCustomDataType? customDataType = null;
788 string extensionId = null; 788 string extensionId = null;
789 var attributeDefinitions = new List<WixBundleCustomDataAttributeTuple>(); 789 var attributeDefinitions = new List<WixBundleCustomDataAttributeSymbol>();
790 var foundAttributeDefinitions = false; 790 var foundAttributeDefinitions = false;
791 791
792 foreach (var attrib in node.Attributes()) 792 foreach (var attrib in node.Attributes())
@@ -816,7 +816,7 @@ namespace WixToolset.Core
816 break; 816 break;
817 case "ExtensionId": 817 case "ExtensionId":
818 extensionId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 818 extensionId = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
819 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBundleExtension, extensionId); 819 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundleExtension, extensionId);
820 break; 820 break;
821 default: 821 default:
822 this.Core.UnexpectedAttribute(node, attrib); 822 this.Core.UnexpectedAttribute(node, attrib);
@@ -890,9 +890,9 @@ namespace WixToolset.Core
890 { 890 {
891 if (!this.Core.EncounteredError) 891 if (!this.Core.EncounteredError)
892 { 892 {
893 var attributeNames = String.Join(new string(WixBundleCustomDataTuple.AttributeNamesSeparator, 1), attributeDefinitions.Select(c => c.Name)); 893 var attributeNames = String.Join(new string(WixBundleCustomDataSymbol.AttributeNamesSeparator, 1), attributeDefinitions.Select(c => c.Name));
894 894
895 this.Core.AddTuple(new WixBundleCustomDataTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, customDataId)) 895 this.Core.AddSymbol(new WixBundleCustomDataSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, customDataId))
896 { 896 {
897 AttributeNames = attributeNames, 897 AttributeNames = attributeNames,
898 Type = customDataType.Value, 898 Type = customDataType.Value,
@@ -975,7 +975,7 @@ namespace WixToolset.Core
975 /// <param name="node">Element to parse.</param> 975 /// <param name="node">Element to parse.</param>
976 /// <param name="sourceLineNumbers">Element's SourceLineNumbers.</param> 976 /// <param name="sourceLineNumbers">Element's SourceLineNumbers.</param>
977 /// <param name="customDataId">BundleCustomData Id.</param> 977 /// <param name="customDataId">BundleCustomData Id.</param>
978 private WixBundleCustomDataAttributeTuple ParseBundleAttributeDefinitionElement(XElement node, SourceLineNumber sourceLineNumbers, string customDataId) 978 private WixBundleCustomDataAttributeSymbol ParseBundleAttributeDefinitionElement(XElement node, SourceLineNumber sourceLineNumbers, string customDataId)
979 { 979 {
980 string attributeName = null; 980 string attributeName = null;
981 981
@@ -1004,7 +1004,7 @@ namespace WixToolset.Core
1004 return null; 1004 return null;
1005 } 1005 }
1006 1006
1007 var customDataAttribute = this.Core.AddTuple(new WixBundleCustomDataAttributeTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, attributeName)) 1007 var customDataAttribute = this.Core.AddSymbol(new WixBundleCustomDataAttributeSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, attributeName))
1008 { 1008 {
1009 CustomDataRef = customDataId, 1009 CustomDataRef = customDataId,
1010 Name = attributeName, 1010 Name = attributeName,
@@ -1058,7 +1058,7 @@ namespace WixToolset.Core
1058 1058
1059 if (!this.Core.EncounteredError) 1059 if (!this.Core.EncounteredError)
1060 { 1060 {
1061 this.Core.AddTuple(new WixBundleCustomDataCellTuple(childSourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, elementId, attributeName)) 1061 this.Core.AddSymbol(new WixBundleCustomDataCellSymbol(childSourceLineNumbers, new Identifier(AccessModifier.Private, customDataId, elementId, attributeName))
1062 { 1062 {
1063 ElementId = elementId, 1063 ElementId = elementId,
1064 AttributeRef = attributeName, 1064 AttributeRef = attributeName,
@@ -1075,7 +1075,7 @@ namespace WixToolset.Core
1075 1075
1076 if (!this.Core.EncounteredError) 1076 if (!this.Core.EncounteredError)
1077 { 1077 {
1078 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBundleCustomData, customDataId); 1078 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundleCustomData, customDataId);
1079 } 1079 }
1080 } 1080 }
1081 1081
@@ -1138,7 +1138,7 @@ namespace WixToolset.Core
1138 // Add the BundleExtension. 1138 // Add the BundleExtension.
1139 if (!this.Core.EncounteredError) 1139 if (!this.Core.EncounteredError)
1140 { 1140 {
1141 this.Core.AddTuple(new WixBundleExtensionTuple(sourceLineNumbers, id) 1141 this.Core.AddSymbol(new WixBundleExtensionSymbol(sourceLineNumbers, id)
1142 { 1142 {
1143 PayloadRef = id.Id, 1143 PayloadRef = id.Id,
1144 }); 1144 });
@@ -1236,7 +1236,7 @@ namespace WixToolset.Core
1236 1236
1237 if (!this.Core.EncounteredError) 1237 if (!this.Core.EncounteredError)
1238 { 1238 {
1239 this.Core.AddTuple(new WixUpdateRegistrationTuple(sourceLineNumbers) 1239 this.Core.AddSymbol(new WixUpdateRegistrationSymbol(sourceLineNumbers)
1240 { 1240 {
1241 Manufacturer = manufacturer, 1241 Manufacturer = manufacturer,
1242 Department = department, 1242 Department = department,
@@ -1493,15 +1493,15 @@ namespace WixToolset.Core
1493 /// <param name="node">Element to parse</param> 1493 /// <param name="node">Element to parse</param>
1494 /// <param name="parentType">ComplexReferenceParentType of parent element</param> 1494 /// <param name="parentType">ComplexReferenceParentType of parent element</param>
1495 /// <param name="parentId">Identifier of parent element.</param> 1495 /// <param name="parentId">Identifier of parent element.</param>
1496 private WixBundlePayloadTuple CreatePayloadRow(SourceLineNumber sourceLineNumbers, Identifier id, string name, string sourceFile, string downloadUrl, ComplexReferenceParentType parentType, 1496 private WixBundlePayloadSymbol CreatePayloadRow(SourceLineNumber sourceLineNumbers, Identifier id, string name, string sourceFile, string downloadUrl, ComplexReferenceParentType parentType,
1497 Identifier parentId, ComplexReferenceChildType previousType, Identifier previousId, YesNoDefaultType compressed, YesNoType enableSignatureVerification, string displayName, string description, 1497 Identifier parentId, ComplexReferenceChildType previousType, Identifier previousId, YesNoDefaultType compressed, YesNoType enableSignatureVerification, string displayName, string description,
1498 RemotePayload remotePayload) 1498 RemotePayload remotePayload)
1499 { 1499 {
1500 WixBundlePayloadTuple tuple = null; 1500 WixBundlePayloadSymbol symbol = null;
1501 1501
1502 if (!this.Core.EncounteredError) 1502 if (!this.Core.EncounteredError)
1503 { 1503 {
1504 tuple = this.Core.AddTuple(new WixBundlePayloadTuple(sourceLineNumbers, id) 1504 symbol = this.Core.AddSymbol(new WixBundlePayloadSymbol(sourceLineNumbers, id)
1505 { 1505 {
1506 Name = String.IsNullOrEmpty(name) ? Path.GetFileName(sourceFile) : name, 1506 Name = String.IsNullOrEmpty(name) ? Path.GetFileName(sourceFile) : name,
1507 SourceFile = new IntermediateFieldPathValue { Path = sourceFile }, 1507 SourceFile = new IntermediateFieldPathValue { Path = sourceFile },
@@ -1515,19 +1515,19 @@ namespace WixToolset.Core
1515 1515
1516 if (null != remotePayload) 1516 if (null != remotePayload)
1517 { 1517 {
1518 tuple.Description = remotePayload.Description; 1518 symbol.Description = remotePayload.Description;
1519 tuple.DisplayName = remotePayload.ProductName; 1519 symbol.DisplayName = remotePayload.ProductName;
1520 tuple.Hash = remotePayload.Hash; 1520 symbol.Hash = remotePayload.Hash;
1521 tuple.PublicKey = remotePayload.CertificatePublicKey; 1521 symbol.PublicKey = remotePayload.CertificatePublicKey;
1522 tuple.Thumbprint = remotePayload.CertificateThumbprint; 1522 symbol.Thumbprint = remotePayload.CertificateThumbprint;
1523 tuple.FileSize = remotePayload.Size; 1523 symbol.FileSize = remotePayload.Size;
1524 tuple.Version = remotePayload.Version; 1524 symbol.Version = remotePayload.Version;
1525 } 1525 }
1526 1526
1527 this.CreateGroupAndOrderingRows(sourceLineNumbers, parentType, parentId.Id, ComplexReferenceChildType.Payload, id.Id, previousType, previousId?.Id); 1527 this.CreateGroupAndOrderingRows(sourceLineNumbers, parentType, parentId.Id, ComplexReferenceChildType.Payload, id.Id, previousType, previousId?.Id);
1528 } 1528 }
1529 1529
1530 return tuple; 1530 return symbol;
1531 } 1531 }
1532 1532
1533 /// <summary> 1533 /// <summary>
@@ -1599,7 +1599,7 @@ namespace WixToolset.Core
1599 1599
1600 if (!this.Core.EncounteredError) 1600 if (!this.Core.EncounteredError)
1601 { 1601 {
1602 this.Core.AddTuple(new WixBundlePayloadGroupTuple(sourceLineNumbers, id)); 1602 this.Core.AddSymbol(new WixBundlePayloadGroupSymbol(sourceLineNumbers, id));
1603 1603
1604 this.CreateGroupAndOrderingRows(sourceLineNumbers, parentType, parentId?.Id, ComplexReferenceChildType.PayloadGroup, id.Id, ComplexReferenceChildType.Unknown, null); 1604 this.CreateGroupAndOrderingRows(sourceLineNumbers, parentType, parentId?.Id, ComplexReferenceChildType.PayloadGroup, id.Id, ComplexReferenceChildType.Unknown, null);
1605 } 1605 }
@@ -1627,7 +1627,7 @@ namespace WixToolset.Core
1627 { 1627 {
1628 case "Id": 1628 case "Id":
1629 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib); 1629 id = this.Core.GetAttributeIdentifier(sourceLineNumbers, attrib);
1630 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBundlePayloadGroup, id.Id); 1630 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePayloadGroup, id.Id);
1631 break; 1631 break;
1632 default: 1632 default:
1633 this.Core.UnexpectedAttribute(node, attrib); 1633 this.Core.UnexpectedAttribute(node, attrib);
@@ -1682,7 +1682,7 @@ namespace WixToolset.Core
1682 // TODO: Should we define our own enum for this, just to ensure there's no "cross-contamination"? 1682 // TODO: Should we define our own enum for this, just to ensure there's no "cross-contamination"?
1683 // TODO: Also, we could potentially include an 'Attributes' field to track things like 1683 // TODO: Also, we could potentially include an 'Attributes' field to track things like
1684 // 'before' vs. 'after', and explicit vs. inferred dependencies. 1684 // 'before' vs. 'after', and explicit vs. inferred dependencies.
1685 this.Core.AddTuple(new WixOrderingTuple(sourceLineNumbers) 1685 this.Core.AddSymbol(new WixOrderingSymbol(sourceLineNumbers)
1686 { 1686 {
1687 ItemType = type, 1687 ItemType = type,
1688 ItemIdRef = id, 1688 ItemIdRef = id,
@@ -1739,7 +1739,7 @@ namespace WixToolset.Core
1739 1739
1740 if (!this.Core.EncounteredError) 1740 if (!this.Core.EncounteredError)
1741 { 1741 {
1742 this.Core.AddTuple(new WixBundlePackageExitCodeTuple(sourceLineNumbers) 1742 this.Core.AddSymbol(new WixBundlePackageExitCodeSymbol(sourceLineNumbers)
1743 { 1743 {
1744 ChainPackageId = packageId, 1744 ChainPackageId = packageId,
1745 Code = value, 1745 Code = value,
@@ -1847,7 +1847,7 @@ namespace WixToolset.Core
1847 1847
1848 if (!this.Core.EncounteredError) 1848 if (!this.Core.EncounteredError)
1849 { 1849 {
1850 this.Core.AddTuple(new WixChainTuple(sourceLineNumbers) 1850 this.Core.AddSymbol(new WixChainSymbol(sourceLineNumbers)
1851 { 1851 {
1852 Attributes = attributes 1852 Attributes = attributes
1853 }); 1853 });
@@ -2393,13 +2393,13 @@ namespace WixToolset.Core
2393 this.CreatePayloadRow(sourceLineNumbers, id, name, sourceFile, downloadUrl, ComplexReferenceParentType.Package, id, 2393 this.CreatePayloadRow(sourceLineNumbers, id, name, sourceFile, downloadUrl, ComplexReferenceParentType.Package, id,
2394 ComplexReferenceChildType.Unknown, null, compressed, enableSignatureVerification, displayName, description, remotePayload); 2394 ComplexReferenceChildType.Unknown, null, compressed, enableSignatureVerification, displayName, description, remotePayload);
2395 2395
2396 this.Core.AddTuple(new WixChainItemTuple(sourceLineNumbers, id)); 2396 this.Core.AddSymbol(new WixChainItemSymbol(sourceLineNumbers, id));
2397 2397
2398 WixBundlePackageAttributes attributes = 0; 2398 WixBundlePackageAttributes attributes = 0;
2399 attributes |= (YesNoType.Yes == permanent) ? WixBundlePackageAttributes.Permanent : 0; 2399 attributes |= (YesNoType.Yes == permanent) ? WixBundlePackageAttributes.Permanent : 0;
2400 attributes |= (YesNoType.Yes == visible) ? WixBundlePackageAttributes.Visible : 0; 2400 attributes |= (YesNoType.Yes == visible) ? WixBundlePackageAttributes.Visible : 0;
2401 2401
2402 var chainPackageTuple = this.Core.AddTuple(new WixBundlePackageTuple(sourceLineNumbers, id) 2402 var chainPackageSymbol = this.Core.AddSymbol(new WixBundlePackageSymbol(sourceLineNumbers, id)
2403 { 2403 {
2404 Type = packageType, 2404 Type = packageType,
2405 PayloadRef = id.Id, 2405 PayloadRef = id.Id,
@@ -2412,28 +2412,28 @@ namespace WixToolset.Core
2412 2412
2413 if (YesNoAlwaysType.NotSet != cache) 2413 if (YesNoAlwaysType.NotSet != cache)
2414 { 2414 {
2415 chainPackageTuple.Cache = cache; 2415 chainPackageSymbol.Cache = cache;
2416 } 2416 }
2417 2417
2418 if (YesNoType.NotSet != vital) 2418 if (YesNoType.NotSet != vital)
2419 { 2419 {
2420 chainPackageTuple.Vital = (vital == YesNoType.Yes); 2420 chainPackageSymbol.Vital = (vital == YesNoType.Yes);
2421 } 2421 }
2422 2422
2423 if (YesNoDefaultType.NotSet != perMachine) 2423 if (YesNoDefaultType.NotSet != perMachine)
2424 { 2424 {
2425 chainPackageTuple.PerMachine = perMachine; 2425 chainPackageSymbol.PerMachine = perMachine;
2426 } 2426 }
2427 2427
2428 if (CompilerConstants.IntegerNotSet != installSize) 2428 if (CompilerConstants.IntegerNotSet != installSize)
2429 { 2429 {
2430 chainPackageTuple.InstallSize = installSize; 2430 chainPackageSymbol.InstallSize = installSize;
2431 } 2431 }
2432 2432
2433 switch (packageType) 2433 switch (packageType)
2434 { 2434 {
2435 case WixBundlePackageType.Exe: 2435 case WixBundlePackageType.Exe:
2436 this.Core.AddTuple(new WixBundleExePackageTuple(sourceLineNumbers, id) 2436 this.Core.AddSymbol(new WixBundleExePackageSymbol(sourceLineNumbers, id)
2437 { 2437 {
2438 Attributes = WixBundleExePackageAttributes.None, 2438 Attributes = WixBundleExePackageAttributes.None,
2439 DetectCondition = detectCondition, 2439 DetectCondition = detectCondition,
@@ -2449,7 +2449,7 @@ namespace WixToolset.Core
2449 msiAttributes |= (YesNoType.Yes == enableFeatureSelection) ? WixBundleMsiPackageAttributes.EnableFeatureSelection : 0; 2449 msiAttributes |= (YesNoType.Yes == enableFeatureSelection) ? WixBundleMsiPackageAttributes.EnableFeatureSelection : 0;
2450 msiAttributes |= (YesNoType.Yes == forcePerMachine) ? WixBundleMsiPackageAttributes.ForcePerMachine : 0; 2450 msiAttributes |= (YesNoType.Yes == forcePerMachine) ? WixBundleMsiPackageAttributes.ForcePerMachine : 0;
2451 2451
2452 this.Core.AddTuple(new WixBundleMsiPackageTuple(sourceLineNumbers, id) 2452 this.Core.AddSymbol(new WixBundleMsiPackageSymbol(sourceLineNumbers, id)
2453 { 2453 {
2454 Attributes = msiAttributes 2454 Attributes = msiAttributes
2455 }); 2455 });
@@ -2459,14 +2459,14 @@ namespace WixToolset.Core
2459 WixBundleMspPackageAttributes mspAttributes = 0; 2459 WixBundleMspPackageAttributes mspAttributes = 0;
2460 mspAttributes |= (YesNoType.Yes == slipstream) ? WixBundleMspPackageAttributes.Slipstream : 0; 2460 mspAttributes |= (YesNoType.Yes == slipstream) ? WixBundleMspPackageAttributes.Slipstream : 0;
2461 2461
2462 this.Core.AddTuple(new WixBundleMspPackageTuple(sourceLineNumbers, id) 2462 this.Core.AddSymbol(new WixBundleMspPackageSymbol(sourceLineNumbers, id)
2463 { 2463 {
2464 Attributes = mspAttributes 2464 Attributes = mspAttributes
2465 }); 2465 });
2466 break; 2466 break;
2467 2467
2468 case WixBundlePackageType.Msu: 2468 case WixBundlePackageType.Msu:
2469 this.Core.AddTuple(new WixBundleMsuPackageTuple(sourceLineNumbers, id) 2469 this.Core.AddSymbol(new WixBundleMsuPackageSymbol(sourceLineNumbers, id)
2470 { 2470 {
2471 DetectCondition = detectCondition, 2471 DetectCondition = detectCondition,
2472 MsuKB = msuKB 2472 MsuKB = msuKB
@@ -2530,7 +2530,7 @@ namespace WixToolset.Core
2530 2530
2531 if (!this.Core.EncounteredError) 2531 if (!this.Core.EncounteredError)
2532 { 2532 {
2533 this.Core.AddTuple(new WixBundlePackageCommandLineTuple(sourceLineNumbers) 2533 this.Core.AddSymbol(new WixBundlePackageCommandLineSymbol(sourceLineNumbers)
2534 { 2534 {
2535 WixBundlePackageRef = packageId, 2535 WixBundlePackageRef = packageId,
2536 InstallArgument = installArgument, 2536 InstallArgument = installArgument,
@@ -2622,7 +2622,7 @@ namespace WixToolset.Core
2622 2622
2623 if (!this.Core.EncounteredError) 2623 if (!this.Core.EncounteredError)
2624 { 2624 {
2625 this.Core.AddTuple(new WixBundlePackageGroupTuple(sourceLineNumbers, id)); 2625 this.Core.AddSymbol(new WixBundlePackageGroupSymbol(sourceLineNumbers, id));
2626 } 2626 }
2627 } 2627 }
2628 2628
@@ -2664,7 +2664,7 @@ namespace WixToolset.Core
2664 { 2664 {
2665 case "Id": 2665 case "Id":
2666 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2666 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2667 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBundlePackageGroup, id); 2667 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackageGroup, id);
2668 break; 2668 break;
2669 case "After": 2669 case "After":
2670 after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2670 after = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
@@ -2717,9 +2717,9 @@ namespace WixToolset.Core
2717 /// <param name="previousId">Identifier of previous item, if any.</param> 2717 /// <param name="previousId">Identifier of previous item, if any.</param>
2718 private void CreateRollbackBoundary(SourceLineNumber sourceLineNumbers, Identifier id, YesNoType vital, YesNoType transaction, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType previousType, string previousId) 2718 private void CreateRollbackBoundary(SourceLineNumber sourceLineNumbers, Identifier id, YesNoType vital, YesNoType transaction, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType previousType, string previousId)
2719 { 2719 {
2720 this.Core.AddTuple(new WixChainItemTuple(sourceLineNumbers, id)); 2720 this.Core.AddSymbol(new WixChainItemSymbol(sourceLineNumbers, id));
2721 2721
2722 var rollbackBoundary = this.Core.AddTuple(new WixBundleRollbackBoundaryTuple(sourceLineNumbers, id)); 2722 var rollbackBoundary = this.Core.AddSymbol(new WixBundleRollbackBoundarySymbol(sourceLineNumbers, id));
2723 2723
2724 if (YesNoType.NotSet != vital) 2724 if (YesNoType.NotSet != vital)
2725 { 2725 {
@@ -2812,7 +2812,7 @@ namespace WixToolset.Core
2812 2812
2813 if (!this.Core.EncounteredError) 2813 if (!this.Core.EncounteredError)
2814 { 2814 {
2815 var tuple = this.Core.AddTuple(new WixBundleMsiPropertyTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, packageId, name)) 2815 var symbol = this.Core.AddSymbol(new WixBundleMsiPropertySymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, packageId, name))
2816 { 2816 {
2817 PackageRef = packageId, 2817 PackageRef = packageId,
2818 Name = name, 2818 Name = name,
@@ -2821,7 +2821,7 @@ namespace WixToolset.Core
2821 2821
2822 if (!String.IsNullOrEmpty(condition)) 2822 if (!String.IsNullOrEmpty(condition))
2823 { 2823 {
2824 tuple.Condition = condition; 2824 symbol.Condition = condition;
2825 } 2825 }
2826 } 2826 }
2827 } 2827 }
@@ -2844,7 +2844,7 @@ namespace WixToolset.Core
2844 { 2844 {
2845 case "Id": 2845 case "Id":
2846 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 2846 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
2847 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixBundlePackage, id); 2847 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixBundlePackage, id);
2848 break; 2848 break;
2849 default: 2849 default:
2850 this.Core.UnexpectedAttribute(node, attrib); 2850 this.Core.UnexpectedAttribute(node, attrib);
@@ -2866,7 +2866,7 @@ namespace WixToolset.Core
2866 2866
2867 if (!this.Core.EncounteredError) 2867 if (!this.Core.EncounteredError)
2868 { 2868 {
2869 this.Core.AddTuple(new WixBundleSlipstreamMspTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, packageId, id)) 2869 this.Core.AddSymbol(new WixBundleSlipstreamMspSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, packageId, id))
2870 { 2870 {
2871 TargetPackageRef = packageId, 2871 TargetPackageRef = packageId,
2872 MspPackageRef = id 2872 MspPackageRef = id
@@ -2940,7 +2940,7 @@ namespace WixToolset.Core
2940 2940
2941 if (!this.Core.EncounteredError) 2941 if (!this.Core.EncounteredError)
2942 { 2942 {
2943 this.Core.AddTuple(new WixRelatedBundleTuple(sourceLineNumbers) 2943 this.Core.AddSymbol(new WixRelatedBundleSymbol(sourceLineNumbers)
2944 { 2944 {
2945 BundleId = id, 2945 BundleId = id,
2946 Action = actionType, 2946 Action = actionType,
@@ -2986,7 +2986,7 @@ namespace WixToolset.Core
2986 2986
2987 if (!this.Core.EncounteredError) 2987 if (!this.Core.EncounteredError)
2988 { 2988 {
2989 this.Core.AddTuple(new WixBundleUpdateTuple(sourceLineNumbers) 2989 this.Core.AddSymbol(new WixBundleUpdateSymbol(sourceLineNumbers)
2990 { 2990 {
2991 Location = location 2991 Location = location
2992 }); 2992 });
@@ -3052,11 +3052,11 @@ namespace WixToolset.Core
3052 id = this.Core.CreateIdentifier("sbv", variable, condition, after, value, type); 3052 id = this.Core.CreateIdentifier("sbv", variable, condition, after, value, type);
3053 } 3053 }
3054 3054
3055 this.Core.CreateWixSearchTuple(sourceLineNumbers, node.Name.LocalName, id, variable, condition, after); 3055 this.Core.CreateWixSearchSymbol(sourceLineNumbers, node.Name.LocalName, id, variable, condition, after);
3056 3056
3057 if (!this.Messaging.EncounteredError) 3057 if (!this.Messaging.EncounteredError)
3058 { 3058 {
3059 this.Core.AddTuple(new WixSetVariableTuple(sourceLineNumbers, id) 3059 this.Core.AddSymbol(new WixSetVariableSymbol(sourceLineNumbers, id)
3060 { 3060 {
3061 Value = value, 3061 Value = value,
3062 Type = type, 3062 Type = type,
@@ -3130,7 +3130,7 @@ namespace WixToolset.Core
3130 3130
3131 if (!this.Core.EncounteredError) 3131 if (!this.Core.EncounteredError)
3132 { 3132 {
3133 this.Core.AddTuple(new WixBundleVariableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, name)) 3133 this.Core.AddSymbol(new WixBundleVariableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, name))
3134 { 3134 {
3135 Value = value, 3135 Value = value,
3136 Type = type, 3136 Type = type,
@@ -3145,7 +3145,7 @@ namespace WixToolset.Core
3145 var newType = type; 3145 var newType = type;
3146 if (newType == null && value != null) 3146 if (newType == null && value != null)
3147 { 3147 {
3148 // Infer the type from the current value... 3148 // Infer the type from the current value...
3149 if (value.StartsWith("v", StringComparison.OrdinalIgnoreCase)) 3149 if (value.StartsWith("v", StringComparison.OrdinalIgnoreCase))
3150 { 3150 {
3151 // Version constructor does not support simple "v#" syntax so check to see if the value is 3151 // Version constructor does not support simple "v#" syntax so check to see if the value is
diff --git a/src/WixToolset.Core/Compiler_EmbeddedUI.cs b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
index 847ee2a8..4353e3cd 100644
--- a/src/WixToolset.Core/Compiler_EmbeddedUI.cs
+++ b/src/WixToolset.Core/Compiler_EmbeddedUI.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core
6 using System.IO; 6 using System.IO;
7 using System.Xml.Linq; 7 using System.Xml.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 using WixToolset.Data.WindowsInstaller; 10 using WixToolset.Data.WindowsInstaller;
11 11
12 /// <summary> 12 /// <summary>
@@ -43,7 +43,7 @@ namespace WixToolset.Core
43 } 43 }
44 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 44 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
45 type = 0x2; 45 type = 0x2;
46 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, source); // add a reference to the appropriate Binary 46 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, source); // add a reference to the appropriate Binary
47 break; 47 break;
48 case "CommandLine": 48 case "CommandLine":
49 commandLine = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 49 commandLine = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
@@ -58,7 +58,7 @@ namespace WixToolset.Core
58 } 58 }
59 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 59 source = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
60 type = 0x12; 60 type = 0x12;
61 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.File, source); // add a reference to the appropriate File 61 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.File, source); // add a reference to the appropriate File
62 break; 62 break;
63 case "PropertySource": 63 case "PropertySource":
64 if (null != source) 64 if (null != source)
@@ -92,7 +92,7 @@ namespace WixToolset.Core
92 92
93 if (!this.Core.EncounteredError) 93 if (!this.Core.EncounteredError)
94 { 94 {
95 this.Core.AddTuple(new MsiEmbeddedChainerTuple(sourceLineNumbers, id) 95 this.Core.AddSymbol(new MsiEmbeddedChainerSymbol(sourceLineNumbers, id)
96 { 96 {
97 Condition = condition, 97 Condition = condition,
98 CommandLine = commandLine, 98 CommandLine = commandLine,
@@ -318,7 +318,7 @@ namespace WixToolset.Core
318 318
319 if (!this.Core.EncounteredError) 319 if (!this.Core.EncounteredError)
320 { 320 {
321 this.Core.AddTuple(new MsiEmbeddedUITuple(sourceLineNumbers, id) 321 this.Core.AddSymbol(new MsiEmbeddedUISymbol(sourceLineNumbers, id)
322 { 322 {
323 FileName = name, 323 FileName = name,
324 EntryPoint = true, 324 EntryPoint = true,
@@ -405,7 +405,7 @@ namespace WixToolset.Core
405 405
406 if (!this.Core.EncounteredError) 406 if (!this.Core.EncounteredError)
407 { 407 {
408 this.Core.AddTuple(new MsiEmbeddedUITuple(sourceLineNumbers, id) 408 this.Core.AddSymbol(new MsiEmbeddedUISymbol(sourceLineNumbers, id)
409 { 409 {
410 FileName = name, 410 FileName = name,
411 Source = sourceFile 411 Source = sourceFile
diff --git a/src/WixToolset.Core/Compiler_Module.cs b/src/WixToolset.Core/Compiler_Module.cs
index 6166ae72..a7d94701 100644
--- a/src/WixToolset.Core/Compiler_Module.cs
+++ b/src/WixToolset.Core/Compiler_Module.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core
6 using System.Globalization; 6 using System.Globalization;
7 using System.Xml.Linq; 7 using System.Xml.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 using WixToolset.Extensibility; 10 using WixToolset.Extensibility;
11 11
12 /// <summary> 12 /// <summary>
@@ -136,7 +136,7 @@ namespace WixToolset.Core
136 this.ParseCustomActionElement(child); 136 this.ParseCustomActionElement(child);
137 break; 137 break;
138 case "CustomActionRef": 138 case "CustomActionRef":
139 this.ParseSimpleRefElement(child, TupleDefinitions.CustomAction); 139 this.ParseSimpleRefElement(child, SymbolDefinitions.CustomAction);
140 break; 140 break;
141 case "CustomTable": 141 case "CustomTable":
142 this.ParseCustomTableElement(child); 142 this.ParseCustomTableElement(child);
@@ -154,7 +154,7 @@ namespace WixToolset.Core
154 this.ParseEmbeddedChainerElement(child); 154 this.ParseEmbeddedChainerElement(child);
155 break; 155 break;
156 case "EmbeddedChainerRef": 156 case "EmbeddedChainerRef":
157 this.ParseSimpleRefElement(child, TupleDefinitions.MsiEmbeddedChainer); 157 this.ParseSimpleRefElement(child, SymbolDefinitions.MsiEmbeddedChainer);
158 break; 158 break;
159 case "EnsureTable": 159 case "EnsureTable":
160 this.ParseEnsureTableElement(child); 160 this.ParseEnsureTableElement(child);
@@ -178,7 +178,7 @@ namespace WixToolset.Core
178 this.ParsePropertyElement(child); 178 this.ParsePropertyElement(child);
179 break; 179 break;
180 case "PropertyRef": 180 case "PropertyRef":
181 this.ParseSimpleRefElement(child, TupleDefinitions.Property); 181 this.ParseSimpleRefElement(child, SymbolDefinitions.Property);
182 break; 182 break;
183 case "SetDirectory": 183 case "SetDirectory":
184 this.ParseSetDirectoryElement(child); 184 this.ParseSetDirectoryElement(child);
@@ -197,7 +197,7 @@ namespace WixToolset.Core
197 this.ParseUIElement(child); 197 this.ParseUIElement(child);
198 break; 198 break;
199 case "UIRef": 199 case "UIRef":
200 this.ParseSimpleRefElement(child, TupleDefinitions.WixUI); 200 this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI);
201 break; 201 break;
202 case "WixVariable": 202 case "WixVariable":
203 this.ParseWixVariableElement(child); 203 this.ParseWixVariableElement(child);
@@ -216,13 +216,13 @@ namespace WixToolset.Core
216 216
217 if (!this.Core.EncounteredError) 217 if (!this.Core.EncounteredError)
218 { 218 {
219 var tuple = this.Core.AddTuple(new ModuleSignatureTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, this.activeName, this.activeLanguage)) 219 var symbol = this.Core.AddSymbol(new ModuleSignatureSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, this.activeName, this.activeLanguage))
220 { 220 {
221 ModuleID = this.activeName, 221 ModuleID = this.activeName,
222 Version = version 222 Version = version
223 }); 223 });
224 224
225 tuple.Set((int)ModuleSignatureTupleFields.Language, this.activeLanguage); 225 symbol.Set((int)ModuleSignatureSymbolFields.Language, this.activeLanguage);
226 } 226 }
227 } 227 }
228 finally 228 finally
@@ -284,7 +284,7 @@ namespace WixToolset.Core
284 284
285 if (!this.Core.EncounteredError) 285 if (!this.Core.EncounteredError)
286 { 286 {
287 var tuple = this.Core.AddTuple(new ModuleDependencyTuple(sourceLineNumbers) 287 var symbol = this.Core.AddSymbol(new ModuleDependencySymbol(sourceLineNumbers)
288 { 288 {
289 ModuleID = this.activeName, 289 ModuleID = this.activeName,
290 RequiredID = requiredId, 290 RequiredID = requiredId,
@@ -292,7 +292,7 @@ namespace WixToolset.Core
292 RequiredVersion = requiredVersion 292 RequiredVersion = requiredVersion
293 }); 293 });
294 294
295 tuple.Set((int)ModuleDependencyTupleFields.ModuleLanguage, this.activeLanguage); 295 symbol.Set((int)ModuleDependencySymbolFields.ModuleLanguage, this.activeLanguage);
296 } 296 }
297 } 297 }
298 298
@@ -365,7 +365,7 @@ namespace WixToolset.Core
365 365
366 if (!this.Core.EncounteredError) 366 if (!this.Core.EncounteredError)
367 { 367 {
368 var tuple = this.Core.AddTuple(new ModuleExclusionTuple(sourceLineNumbers) 368 var symbol = this.Core.AddSymbol(new ModuleExclusionSymbol(sourceLineNumbers)
369 { 369 {
370 ModuleID = this.activeName, 370 ModuleID = this.activeName,
371 ExcludedID = excludedId, 371 ExcludedID = excludedId,
@@ -373,8 +373,8 @@ namespace WixToolset.Core
373 ExcludedMaxVersion = excludedMaxVersion 373 ExcludedMaxVersion = excludedMaxVersion
374 }); 374 });
375 375
376 tuple.Set((int)ModuleExclusionTupleFields.ModuleLanguage, this.activeLanguage); 376 symbol.Set((int)ModuleExclusionSymbolFields.ModuleLanguage, this.activeLanguage);
377 tuple.Set((int)ModuleExclusionTupleFields.ExcludedLanguage, excludedLanguageField); 377 symbol.Set((int)ModuleExclusionSymbolFields.ExcludedLanguage, excludedLanguageField);
378 } 378 }
379 } 379 }
380 380
@@ -485,7 +485,7 @@ namespace WixToolset.Core
485 485
486 if (!this.Core.EncounteredError) 486 if (!this.Core.EncounteredError)
487 { 487 {
488 this.Core.AddTuple(new ModuleConfigurationTuple(sourceLineNumbers, name) 488 this.Core.AddSymbol(new ModuleConfigurationSymbol(sourceLineNumbers, name)
489 { 489 {
490 Format = format, 490 Format = format,
491 Type = type, 491 Type = type,
@@ -563,7 +563,7 @@ namespace WixToolset.Core
563 563
564 if (!this.Core.EncounteredError) 564 if (!this.Core.EncounteredError)
565 { 565 {
566 this.Core.AddTuple(new ModuleSubstitutionTuple(sourceLineNumbers) 566 this.Core.AddSymbol(new ModuleSubstitutionSymbol(sourceLineNumbers)
567 { 567 {
568 Table = table, 568 Table = table,
569 Row = rowKeys, 569 Row = rowKeys,
@@ -616,7 +616,7 @@ namespace WixToolset.Core
616 616
617 if (!this.Core.EncounteredError) 617 if (!this.Core.EncounteredError)
618 { 618 {
619 this.Core.AddTuple(new WixSuppressModularizationTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, name))); 619 this.Core.AddSymbol(new WixSuppressModularizationSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, name)));
620 } 620 }
621 } 621 }
622 622
@@ -658,7 +658,7 @@ namespace WixToolset.Core
658 658
659 if (!this.Core.EncounteredError) 659 if (!this.Core.EncounteredError)
660 { 660 {
661 this.Core.AddTuple(new ModuleIgnoreTableTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, id))); 661 this.Core.AddSymbol(new ModuleIgnoreTableSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, id)));
662 } 662 }
663 } 663 }
664 } 664 }
diff --git a/src/WixToolset.Core/Compiler_Patch.cs b/src/WixToolset.Core/Compiler_Patch.cs
index f7481143..73e7f521 100644
--- a/src/WixToolset.Core/Compiler_Patch.cs
+++ b/src/WixToolset.Core/Compiler_Patch.cs
@@ -8,7 +8,7 @@ namespace WixToolset.Core
8 using System.Globalization; 8 using System.Globalization;
9 using System.Xml.Linq; 9 using System.Xml.Linq;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using WixToolset.Extensibility; 12 using WixToolset.Extensibility;
13 13
14 /// <summary> 14 /// <summary>
@@ -197,7 +197,7 @@ namespace WixToolset.Core
197 197
198 if (!this.Core.EncounteredError) 198 if (!this.Core.EncounteredError)
199 { 199 {
200 this.Core.AddTuple(new WixPatchIdTuple(sourceLineNumbers, new Identifier(AccessModifier.Public, patchId)) 200 this.Core.AddSymbol(new WixPatchIdSymbol(sourceLineNumbers, new Identifier(AccessModifier.Public, patchId))
201 { 201 {
202 ClientPatchId = clientPatchId, 202 ClientPatchId = clientPatchId,
203 OptimizePatchSizeForLargeFiles = optimizePatchSizeForLargeFiles, 203 OptimizePatchSizeForLargeFiles = optimizePatchSizeForLargeFiles,
@@ -425,7 +425,7 @@ namespace WixToolset.Core
425 425
426 if (!this.Core.EncounteredError) 426 if (!this.Core.EncounteredError)
427 { 427 {
428 this.Core.AddTuple(new MsiPatchSequenceTuple(sourceLineNumbers) 428 this.Core.AddSymbol(new MsiPatchSequenceSymbol(sourceLineNumbers)
429 { 429 {
430 PatchFamily = id.Id, 430 PatchFamily = id.Id,
431 ProductCode = productCode, 431 ProductCode = productCode,
@@ -504,7 +504,7 @@ namespace WixToolset.Core
504 504
505 if (!this.Core.EncounteredError) 505 if (!this.Core.EncounteredError)
506 { 506 {
507 this.Core.AddTuple(new WixPatchFamilyGroupTuple(sourceLineNumbers, id)); 507 this.Core.AddSymbol(new WixPatchFamilyGroupSymbol(sourceLineNumbers, id));
508 508
509 //Add this PatchFamilyGroup and its parent in WixGroup. 509 //Add this PatchFamilyGroup and its parent in WixGroup.
510 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.PatchFamilyGroup, id.Id); 510 this.Core.CreateWixGroupRow(sourceLineNumbers, parentType, parentId, ComplexReferenceChildType.PatchFamilyGroup, id.Id);
@@ -532,7 +532,7 @@ namespace WixToolset.Core
532 { 532 {
533 case "Id": 533 case "Id":
534 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 534 id = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
535 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixPatchFamilyGroup, id); 535 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixPatchFamilyGroup, id);
536 break; 536 break;
537 default: 537 default:
538 this.Core.UnexpectedAttribute(node, attrib); 538 this.Core.UnexpectedAttribute(node, attrib);
@@ -621,7 +621,7 @@ namespace WixToolset.Core
621 // By default, target ProductCodes should be added. 621 // By default, target ProductCodes should be added.
622 if (!replace) 622 if (!replace)
623 { 623 {
624 this.Core.AddTuple(new WixPatchTargetTuple(sourceLineNumbers) 624 this.Core.AddSymbol(new WixPatchTargetSymbol(sourceLineNumbers)
625 { 625 {
626 ProductCode = "*" 626 ProductCode = "*"
627 }); 627 });
@@ -629,7 +629,7 @@ namespace WixToolset.Core
629 629
630 foreach (var targetProductCode in targetProductCodes) 630 foreach (var targetProductCode in targetProductCodes)
631 { 631 {
632 this.Core.AddTuple(new WixPatchTargetTuple(sourceLineNumbers) 632 this.Core.AddSymbol(new WixPatchTargetSymbol(sourceLineNumbers)
633 { 633 {
634 ProductCode = targetProductCode 634 ProductCode = targetProductCode
635 }); 635 });
@@ -639,7 +639,7 @@ namespace WixToolset.Core
639 639
640 private void AddMsiPatchMetadata(SourceLineNumber sourceLineNumbers, string company, string property, string value) 640 private void AddMsiPatchMetadata(SourceLineNumber sourceLineNumbers, string company, string property, string value)
641 { 641 {
642 this.Core.AddTuple(new MsiPatchMetadataTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, company, property)) 642 this.Core.AddSymbol(new MsiPatchMetadataSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, company, property))
643 { 643 {
644 Company = company, 644 Company = company,
645 Property = property, 645 Property = property,
diff --git a/src/WixToolset.Core/Compiler_PatchCreation.cs b/src/WixToolset.Core/Compiler_PatchCreation.cs
index 3371d84e..ddd07654 100644
--- a/src/WixToolset.Core/Compiler_PatchCreation.cs
+++ b/src/WixToolset.Core/Compiler_PatchCreation.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core
7 using System.Globalization; 7 using System.Globalization;
8 using System.Xml.Linq; 8 using System.Xml.Linq;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 12
13 /// <summary> 13 /// <summary>
@@ -258,7 +258,7 @@ namespace WixToolset.Core
258 258
259 if (!this.Core.EncounteredError) 259 if (!this.Core.EncounteredError)
260 { 260 {
261 var tuple = this.Core.AddTuple(new ImageFamiliesTuple(sourceLineNumbers) 261 var symbol = this.Core.AddSymbol(new ImageFamiliesSymbol(sourceLineNumbers)
262 { 262 {
263 Family = name, 263 Family = name,
264 MediaSrcPropName = mediaSrcProp, 264 MediaSrcPropName = mediaSrcProp,
@@ -268,12 +268,12 @@ namespace WixToolset.Core
268 268
269 if (CompilerConstants.IntegerNotSet != diskId) 269 if (CompilerConstants.IntegerNotSet != diskId)
270 { 270 {
271 tuple.MediaDiskId = diskId; 271 symbol.MediaDiskId = diskId;
272 } 272 }
273 273
274 if (CompilerConstants.IntegerNotSet != sequenceStart) 274 if (CompilerConstants.IntegerNotSet != sequenceStart)
275 { 275 {
276 tuple.FileSequenceStart = sequenceStart; 276 symbol.FileSequenceStart = sequenceStart;
277 } 277 }
278 } 278 }
279 } 279 }
@@ -379,7 +379,7 @@ namespace WixToolset.Core
379 379
380 if (!this.Core.EncounteredError) 380 if (!this.Core.EncounteredError)
381 { 381 {
382 this.Core.AddTuple(new UpgradedImagesTuple(sourceLineNumbers) 382 this.Core.AddSymbol(new UpgradedImagesSymbol(sourceLineNumbers)
383 { 383 {
384 Upgraded = upgrade, 384 Upgraded = upgrade,
385 MsiPath = sourceFile, 385 MsiPath = sourceFile,
@@ -462,7 +462,7 @@ namespace WixToolset.Core
462 { 462 {
463 if (ignore) 463 if (ignore)
464 { 464 {
465 this.Core.AddTuple(new UpgradedFilesToIgnoreTuple(sourceLineNumbers) 465 this.Core.AddSymbol(new UpgradedFilesToIgnoreSymbol(sourceLineNumbers)
466 { 466 {
467 Upgraded = upgrade, 467 Upgraded = upgrade,
468 FTK = file 468 FTK = file
@@ -470,7 +470,7 @@ namespace WixToolset.Core
470 } 470 }
471 else 471 else
472 { 472 {
473 this.Core.AddTuple(new UpgradedFilesOptionalDataTuple(sourceLineNumbers) 473 this.Core.AddSymbol(new UpgradedFilesOptionalDataSymbol(sourceLineNumbers)
474 { 474 {
475 Upgraded = upgrade, 475 Upgraded = upgrade,
476 FTK = file, 476 FTK = file,
@@ -591,7 +591,7 @@ namespace WixToolset.Core
591 591
592 if (!this.Core.EncounteredError) 592 if (!this.Core.EncounteredError)
593 { 593 {
594 this.Core.AddTuple(new TargetImagesTuple(sourceLineNumbers) 594 this.Core.AddSymbol(new TargetImagesSymbol(sourceLineNumbers)
595 { 595 {
596 Target = target, 596 Target = target,
597 MsiPath = sourceFile, 597 MsiPath = sourceFile,
@@ -673,7 +673,7 @@ namespace WixToolset.Core
673 673
674 if (!this.Core.EncounteredError) 674 if (!this.Core.EncounteredError)
675 { 675 {
676 var tuple = this.Core.AddTuple(new TargetFilesOptionalDataTuple(sourceLineNumbers) 676 var symbol = this.Core.AddSymbol(new TargetFilesOptionalDataSymbol(sourceLineNumbers)
677 { 677 {
678 Target = target, 678 Target = target,
679 FTK = file, 679 FTK = file,
@@ -684,9 +684,9 @@ namespace WixToolset.Core
684 684
685 if (null != protectOffsets) 685 if (null != protectOffsets)
686 { 686 {
687 tuple.RetainOffsets = protectOffsets; 687 symbol.RetainOffsets = protectOffsets;
688 688
689 this.Core.AddTuple(new FamilyFileRangesTuple(sourceLineNumbers) 689 this.Core.AddSymbol(new FamilyFileRangesSymbol(sourceLineNumbers)
690 { 690 {
691 Family = family, 691 Family = family,
692 FTK = file, 692 FTK = file,
@@ -793,7 +793,7 @@ namespace WixToolset.Core
793 793
794 if (!this.Core.EncounteredError) 794 if (!this.Core.EncounteredError)
795 { 795 {
796 var tuple = this.Core.AddTuple(new ExternalFilesTuple(sourceLineNumbers) 796 var symbol = this.Core.AddSymbol(new ExternalFilesSymbol(sourceLineNumbers)
797 { 797 {
798 Family = family, 798 Family = family,
799 FTK = file, 799 FTK = file,
@@ -805,17 +805,17 @@ namespace WixToolset.Core
805 805
806 if (null != protectOffsets) 806 if (null != protectOffsets)
807 { 807 {
808 tuple.RetainOffsets = protectOffsets; 808 symbol.RetainOffsets = protectOffsets;
809 } 809 }
810 810
811 if (CompilerConstants.IntegerNotSet != order) 811 if (CompilerConstants.IntegerNotSet != order)
812 { 812 {
813 tuple.Order = order; 813 symbol.Order = order;
814 } 814 }
815 815
816 if (null != protectOffsets) 816 if (null != protectOffsets)
817 { 817 {
818 this.Core.AddTuple(new FamilyFileRangesTuple(sourceLineNumbers) 818 this.Core.AddSymbol(new FamilyFileRangesSymbol(sourceLineNumbers)
819 { 819 {
820 Family = family, 820 Family = family,
821 FTK = file, 821 FTK = file,
@@ -890,7 +890,7 @@ namespace WixToolset.Core
890 890
891 if (!this.Core.EncounteredError) 891 if (!this.Core.EncounteredError)
892 { 892 {
893 this.Core.AddTuple(new FamilyFileRangesTuple(sourceLineNumbers) 893 this.Core.AddSymbol(new FamilyFileRangesSymbol(sourceLineNumbers)
894 { 894 {
895 Family = family, 895 Family = family,
896 FTK = file, 896 FTK = file,
@@ -1251,7 +1251,7 @@ namespace WixToolset.Core
1251 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "ProductCode")); 1251 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Target", "ProductCode"));
1252 } 1252 }
1253 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib); 1253 target = this.Core.GetAttributeValue(sourceLineNumbers, attrib);
1254 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.TargetImages, target); 1254 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.TargetImages, target);
1255 break; 1255 break;
1256 case "Sequence": 1256 case "Sequence":
1257 sequence = this.Core.GetAttributeVersionValue(sourceLineNumbers, attrib); 1257 sequence = this.Core.GetAttributeVersionValue(sourceLineNumbers, attrib);
@@ -1282,7 +1282,7 @@ namespace WixToolset.Core
1282 1282
1283 if (!this.Core.EncounteredError) 1283 if (!this.Core.EncounteredError)
1284 { 1284 {
1285 this.Core.AddTuple(new PatchSequenceTuple(sourceLineNumbers) 1285 this.Core.AddSymbol(new PatchSequenceSymbol(sourceLineNumbers)
1286 { 1286 {
1287 PatchFamily = family, 1287 PatchFamily = family,
1288 Target = target, 1288 Target = target,
@@ -1294,7 +1294,7 @@ namespace WixToolset.Core
1294 1294
1295 private void AddPatchMetadata(SourceLineNumber sourceLineNumbers, string company, string property, string value) 1295 private void AddPatchMetadata(SourceLineNumber sourceLineNumbers, string company, string property, string value)
1296 { 1296 {
1297 this.Core.AddTuple(new PatchMetadataTuple(sourceLineNumbers, new Identifier(AccessModifier.Private, company, property)) 1297 this.Core.AddSymbol(new PatchMetadataSymbol(sourceLineNumbers, new Identifier(AccessModifier.Private, company, property))
1298 { 1298 {
1299 Company = company, 1299 Company = company,
1300 Property = property, 1300 Property = property,
diff --git a/src/WixToolset.Core/Compiler_UI.cs b/src/WixToolset.Core/Compiler_UI.cs
index 9038f727..1ecf4f64 100644
--- a/src/WixToolset.Core/Compiler_UI.cs
+++ b/src/WixToolset.Core/Compiler_UI.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core
6 using System.Collections; 6 using System.Collections;
7 using System.Xml.Linq; 7 using System.Xml.Linq;
8 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples; 9 using WixToolset.Data.Symbols;
10 using WixToolset.Data.WindowsInstaller; 10 using WixToolset.Data.WindowsInstaller;
11 using WixToolset.Extensibility; 11 using WixToolset.Extensibility;
12 12
@@ -70,13 +70,13 @@ namespace WixToolset.Core
70 this.ParseBillboardActionElement(child); 70 this.ParseBillboardActionElement(child);
71 break; 71 break;
72 case "ComboBox": 72 case "ComboBox":
73 this.ParseControlGroupElement(child, TupleDefinitionType.ComboBox, "ListItem"); 73 this.ParseControlGroupElement(child, SymbolDefinitionType.ComboBox, "ListItem");
74 break; 74 break;
75 case "Dialog": 75 case "Dialog":
76 this.ParseDialogElement(child); 76 this.ParseDialogElement(child);
77 break; 77 break;
78 case "DialogRef": 78 case "DialogRef":
79 this.ParseSimpleRefElement(child, TupleDefinitions.Dialog); 79 this.ParseSimpleRefElement(child, SymbolDefinitions.Dialog);
80 break; 80 break;
81 case "EmbeddedUI": 81 case "EmbeddedUI":
82 if (0 < embeddedUICount) // there can be only one embedded UI 82 if (0 < embeddedUICount) // there can be only one embedded UI
@@ -91,10 +91,10 @@ namespace WixToolset.Core
91 this.ParseErrorElement(child); 91 this.ParseErrorElement(child);
92 break; 92 break;
93 case "ListBox": 93 case "ListBox":
94 this.ParseControlGroupElement(child, TupleDefinitionType.ListBox, "ListItem"); 94 this.ParseControlGroupElement(child, SymbolDefinitionType.ListBox, "ListItem");
95 break; 95 break;
96 case "ListView": 96 case "ListView":
97 this.ParseControlGroupElement(child, TupleDefinitionType.ListView, "ListItem"); 97 this.ParseControlGroupElement(child, SymbolDefinitionType.ListView, "ListItem");
98 break; 98 break;
99 case "ProgressText": 99 case "ProgressText":
100 this.ParseActionTextElement(child); 100 this.ParseActionTextElement(child);
@@ -132,10 +132,10 @@ namespace WixToolset.Core
132 this.ParsePropertyElement(child); 132 this.ParsePropertyElement(child);
133 break; 133 break;
134 case "PropertyRef": 134 case "PropertyRef":
135 this.ParseSimpleRefElement(child, TupleDefinitions.Property); 135 this.ParseSimpleRefElement(child, SymbolDefinitions.Property);
136 break; 136 break;
137 case "UIRef": 137 case "UIRef":
138 this.ParseSimpleRefElement(child, TupleDefinitions.WixUI); 138 this.ParseSimpleRefElement(child, SymbolDefinitions.WixUI);
139 break; 139 break;
140 140
141 default: 141 default:
@@ -151,7 +151,7 @@ namespace WixToolset.Core
151 151
152 if (null != id && !this.Core.EncounteredError) 152 if (null != id && !this.Core.EncounteredError)
153 { 153 {
154 this.Core.AddTuple(new WixUITuple(sourceLineNumbers, id)); 154 this.Core.AddSymbol(new WixUISymbol(sourceLineNumbers, id));
155 } 155 }
156 } 156 }
157 157
@@ -159,10 +159,10 @@ namespace WixToolset.Core
159 /// Parses a list item element. 159 /// Parses a list item element.
160 /// </summary> 160 /// </summary>
161 /// <param name="node">Element to parse.</param> 161 /// <param name="node">Element to parse.</param>
162 /// <param name="tupleType">Type of tuple to create.</param> 162 /// <param name="symbolType">Type of symbol to create.</param>
163 /// <param name="property">Identifier of property referred to by list item.</param> 163 /// <param name="property">Identifier of property referred to by list item.</param>
164 /// <param name="order">Relative order of list items.</param> 164 /// <param name="order">Relative order of list items.</param>
165 private void ParseListItemElement(XElement node, TupleDefinitionType tupleType, string property, ref int order) 165 private void ParseListItemElement(XElement node, SymbolDefinitionType symbolType, string property, ref int order)
166 { 166 {
167 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 167 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
168 string icon = null; 168 string icon = null;
@@ -176,10 +176,10 @@ namespace WixToolset.Core
176 switch (attrib.Name.LocalName) 176 switch (attrib.Name.LocalName)
177 { 177 {
178 case "Icon": 178 case "Icon":
179 if (TupleDefinitionType.ListView == tupleType) 179 if (SymbolDefinitionType.ListView == symbolType)
180 { 180 {
181 icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 181 icon = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
182 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, icon); 182 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, icon);
183 } 183 }
184 else 184 else
185 { 185 {
@@ -212,10 +212,10 @@ namespace WixToolset.Core
212 212
213 if (!this.Core.EncounteredError) 213 if (!this.Core.EncounteredError)
214 { 214 {
215 switch (tupleType) 215 switch (symbolType)
216 { 216 {
217 case TupleDefinitionType.ComboBox: 217 case SymbolDefinitionType.ComboBox:
218 this.Core.AddTuple(new ComboBoxTuple(sourceLineNumbers) 218 this.Core.AddSymbol(new ComboBoxSymbol(sourceLineNumbers)
219 { 219 {
220 Property = property, 220 Property = property,
221 Order = ++order, 221 Order = ++order,
@@ -223,8 +223,8 @@ namespace WixToolset.Core
223 Text = text, 223 Text = text,
224 }); 224 });
225 break; 225 break;
226 case TupleDefinitionType.ListBox: 226 case SymbolDefinitionType.ListBox:
227 this.Core.AddTuple(new ListBoxTuple(sourceLineNumbers) 227 this.Core.AddSymbol(new ListBoxSymbol(sourceLineNumbers)
228 { 228 {
229 Property = property, 229 Property = property,
230 Order = ++order, 230 Order = ++order,
@@ -232,8 +232,8 @@ namespace WixToolset.Core
232 Text = text, 232 Text = text,
233 }); 233 });
234 break; 234 break;
235 case TupleDefinitionType.ListView: 235 case SymbolDefinitionType.ListView:
236 var tuple = this.Core.AddTuple(new ListViewTuple(sourceLineNumbers) 236 var symbol = this.Core.AddSymbol(new ListViewSymbol(sourceLineNumbers)
237 { 237 {
238 Property = property, 238 Property = property,
239 Order = ++order, 239 Order = ++order,
@@ -243,11 +243,11 @@ namespace WixToolset.Core
243 243
244 if (null != icon) 244 if (null != icon)
245 { 245 {
246 tuple.BinaryRef = icon; 246 symbol.BinaryRef = icon;
247 } 247 }
248 break; 248 break;
249 default: 249 default:
250 throw new ArgumentOutOfRangeException(nameof(tupleType)); 250 throw new ArgumentOutOfRangeException(nameof(symbolType));
251 } 251 }
252 } 252 }
253 } 253 }
@@ -284,7 +284,7 @@ namespace WixToolset.Core
284 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Icon", "Text")); 284 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Icon", "Text"));
285 } 285 }
286 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 286 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
287 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, text); 287 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, text);
288 type = RadioButtonType.Bitmap; 288 type = RadioButtonType.Bitmap;
289 break; 289 break;
290 case "Height": 290 case "Height":
@@ -299,7 +299,7 @@ namespace WixToolset.Core
299 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Text")); 299 this.Core.Write(ErrorMessages.IllegalAttributeWithOtherAttributes(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, "Bitmap", "Text"));
300 } 300 }
301 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 301 text = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
302 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, text); 302 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, text);
303 type = RadioButtonType.Icon; 303 type = RadioButtonType.Icon;
304 break; 304 break;
305 case "Text": 305 case "Text":
@@ -365,7 +365,7 @@ namespace WixToolset.Core
365 365
366 if (!this.Core.EncounteredError) 366 if (!this.Core.EncounteredError)
367 { 367 {
368 var tuple = this.Core.AddTuple(new RadioButtonTuple(sourceLineNumbers) 368 var symbol = this.Core.AddSymbol(new RadioButtonSymbol(sourceLineNumbers)
369 { 369 {
370 Property = property, 370 Property = property,
371 Order = ++order, 371 Order = ++order,
@@ -374,10 +374,10 @@ namespace WixToolset.Core
374 Help = (null != tooltip || null != help) ? String.Concat(tooltip, "|", help) : null 374 Help = (null != tooltip || null != help) ? String.Concat(tooltip, "|", help) : null
375 }); 375 });
376 376
377 tuple.Set((int)RadioButtonTupleFields.X, x); 377 symbol.Set((int)RadioButtonSymbolFields.X, x);
378 tuple.Set((int)RadioButtonTupleFields.Y, y); 378 symbol.Set((int)RadioButtonSymbolFields.Y, y);
379 tuple.Set((int)RadioButtonTupleFields.Width, width); 379 symbol.Set((int)RadioButtonSymbolFields.Width, width);
380 tuple.Set((int)RadioButtonTupleFields.Height, height); 380 symbol.Set((int)RadioButtonSymbolFields.Height, height);
381 } 381 }
382 382
383 return type; 383 return type;
@@ -401,7 +401,7 @@ namespace WixToolset.Core
401 { 401 {
402 case "Id": 402 case "Id":
403 action = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 403 action = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
404 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.WixAction, "InstallExecuteSequence", action); 404 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.WixAction, "InstallExecuteSequence", action);
405 break; 405 break;
406 default: 406 default:
407 this.Core.UnexpectedAttribute(node, attrib); 407 this.Core.UnexpectedAttribute(node, attrib);
@@ -464,7 +464,7 @@ namespace WixToolset.Core
464 break; 464 break;
465 case "Feature": 465 case "Feature":
466 feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 466 feature = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
467 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Feature, feature); 467 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Feature, feature);
468 break; 468 break;
469 default: 469 default:
470 this.Core.UnexpectedAttribute(node, attrib); 470 this.Core.UnexpectedAttribute(node, attrib);
@@ -490,12 +490,12 @@ namespace WixToolset.Core
490 { 490 {
491 case "Control": 491 case "Control":
492 // These are all thrown away. 492 // These are all thrown away.
493 ControlTuple lastTabTuple = null; 493 ControlSymbol lastTabSymbol = null;
494 string firstControl = null; 494 string firstControl = null;
495 string defaultControl = null; 495 string defaultControl = null;
496 string cancelControl = null; 496 string cancelControl = null;
497 497
498 this.ParseControlElement(child, id.Id, TupleDefinitionType.BBControl, ref lastTabTuple, ref firstControl, ref defaultControl, ref cancelControl); 498 this.ParseControlElement(child, id.Id, SymbolDefinitionType.BBControl, ref lastTabSymbol, ref firstControl, ref defaultControl, ref cancelControl);
499 break; 499 break;
500 default: 500 default:
501 this.Core.UnexpectedElement(node, child); 501 this.Core.UnexpectedElement(node, child);
@@ -511,7 +511,7 @@ namespace WixToolset.Core
511 511
512 if (!this.Core.EncounteredError) 512 if (!this.Core.EncounteredError)
513 { 513 {
514 this.Core.AddTuple(new BillboardTuple(sourceLineNumbers, id) 514 this.Core.AddSymbol(new BillboardSymbol(sourceLineNumbers, id)
515 { 515 {
516 FeatureRef = feature, 516 FeatureRef = feature,
517 Action = action, 517 Action = action,
@@ -524,9 +524,9 @@ namespace WixToolset.Core
524 /// Parses a control group element. 524 /// Parses a control group element.
525 /// </summary> 525 /// </summary>
526 /// <param name="node">Element to parse.</param> 526 /// <param name="node">Element to parse.</param>
527 /// <param name="tupleType">Tuple type referred to by control group.</param> 527 /// <param name="symbolType">Symbol type referred to by control group.</param>
528 /// <param name="childTag">Expected child elements.</param> 528 /// <param name="childTag">Expected child elements.</param>
529 private void ParseControlGroupElement(XElement node, TupleDefinitionType tupleType, string childTag) 529 private void ParseControlGroupElement(XElement node, SymbolDefinitionType symbolType, string childTag)
530 { 530 {
531 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 531 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
532 var order = 0; 532 var order = 0;
@@ -569,7 +569,7 @@ namespace WixToolset.Core
569 switch (child.Name.LocalName) 569 switch (child.Name.LocalName)
570 { 570 {
571 case "ListItem": 571 case "ListItem":
572 this.ParseListItemElement(child, tupleType, property, ref order); 572 this.ParseListItemElement(child, symbolType, property, ref order);
573 break; 573 break;
574 case "Property": 574 case "Property":
575 this.ParsePropertyElement(child); 575 this.ParsePropertyElement(child);
@@ -607,7 +607,7 @@ namespace WixToolset.Core
607 { 607 {
608 case "Property": 608 case "Property":
609 property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 609 property = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
610 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Property, property); 610 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Property, property);
611 break; 611 break;
612 default: 612 default:
613 this.Core.UnexpectedAttribute(node, attrib); 613 this.Core.UnexpectedAttribute(node, attrib);
@@ -704,7 +704,7 @@ namespace WixToolset.Core
704 704
705 if (!this.Core.EncounteredError) 705 if (!this.Core.EncounteredError)
706 { 706 {
707 this.Core.AddTuple(new ActionTextTuple(sourceLineNumbers) 707 this.Core.AddSymbol(new ActionTextSymbol(sourceLineNumbers)
708 { 708 {
709 Action = action, 709 Action = action,
710 Description = message, 710 Description = message,
@@ -755,7 +755,7 @@ namespace WixToolset.Core
755 755
756 if (!this.Core.EncounteredError) 756 if (!this.Core.EncounteredError)
757 { 757 {
758 this.Core.AddTuple(new UITextTuple(sourceLineNumbers, id) 758 this.Core.AddSymbol(new UITextSymbol(sourceLineNumbers, id)
759 { 759 {
760 Text = text, 760 Text = text,
761 }); 761 });
@@ -860,7 +860,7 @@ namespace WixToolset.Core
860 860
861 if (!this.Core.EncounteredError) 861 if (!this.Core.EncounteredError)
862 { 862 {
863 var tuple = this.Core.AddTuple(new TextStyleTuple(sourceLineNumbers, id) 863 var symbol = this.Core.AddSymbol(new TextStyleSymbol(sourceLineNumbers, id)
864 { 864 {
865 FaceName = faceName, 865 FaceName = faceName,
866 Red = red, 866 Red = red,
@@ -872,7 +872,7 @@ namespace WixToolset.Core
872 Underline = underline, 872 Underline = underline,
873 }); 873 });
874 874
875 tuple.Set((int)TextStyleTupleFields.Size, size); 875 symbol.Set((int)TextStyleSymbolFields.Size, size);
876 } 876 }
877 } 877 }
878 878
@@ -976,7 +976,7 @@ namespace WixToolset.Core
976 id = Identifier.Invalid; 976 id = Identifier.Invalid;
977 } 977 }
978 978
979 ControlTuple lastTabTuple = null; 979 ControlSymbol lastTabSymbol = null;
980 string cancelControl = null; 980 string cancelControl = null;
981 string defaultControl = null; 981 string defaultControl = null;
982 string firstControl = null; 982 string firstControl = null;
@@ -988,7 +988,7 @@ namespace WixToolset.Core
988 switch (child.Name.LocalName) 988 switch (child.Name.LocalName)
989 { 989 {
990 case "Control": 990 case "Control":
991 this.ParseControlElement(child, id.Id, TupleDefinitionType.Control, ref lastTabTuple, ref firstControl, ref defaultControl, ref cancelControl); 991 this.ParseControlElement(child, id.Id, SymbolDefinitionType.Control, ref lastTabSymbol, ref firstControl, ref defaultControl, ref cancelControl);
992 break; 992 break;
993 default: 993 default:
994 this.Core.UnexpectedElement(node, child); 994 this.Core.UnexpectedElement(node, child);
@@ -1001,11 +1001,11 @@ namespace WixToolset.Core
1001 } 1001 }
1002 } 1002 }
1003 1003
1004 if (null != lastTabTuple && null != lastTabTuple.Control) 1004 if (null != lastTabSymbol && null != lastTabSymbol.Control)
1005 { 1005 {
1006 if (firstControl != lastTabTuple.Control) 1006 if (firstControl != lastTabSymbol.Control)
1007 { 1007 {
1008 lastTabTuple.NextControlRef = firstControl; 1008 lastTabSymbol.NextControlRef = firstControl;
1009 } 1009 }
1010 } 1010 }
1011 1011
@@ -1016,7 +1016,7 @@ namespace WixToolset.Core
1016 1016
1017 if (!this.Core.EncounteredError) 1017 if (!this.Core.EncounteredError)
1018 { 1018 {
1019 this.Core.AddTuple(new DialogTuple(sourceLineNumbers, id) 1019 this.Core.AddSymbol(new DialogSymbol(sourceLineNumbers, id)
1020 { 1020 {
1021 HCentering = x, 1021 HCentering = x,
1022 VCentering = y, 1022 VCentering = y,
@@ -1047,12 +1047,12 @@ namespace WixToolset.Core
1047 /// <param name="node">Element to parse.</param> 1047 /// <param name="node">Element to parse.</param>
1048 /// <param name="dialog">Identifier for parent dialog.</param> 1048 /// <param name="dialog">Identifier for parent dialog.</param>
1049 /// <param name="table">Table control belongs in.</param> 1049 /// <param name="table">Table control belongs in.</param>
1050 /// <param name="lastTabTuple">Last control in the tab order.</param> 1050 /// <param name="lastTabSymbol">Last control in the tab order.</param>
1051 /// <param name="firstControl">Name of the first control in the tab order.</param> 1051 /// <param name="firstControl">Name of the first control in the tab order.</param>
1052 /// <param name="defaultControl">Name of the default control.</param> 1052 /// <param name="defaultControl">Name of the default control.</param>
1053 /// <param name="cancelControl">Name of the candle control.</param> 1053 /// <param name="cancelControl">Name of the candle control.</param>
1054 /// <param name="trackDiskSpace">True if the containing dialog tracks disk space.</param> 1054 /// <param name="trackDiskSpace">True if the containing dialog tracks disk space.</param>
1055 private void ParseControlElement(XElement node, string dialog, TupleDefinitionType tupleType, ref ControlTuple lastTabTuple, ref string firstControl, ref string defaultControl, ref string cancelControl) 1055 private void ParseControlElement(XElement node, string dialog, SymbolDefinitionType symbolType, ref ControlSymbol lastTabSymbol, ref string firstControl, ref string defaultControl, ref string cancelControl)
1056 { 1056 {
1057 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); 1057 var sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node);
1058 Identifier controlId = null; 1058 Identifier controlId = null;
@@ -1379,13 +1379,13 @@ namespace WixToolset.Core
1379 this.ParseBinaryElement(child); 1379 this.ParseBinaryElement(child);
1380 break; 1380 break;
1381 case "ComboBox": 1381 case "ComboBox":
1382 this.ParseControlGroupElement(child, TupleDefinitionType.ComboBox, "ListItem"); 1382 this.ParseControlGroupElement(child, SymbolDefinitionType.ComboBox, "ListItem");
1383 break; 1383 break;
1384 case "ListBox": 1384 case "ListBox":
1385 this.ParseControlGroupElement(child, TupleDefinitionType.ListBox, "ListItem"); 1385 this.ParseControlGroupElement(child, SymbolDefinitionType.ListBox, "ListItem");
1386 break; 1386 break;
1387 case "ListView": 1387 case "ListView":
1388 this.ParseControlGroupElement(child, TupleDefinitionType.ListView, "ListItem"); 1388 this.ParseControlGroupElement(child, SymbolDefinitionType.ListView, "ListItem");
1389 break; 1389 break;
1390 case "Property": 1390 case "Property":
1391 this.ParsePropertyElement(child); 1391 this.ParsePropertyElement(child);
@@ -1454,7 +1454,7 @@ namespace WixToolset.Core
1454 } 1454 }
1455 1455
1456 // the logic for creating control rows is a little tricky because of the way tabable controls are set 1456 // the logic for creating control rows is a little tricky because of the way tabable controls are set
1457 IntermediateTuple tuple = null; 1457 IntermediateSymbol symbol = null;
1458 if (!this.Core.EncounteredError) 1458 if (!this.Core.EncounteredError)
1459 { 1459 {
1460 if ("CheckBox" == controlType) 1460 if ("CheckBox" == controlType)
@@ -1469,7 +1469,7 @@ namespace WixToolset.Core
1469 } 1469 }
1470 else if (!String.IsNullOrEmpty(property)) 1470 else if (!String.IsNullOrEmpty(property))
1471 { 1471 {
1472 this.Core.AddTuple(new CheckBoxTuple(sourceLineNumbers) 1472 this.Core.AddSymbol(new CheckBoxSymbol(sourceLineNumbers)
1473 { 1473 {
1474 Property = property, 1474 Property = property,
1475 Value = checkboxValue, 1475 Value = checkboxValue,
@@ -1477,15 +1477,15 @@ namespace WixToolset.Core
1477 } 1477 }
1478 else 1478 else
1479 { 1479 {
1480 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.CheckBox, checkBoxPropertyRef); 1480 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.CheckBox, checkBoxPropertyRef);
1481 } 1481 }
1482 } 1482 }
1483 1483
1484 var id = new Identifier(controlId.Access, dialog, controlId.Id); 1484 var id = new Identifier(controlId.Access, dialog, controlId.Id);
1485 1485
1486 if (TupleDefinitionType.BBControl == tupleType) 1486 if (SymbolDefinitionType.BBControl == symbolType)
1487 { 1487 {
1488 var bbTuple = this.Core.AddTuple(new BBControlTuple(sourceLineNumbers, id) 1488 var bbSymbol = this.Core.AddSymbol(new BBControlSymbol(sourceLineNumbers, id)
1489 { 1489 {
1490 BillboardRef = dialog, 1490 BillboardRef = dialog,
1491 BBControl = controlId.Id, 1491 BBControl = controlId.Id,
@@ -1503,16 +1503,16 @@ namespace WixToolset.Core
1503 SourceFile = String.IsNullOrEmpty(sourceFile) ? null : new IntermediateFieldPathValue { Path = sourceFile } 1503 SourceFile = String.IsNullOrEmpty(sourceFile) ? null : new IntermediateFieldPathValue { Path = sourceFile }
1504 }); 1504 });
1505 1505
1506 bbTuple.Set((int)BBControlTupleFields.X, x); 1506 bbSymbol.Set((int)BBControlSymbolFields.X, x);
1507 bbTuple.Set((int)BBControlTupleFields.Y, y); 1507 bbSymbol.Set((int)BBControlSymbolFields.Y, y);
1508 bbTuple.Set((int)BBControlTupleFields.Width, width); 1508 bbSymbol.Set((int)BBControlSymbolFields.Width, width);
1509 bbTuple.Set((int)BBControlTupleFields.Height, height); 1509 bbSymbol.Set((int)BBControlSymbolFields.Height, height);
1510 1510
1511 tuple = bbTuple; 1511 symbol = bbSymbol;
1512 } 1512 }
1513 else 1513 else
1514 { 1514 {
1515 var controlTuple = this.Core.AddTuple(new ControlTuple(sourceLineNumbers, id) 1515 var controlSymbol = this.Core.AddSymbol(new ControlSymbol(sourceLineNumbers, id)
1516 { 1516 {
1517 DialogRef = dialog, 1517 DialogRef = dialog,
1518 Control = controlId.Id, 1518 Control = controlId.Id,
@@ -1532,17 +1532,17 @@ namespace WixToolset.Core
1532 SourceFile = String.IsNullOrEmpty(sourceFile) ? null : new IntermediateFieldPathValue { Path = sourceFile } 1532 SourceFile = String.IsNullOrEmpty(sourceFile) ? null : new IntermediateFieldPathValue { Path = sourceFile }
1533 }); 1533 });
1534 1534
1535 controlTuple.Set((int)BBControlTupleFields.X, x); 1535 controlSymbol.Set((int)BBControlSymbolFields.X, x);
1536 controlTuple.Set((int)BBControlTupleFields.Y, y); 1536 controlSymbol.Set((int)BBControlSymbolFields.Y, y);
1537 controlTuple.Set((int)BBControlTupleFields.Width, width); 1537 controlSymbol.Set((int)BBControlSymbolFields.Width, width);
1538 controlTuple.Set((int)BBControlTupleFields.Height, height); 1538 controlSymbol.Set((int)BBControlSymbolFields.Height, height);
1539 1539
1540 tuple = controlTuple; 1540 symbol = controlSymbol;
1541 } 1541 }
1542 1542
1543 if (!String.IsNullOrEmpty(defaultCondition)) 1543 if (!String.IsNullOrEmpty(defaultCondition))
1544 { 1544 {
1545 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers) 1545 this.Core.AddSymbol(new ControlConditionSymbol(sourceLineNumbers)
1546 { 1546 {
1547 DialogRef = dialog, 1547 DialogRef = dialog,
1548 ControlRef = controlId.Id, 1548 ControlRef = controlId.Id,
@@ -1553,7 +1553,7 @@ namespace WixToolset.Core
1553 1553
1554 if (!String.IsNullOrEmpty(enableCondition)) 1554 if (!String.IsNullOrEmpty(enableCondition))
1555 { 1555 {
1556 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers) 1556 this.Core.AddSymbol(new ControlConditionSymbol(sourceLineNumbers)
1557 { 1557 {
1558 DialogRef = dialog, 1558 DialogRef = dialog,
1559 ControlRef = controlId.Id, 1559 ControlRef = controlId.Id,
@@ -1564,7 +1564,7 @@ namespace WixToolset.Core
1564 1564
1565 if (!String.IsNullOrEmpty(disableCondition)) 1565 if (!String.IsNullOrEmpty(disableCondition))
1566 { 1566 {
1567 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers) 1567 this.Core.AddSymbol(new ControlConditionSymbol(sourceLineNumbers)
1568 { 1568 {
1569 DialogRef = dialog, 1569 DialogRef = dialog,
1570 ControlRef = controlId.Id, 1570 ControlRef = controlId.Id,
@@ -1575,7 +1575,7 @@ namespace WixToolset.Core
1575 1575
1576 if (!String.IsNullOrEmpty(hideCondition)) 1576 if (!String.IsNullOrEmpty(hideCondition))
1577 { 1577 {
1578 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers) 1578 this.Core.AddSymbol(new ControlConditionSymbol(sourceLineNumbers)
1579 { 1579 {
1580 DialogRef = dialog, 1580 DialogRef = dialog,
1581 ControlRef = controlId.Id, 1581 ControlRef = controlId.Id,
@@ -1586,7 +1586,7 @@ namespace WixToolset.Core
1586 1586
1587 if (!String.IsNullOrEmpty(showCondition)) 1587 if (!String.IsNullOrEmpty(showCondition))
1588 { 1588 {
1589 this.Core.AddTuple(new ControlConditionTuple(sourceLineNumbers) 1589 this.Core.AddSymbol(new ControlConditionSymbol(sourceLineNumbers)
1590 { 1590 {
1591 DialogRef = dialog, 1591 DialogRef = dialog,
1592 ControlRef = controlId.Id, 1592 ControlRef = controlId.Id,
@@ -1598,15 +1598,15 @@ namespace WixToolset.Core
1598 1598
1599 if (!notTabbable) 1599 if (!notTabbable)
1600 { 1600 {
1601 if (tuple is ControlTuple controlTuple) 1601 if (symbol is ControlSymbol controlSymbol)
1602 { 1602 {
1603 if (null != lastTabTuple) 1603 if (null != lastTabSymbol)
1604 { 1604 {
1605 lastTabTuple.NextControlRef = controlTuple.Control; 1605 lastTabSymbol.NextControlRef = controlSymbol.Control;
1606 } 1606 }
1607 lastTabTuple = controlTuple; 1607 lastTabSymbol = controlSymbol;
1608 } 1608 }
1609 else if (tuple != null) 1609 else if (symbol != null)
1610 { 1610 {
1611 this.Core.Write(ErrorMessages.TabbableControlNotAllowedInBillboard(sourceLineNumbers, node.Name.LocalName, controlType)); 1611 this.Core.Write(ErrorMessages.TabbableControlNotAllowedInBillboard(sourceLineNumbers, node.Name.LocalName, controlType));
1612 } 1612 }
@@ -1621,7 +1621,7 @@ namespace WixToolset.Core
1621 // add a reference if the identifier of the binary entry is known during compilation 1621 // add a reference if the identifier of the binary entry is known during compilation
1622 if (("Bitmap" == controlType || "Icon" == controlType) && Common.IsIdentifier(text)) 1622 if (("Bitmap" == controlType || "Icon" == controlType) && Common.IsIdentifier(text))
1623 { 1623 {
1624 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Binary, text); 1624 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Binary, text);
1625 } 1625 }
1626 } 1626 }
1627 1627
@@ -1665,7 +1665,7 @@ namespace WixToolset.Core
1665 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName)); 1665 this.Core.Write(ErrorMessages.IllegalAttributeWhenNested(sourceLineNumbers, node.Name.LocalName, attrib.Name.LocalName, node.Parent.Name.LocalName));
1666 } 1666 }
1667 dialog = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 1667 dialog = this.Core.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
1668 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Dialog, dialog); 1668 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Dialog, dialog);
1669 break; 1669 break;
1670 case "Event": 1670 case "Event":
1671 controlEvent = Compiler.UppercaseFirstChar(this.Core.GetAttributeValue(sourceLineNumbers, attrib)); 1671 controlEvent = Compiler.UppercaseFirstChar(this.Core.GetAttributeValue(sourceLineNumbers, attrib));
@@ -1726,7 +1726,7 @@ namespace WixToolset.Core
1726 1726
1727 if (!this.Core.EncounteredError) 1727 if (!this.Core.EncounteredError)
1728 { 1728 {
1729 this.Core.AddTuple(new ControlEventTuple(sourceLineNumbers) 1729 this.Core.AddSymbol(new ControlEventSymbol(sourceLineNumbers)
1730 { 1730 {
1731 DialogRef = dialog, 1731 DialogRef = dialog,
1732 ControlRef = control, 1732 ControlRef = control,
@@ -1739,18 +1739,18 @@ namespace WixToolset.Core
1739 1739
1740 if ("DoAction" == controlEvent && null != argument) 1740 if ("DoAction" == controlEvent && null != argument)
1741 { 1741 {
1742 // if we're not looking at a standard action or a formatted string then create a reference 1742 // if we're not looking at a standard action or a formatted string then create a reference
1743 // to the custom action. 1743 // to the custom action.
1744 if (!WindowsInstallerStandard.IsStandardAction(argument) && !Common.ContainsProperty(argument)) 1744 if (!WindowsInstallerStandard.IsStandardAction(argument) && !Common.ContainsProperty(argument))
1745 { 1745 {
1746 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.CustomAction, argument); 1746 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.CustomAction, argument);
1747 } 1747 }
1748 } 1748 }
1749 1749
1750 // if we're referring to a dialog but not through a property, add it to the references 1750 // if we're referring to a dialog but not through a property, add it to the references
1751 if (("NewDialog" == controlEvent || "SpawnDialog" == controlEvent || "SpawnWaitDialog" == controlEvent || "SelectionBrowse" == controlEvent) && Common.IsIdentifier(argument)) 1751 if (("NewDialog" == controlEvent || "SpawnDialog" == controlEvent || "SpawnWaitDialog" == controlEvent || "SelectionBrowse" == controlEvent) && Common.IsIdentifier(argument))
1752 { 1752 {
1753 this.Core.CreateSimpleReference(sourceLineNumbers, TupleDefinitions.Dialog, argument); 1753 this.Core.CreateSimpleReference(sourceLineNumbers, SymbolDefinitions.Dialog, argument);
1754 } 1754 }
1755 } 1755 }
1756 1756
@@ -1793,7 +1793,7 @@ namespace WixToolset.Core
1793 1793
1794 if (!this.Core.EncounteredError) 1794 if (!this.Core.EncounteredError)
1795 { 1795 {
1796 this.Core.AddTuple(new EventMappingTuple(sourceLineNumbers) 1796 this.Core.AddSymbol(new EventMappingSymbol(sourceLineNumbers)
1797 { 1797 {
1798 DialogRef = dialog, 1798 DialogRef = dialog,
1799 ControlRef = control, 1799 ControlRef = control,
diff --git a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
index 3c092bd4..7160c32e 100644
--- a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
+++ b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
@@ -12,7 +12,7 @@ namespace WixToolset.Core.ExtensibilityServices
12 using System.Text.RegularExpressions; 12 using System.Text.RegularExpressions;
13 using System.Xml.Linq; 13 using System.Xml.Linq;
14 using WixToolset.Data; 14 using WixToolset.Data;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using WixToolset.Data.WindowsInstaller; 16 using WixToolset.Data.WindowsInstaller;
17 using WixToolset.Extensibility; 17 using WixToolset.Extensibility;
18 using WixToolset.Extensibility.Data; 18 using WixToolset.Extensibility.Data;
@@ -44,7 +44,7 @@ namespace WixToolset.Core.ExtensibilityServices
44 44
45 private IMessaging Messaging { get; } 45 private IMessaging Messaging { get; }
46 46
47 private ITupleDefinitionCreator Creator { get; set; } 47 private ISymbolDefinitionCreator Creator { get; set; }
48 48
49 public bool ContainsProperty(string possibleProperty) 49 public bool ContainsProperty(string possibleProperty)
50 { 50 {
@@ -54,7 +54,7 @@ namespace WixToolset.Core.ExtensibilityServices
54 public void CreateComplexReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, string parentLanguage, ComplexReferenceChildType childType, string childId, bool isPrimary) 54 public void CreateComplexReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, string parentLanguage, ComplexReferenceChildType childType, string childId, bool isPrimary)
55 { 55 {
56 56
57 section.AddTuple(new WixComplexReferenceTuple(sourceLineNumbers) 57 section.AddSymbol(new WixComplexReferenceSymbol(sourceLineNumbers)
58 { 58 {
59 Parent = parentId, 59 Parent = parentId,
60 ParentType = parentType, 60 ParentType = parentType,
@@ -64,16 +64,16 @@ namespace WixToolset.Core.ExtensibilityServices
64 IsPrimary = isPrimary 64 IsPrimary = isPrimary
65 }); 65 });
66 66
67 this.CreateWixGroupTuple(section, sourceLineNumbers, parentType, parentId, childType, childId); 67 this.CreateWixGroupSymbol(section, sourceLineNumbers, parentType, parentId, childType, childId);
68 } 68 }
69 69
70 [Obsolete] 70 [Obsolete]
71 public Identifier CreateDirectoryRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, ISet<string> sectionInlinedDirectoryIds, string shortName = null, string sourceName = null, string shortSourceName = null) 71 public Identifier CreateDirectoryRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, ISet<string> sectionInlinedDirectoryIds, string shortName = null, string sourceName = null, string shortSourceName = null)
72 { 72 {
73 return this.CreateDirectoryTuple(section, sourceLineNumbers, id, parentId, name, sectionInlinedDirectoryIds, shortName, sourceName, shortSourceName); 73 return this.CreateDirectorySymbol(section, sourceLineNumbers, id, parentId, name, sectionInlinedDirectoryIds, shortName, sourceName, shortSourceName);
74 } 74 }
75 75
76 public Identifier CreateDirectoryTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, ISet<string> sectionInlinedDirectoryIds, string shortName = null, string sourceName = null, string shortSourceName = null) 76 public Identifier CreateDirectorySymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, string name, ISet<string> sectionInlinedDirectoryIds, string shortName = null, string sourceName = null, string shortSourceName = null)
77 { 77 {
78 if (String.IsNullOrEmpty(shortName) && !name.Equals("SourceDir") && !this.IsValidShortFilename(name)) 78 if (String.IsNullOrEmpty(shortName) && !name.Equals("SourceDir") && !this.IsValidShortFilename(name))
79 { 79 {
@@ -86,7 +86,7 @@ namespace WixToolset.Core.ExtensibilityServices
86 } 86 }
87 87
88 // For anonymous directories, create the identifier. If this identifier already exists in the 88 // For anonymous directories, create the identifier. If this identifier already exists in the
89 // active section, bail so we don't add duplicate anonymous directory tuples (which are legal 89 // active section, bail so we don't add duplicate anonymous directory symbols (which are legal
90 // but bloat the intermediate and ultimately make the linker do "busy work"). 90 // but bloat the intermediate and ultimately make the linker do "busy work").
91 if (null == id) 91 if (null == id)
92 { 92 {
@@ -98,7 +98,7 @@ namespace WixToolset.Core.ExtensibilityServices
98 } 98 }
99 } 99 }
100 100
101 var tuple = section.AddTuple(new DirectoryTuple(sourceLineNumbers, id) 101 var symbol = section.AddSymbol(new DirectorySymbol(sourceLineNumbers, id)
102 { 102 {
103 ParentDirectoryRef = parentId, 103 ParentDirectoryRef = parentId,
104 Name = name, 104 Name = name,
@@ -107,7 +107,7 @@ namespace WixToolset.Core.ExtensibilityServices
107 SourceShortName = shortSourceName 107 SourceShortName = shortSourceName
108 }); 108 });
109 109
110 return tuple.Id; 110 return symbol.Id;
111 } 111 }
112 112
113 public string CreateDirectoryReferenceFromInlineSyntax(IntermediateSection section, SourceLineNumber sourceLineNumbers, string parentId, XAttribute attribute, ISet<string> sectionInlinedDirectoryIds) 113 public string CreateDirectoryReferenceFromInlineSyntax(IntermediateSection section, SourceLineNumber sourceLineNumbers, string parentId, XAttribute attribute, ISet<string> sectionInlinedDirectoryIds)
@@ -122,9 +122,9 @@ namespace WixToolset.Core.ExtensibilityServices
122 if (1 == inlineSyntax.Length) 122 if (1 == inlineSyntax.Length)
123 { 123 {
124 id = inlineSyntax[0]; 124 id = inlineSyntax[0];
125 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.Directory, id); 125 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.Directory, id);
126 } 126 }
127 else // start creating tuples for the entries in the inline syntax 127 else // start creating symbols for the entries in the inline syntax
128 { 128 {
129 id = parentId; 129 id = parentId;
130 130
@@ -138,14 +138,14 @@ namespace WixToolset.Core.ExtensibilityServices
138 //} 138 //}
139 139
140 id = inlineSyntax[0].TrimEnd(':'); 140 id = inlineSyntax[0].TrimEnd(':');
141 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.Directory, id); 141 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.Directory, id);
142 142
143 pathStartsAt = 1; 143 pathStartsAt = 1;
144 } 144 }
145 145
146 for (var i = pathStartsAt; i < inlineSyntax.Length; ++i) 146 for (var i = pathStartsAt; i < inlineSyntax.Length; ++i)
147 { 147 {
148 var inlineId = this.CreateDirectoryTuple(section, sourceLineNumbers, null, id, inlineSyntax[i], sectionInlinedDirectoryIds); 148 var inlineId = this.CreateDirectorySymbol(section, sourceLineNumbers, null, id, inlineSyntax[i], sectionInlinedDirectoryIds);
149 id = inlineId.Id; 149 id = inlineId.Id;
150 } 150 }
151 } 151 }
@@ -174,10 +174,10 @@ namespace WixToolset.Core.ExtensibilityServices
174 [Obsolete] 174 [Obsolete]
175 public Identifier CreateRegistryRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId, bool escapeLeadingHash) 175 public Identifier CreateRegistryRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId, bool escapeLeadingHash)
176 { 176 {
177 return this.CreateRegistryTuple(section, sourceLineNumbers, root, key, name, value, componentId, escapeLeadingHash); 177 return this.CreateRegistrySymbol(section, sourceLineNumbers, root, key, name, value, componentId, escapeLeadingHash);
178 } 178 }
179 179
180 public Identifier CreateRegistryTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId, bool escapeLeadingHash) 180 public Identifier CreateRegistrySymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, RegistryRootType root, string key, string name, string value, string componentId, bool escapeLeadingHash)
181 { 181 {
182 if (RegistryRootType.Unknown == root) 182 if (RegistryRootType.Unknown == root)
183 { 183 {
@@ -202,7 +202,7 @@ namespace WixToolset.Core.ExtensibilityServices
202 202
203 var id = this.CreateIdentifier("reg", componentId, ((int)root).ToString(CultureInfo.InvariantCulture.NumberFormat), key.ToLowerInvariant(), (null != name ? name.ToLowerInvariant() : name)); 203 var id = this.CreateIdentifier("reg", componentId, ((int)root).ToString(CultureInfo.InvariantCulture.NumberFormat), key.ToLowerInvariant(), (null != name ? name.ToLowerInvariant() : name));
204 204
205 var tuple = section.AddTuple(new RegistryTuple(sourceLineNumbers, id) 205 var symbol = section.AddSymbol(new RegistrySymbol(sourceLineNumbers, id)
206 { 206 {
207 Root = root, 207 Root = root,
208 Key = key, 208 Key = key,
@@ -211,30 +211,30 @@ namespace WixToolset.Core.ExtensibilityServices
211 ComponentRef = componentId, 211 ComponentRef = componentId,
212 }); 212 });
213 213
214 return tuple.Id; 214 return symbol.Id;
215 } 215 }
216 216
217 public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tupleName, params string[] primaryKeys) 217 public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, params string[] primaryKeys)
218 { 218 {
219 section.AddTuple(new WixSimpleReferenceTuple(sourceLineNumbers) 219 section.AddSymbol(new WixSimpleReferenceSymbol(sourceLineNumbers)
220 { 220 {
221 Table = tupleName, 221 Table = symbolName,
222 PrimaryKeys = String.Join("/", primaryKeys) 222 PrimaryKeys = String.Join("/", primaryKeys)
223 }); 223 });
224 } 224 }
225 225
226 public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, params string[] primaryKeys) 226 public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, params string[] primaryKeys)
227 { 227 {
228 this.CreateSimpleReference(section, sourceLineNumbers, tupleDefinition.Name, primaryKeys); 228 this.CreateSimpleReference(section, sourceLineNumbers, symbolDefinition.Name, primaryKeys);
229 } 229 }
230 230
231 [Obsolete] 231 [Obsolete]
232 public void CreateWixGroupRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType childType, string childId) 232 public void CreateWixGroupRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType childType, string childId)
233 { 233 {
234 this.CreateWixGroupTuple(section, sourceLineNumbers, parentType, parentId, childType, childId); 234 this.CreateWixGroupSymbol(section, sourceLineNumbers, parentType, parentId, childType, childId);
235 } 235 }
236 236
237 public void CreateWixGroupTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType childType, string childId) 237 public void CreateWixGroupSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, ComplexReferenceParentType parentType, string parentId, ComplexReferenceChildType childType, string childId)
238 { 238 {
239 if (null == parentId || ComplexReferenceParentType.Unknown == parentType) 239 if (null == parentId || ComplexReferenceParentType.Unknown == parentType)
240 { 240 {
@@ -246,7 +246,7 @@ namespace WixToolset.Core.ExtensibilityServices
246 throw new ArgumentNullException("childId"); 246 throw new ArgumentNullException("childId");
247 } 247 }
248 248
249 section.AddTuple(new WixGroupTuple(sourceLineNumbers) 249 section.AddSymbol(new WixGroupSymbol(sourceLineNumbers)
250 { 250 {
251 ParentId = parentId, 251 ParentId = parentId,
252 ParentType = parentType, 252 ParentType = parentType,
@@ -255,7 +255,7 @@ namespace WixToolset.Core.ExtensibilityServices
255 }); 255 });
256 } 256 }
257 257
258 public void CreateWixSearchTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, string elementName, Identifier id, string variable, string condition, string after, string bundleExtensionId) 258 public void CreateWixSearchSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, string elementName, Identifier id, string variable, string condition, string after, string bundleExtensionId)
259 { 259 {
260 // TODO: verify variable is not a standard bundle variable 260 // TODO: verify variable is not a standard bundle variable
261 if (variable == null) 261 if (variable == null)
@@ -263,7 +263,7 @@ namespace WixToolset.Core.ExtensibilityServices
263 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, elementName, "Variable")); 263 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, elementName, "Variable"));
264 } 264 }
265 265
266 section.AddTuple(new WixSearchTuple(sourceLineNumbers, id) 266 section.AddSymbol(new WixSearchSymbol(sourceLineNumbers, id)
267 { 267 {
268 Variable = variable, 268 Variable = variable,
269 Condition = condition, 269 Condition = condition,
@@ -272,20 +272,20 @@ namespace WixToolset.Core.ExtensibilityServices
272 272
273 if (after != null) 273 if (after != null)
274 { 274 {
275 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixSearch, after); 275 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixSearch, after);
276 // TODO: We're currently defaulting to "always run after", which we will need to change... 276 // TODO: We're currently defaulting to "always run after", which we will need to change...
277 this.CreateWixSearchRelationTuple(section, sourceLineNumbers, id, after, 2); 277 this.CreateWixSearchRelationSymbol(section, sourceLineNumbers, id, after, 2);
278 } 278 }
279 279
280 if (!String.IsNullOrEmpty(bundleExtensionId)) 280 if (!String.IsNullOrEmpty(bundleExtensionId))
281 { 281 {
282 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixBundleExtension, bundleExtensionId); 282 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixBundleExtension, bundleExtensionId);
283 } 283 }
284 } 284 }
285 285
286 public void CreateWixSearchRelationTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, int attributes) 286 public void CreateWixSearchRelationSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, Identifier id, string parentId, int attributes)
287 { 287 {
288 section.AddTuple(new WixSearchRelationTuple(sourceLineNumbers, id) 288 section.AddSymbol(new WixSearchRelationSymbol(sourceLineNumbers, id)
289 { 289 {
290 ParentSearchRef = parentId, 290 ParentSearchRef = parentId,
291 Attributes = attributes, 291 Attributes = attributes,
@@ -293,43 +293,43 @@ namespace WixToolset.Core.ExtensibilityServices
293 } 293 }
294 294
295 [Obsolete] 295 [Obsolete]
296 public IntermediateTuple CreateRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tableName, Identifier identifier = null) 296 public IntermediateSymbol CreateRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tableName, Identifier identifier = null)
297 { 297 {
298 return this.CreateTuple(section, sourceLineNumbers, tableName, identifier); 298 return this.CreateSymbol(section, sourceLineNumbers, tableName, identifier);
299 } 299 }
300 300
301 [Obsolete] 301 [Obsolete]
302 public IntermediateTuple CreateRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, TupleDefinitionType tupleType, Identifier identifier = null) 302 public IntermediateSymbol CreateRow(IntermediateSection section, SourceLineNumber sourceLineNumbers, SymbolDefinitionType symbolType, Identifier identifier = null)
303 { 303 {
304 return this.CreateTuple(section, sourceLineNumbers, tupleType, identifier); 304 return this.CreateSymbol(section, sourceLineNumbers, symbolType, identifier);
305 } 305 }
306 306
307 public IntermediateTuple CreateTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tupleName, Identifier identifier = null) 307 public IntermediateSymbol CreateSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, Identifier identifier = null)
308 { 308 {
309 if (this.Creator == null) 309 if (this.Creator == null)
310 { 310 {
311 this.CreateTupleDefinitionCreator(); 311 this.CreateSymbolDefinitionCreator();
312 } 312 }
313 313
314 if (!this.Creator.TryGetTupleDefinitionByName(tupleName, out var tupleDefinition)) 314 if (!this.Creator.TryGetSymbolDefinitionByName(symbolName, out var symbolDefinition))
315 { 315 {
316 throw new ArgumentException(nameof(tupleName)); 316 throw new ArgumentException(nameof(symbolName));
317 } 317 }
318 318
319 return this.CreateTuple(section, sourceLineNumbers, tupleDefinition, identifier); 319 return this.CreateSymbol(section, sourceLineNumbers, symbolDefinition, identifier);
320 } 320 }
321 321
322 [Obsolete] 322 [Obsolete]
323 public IntermediateTuple CreateTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, TupleDefinitionType tupleType, Identifier identifier = null) 323 public IntermediateSymbol CreateSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, SymbolDefinitionType symbolType, Identifier identifier = null)
324 { 324 {
325 var tupleDefinition = TupleDefinitions.ByType(tupleType); 325 var symbolDefinition = SymbolDefinitions.ByType(symbolType);
326 326
327 return this.CreateTuple(section, sourceLineNumbers, tupleDefinition, identifier); 327 return this.CreateSymbol(section, sourceLineNumbers, symbolDefinition, identifier);
328 } 328 }
329 329
330 public IntermediateTuple CreateTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, Identifier identifier = null) 330 public IntermediateSymbol CreateSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, Identifier identifier = null)
331 { 331 {
332 return section.AddTuple(tupleDefinition.CreateTuple(sourceLineNumbers, identifier)); 332 return section.AddSymbol(symbolDefinition.CreateSymbol(sourceLineNumbers, identifier));
333 } 333 }
334 334
335 public string CreateShortName(string longName, bool keepExtension, bool allowWildcards, params string[] args) 335 public string CreateShortName(string longName, bool keepExtension, bool allowWildcards, params string[] args)
@@ -384,34 +384,34 @@ namespace WixToolset.Core.ExtensibilityServices
384 384
385 public void EnsureTable(IntermediateSection section, SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition) 385 public void EnsureTable(IntermediateSection section, SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition)
386 { 386 {
387 section.AddTuple(new WixEnsureTableTuple(sourceLineNumbers) 387 section.AddSymbol(new WixEnsureTableSymbol(sourceLineNumbers)
388 { 388 {
389 Table = tableDefinition.Name, 389 Table = tableDefinition.Name,
390 }); 390 });
391 391
392 // TODO: Check if the given table definition is a custom table. For now we have to assume that it isn't. 392 // TODO: Check if the given table definition is a custom table. For now we have to assume that it isn't.
393 //this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixCustomTable, tableDefinition.Name); 393 //this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixCustomTable, tableDefinition.Name);
394 } 394 }
395 395
396 public void EnsureTable(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tableName) 396 public void EnsureTable(IntermediateSection section, SourceLineNumber sourceLineNumbers, string tableName)
397 { 397 {
398 section.AddTuple(new WixEnsureTableTuple(sourceLineNumbers) 398 section.AddSymbol(new WixEnsureTableSymbol(sourceLineNumbers)
399 { 399 {
400 Table = tableName, 400 Table = tableName,
401 }); 401 });
402 402
403 if (this.Creator == null) 403 if (this.Creator == null)
404 { 404 {
405 this.CreateTupleDefinitionCreator(); 405 this.CreateSymbolDefinitionCreator();
406 } 406 }
407 407
408 // TODO: The tableName may not be the same as the tupleName. For now, we have to assume that it is. 408 // TODO: The tableName may not be the same as the symbolName. For now, we have to assume that it is.
409 // We don't add custom table definitions to the tableDefinitions collection, 409 // We don't add custom table definitions to the tableDefinitions collection,
410 // so if it's not in there, it better be a custom table. If the Id is just wrong, 410 // so if it's not in there, it better be a custom table. If the Id is just wrong,
411 // instead of a custom table, we get an unresolved reference at link time. 411 // instead of a custom table, we get an unresolved reference at link time.
412 if (!this.Creator.TryGetTupleDefinitionByName(tableName, out var _)) 412 if (!this.Creator.TryGetSymbolDefinitionByName(tableName, out var _))
413 { 413 {
414 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixCustomTable, tableName); 414 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixCustomTable, tableName);
415 } 415 }
416 } 416 }
417 417
@@ -898,11 +898,11 @@ namespace WixToolset.Core.ExtensibilityServices
898 } 898 }
899 } 899 }
900 900
901 public WixActionTuple ScheduleActionTuple(IntermediateSection section, SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition, string beforeAction, string afterAction, bool overridable = false) 901 public WixActionSymbol ScheduleActionSymbol(IntermediateSection section, SourceLineNumber sourceLineNumbers, AccessModifier access, SequenceTable sequence, string actionName, string condition, string beforeAction, string afterAction, bool overridable = false)
902 { 902 {
903 var actionId = new Identifier(access, sequence, actionName); 903 var actionId = new Identifier(access, sequence, actionName);
904 904
905 var actionTuple = section.AddTuple(new WixActionTuple(sourceLineNumbers, actionId) 905 var actionSymbol = section.AddSymbol(new WixActionSymbol(sourceLineNumbers, actionId)
906 { 906 {
907 SequenceTable = sequence, 907 SequenceTable = sequence,
908 Action = actionName, 908 Action = actionName,
@@ -916,11 +916,11 @@ namespace WixToolset.Core.ExtensibilityServices
916 { 916 {
917 if (WindowsInstallerStandard.IsStandardAction(beforeAction)) 917 if (WindowsInstallerStandard.IsStandardAction(beforeAction))
918 { 918 {
919 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixAction, sequence.ToString(), beforeAction); 919 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), beforeAction);
920 } 920 }
921 else 921 else
922 { 922 {
923 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, beforeAction); 923 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, beforeAction);
924 } 924 }
925 } 925 }
926 926
@@ -928,15 +928,15 @@ namespace WixToolset.Core.ExtensibilityServices
928 { 928 {
929 if (WindowsInstallerStandard.IsStandardAction(afterAction)) 929 if (WindowsInstallerStandard.IsStandardAction(afterAction))
930 { 930 {
931 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.WixAction, sequence.ToString(), afterAction); 931 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.WixAction, sequence.ToString(), afterAction);
932 } 932 }
933 else 933 else
934 { 934 {
935 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, afterAction); 935 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, afterAction);
936 } 936 }
937 } 937 }
938 938
939 return actionTuple; 939 return actionSymbol;
940 } 940 }
941 941
942 public void CreateCustomActionReference(SourceLineNumber sourceLineNumbers, IntermediateSection section, string customAction, Platform currentPlatform, CustomActionPlatforms supportedPlatforms) 942 public void CreateCustomActionReference(SourceLineNumber sourceLineNumbers, IntermediateSection section, string customAction, Platform currentPlatform, CustomActionPlatforms supportedPlatforms)
@@ -968,7 +968,7 @@ namespace WixToolset.Core.ExtensibilityServices
968 break; 968 break;
969 } 969 }
970 970
971 this.CreateSimpleReference(section, sourceLineNumbers, TupleDefinitions.CustomAction, name + suffix); 971 this.CreateSimpleReference(section, sourceLineNumbers, SymbolDefinitions.CustomAction, name + suffix);
972 } 972 }
973 } 973 }
974 974
@@ -984,9 +984,9 @@ namespace WixToolset.Core.ExtensibilityServices
984 this.Messaging.Write(ErrorMessages.UnexpectedElement(sourceLineNumbers, parentElement.Name.LocalName, childElement.Name.LocalName)); 984 this.Messaging.Write(ErrorMessages.UnexpectedElement(sourceLineNumbers, parentElement.Name.LocalName, childElement.Name.LocalName));
985 } 985 }
986 986
987 private void CreateTupleDefinitionCreator() 987 private void CreateSymbolDefinitionCreator()
988 { 988 {
989 this.Creator = this.ServiceProvider.GetService<ITupleDefinitionCreator>(); 989 this.Creator = this.ServiceProvider.GetService<ISymbolDefinitionCreator>();
990 } 990 }
991 991
992 private static bool TryFindExtension(IEnumerable<ICompilerExtension> extensions, XNamespace ns, out ICompilerExtension extension) 992 private static bool TryFindExtension(IEnumerable<ICompilerExtension> extensions, XNamespace ns, out ICompilerExtension extension)
diff --git a/src/WixToolset.Core/ExtensibilityServices/TupleDefinitionCreator.cs b/src/WixToolset.Core/ExtensibilityServices/TupleDefinitionCreator.cs
index 7ef72afc..2bff21d6 100644
--- a/src/WixToolset.Core/ExtensibilityServices/TupleDefinitionCreator.cs
+++ b/src/WixToolset.Core/ExtensibilityServices/TupleDefinitionCreator.cs
@@ -8,9 +8,9 @@ namespace WixToolset.Core.ExtensibilityServices
8 using WixToolset.Extensibility; 8 using WixToolset.Extensibility;
9 using WixToolset.Extensibility.Services; 9 using WixToolset.Extensibility.Services;
10 10
11 internal class TupleDefinitionCreator : ITupleDefinitionCreator 11 internal class SymbolDefinitionCreator : ISymbolDefinitionCreator
12 { 12 {
13 public TupleDefinitionCreator(IWixToolsetServiceProvider serviceProvider) 13 public SymbolDefinitionCreator(IWixToolsetServiceProvider serviceProvider)
14 { 14 {
15 this.ServiceProvider = serviceProvider; 15 this.ServiceProvider = serviceProvider;
16 } 16 }
@@ -19,9 +19,9 @@ namespace WixToolset.Core.ExtensibilityServices
19 19
20 private IEnumerable<IExtensionData> ExtensionData { get; set; } 20 private IEnumerable<IExtensionData> ExtensionData { get; set; }
21 21
22 private Dictionary<string, IntermediateTupleDefinition> CustomDefinitionByName { get; } = new Dictionary<string, IntermediateTupleDefinition>(); 22 private Dictionary<string, IntermediateSymbolDefinition> CustomDefinitionByName { get; } = new Dictionary<string, IntermediateSymbolDefinition>();
23 23
24 public void AddCustomTupleDefinition(IntermediateTupleDefinition definition) 24 public void AddCustomSymbolDefinition(IntermediateSymbolDefinition definition)
25 { 25 {
26 if (!this.CustomDefinitionByName.TryGetValue(definition.Name, out var existing) || definition.Revision > existing.Revision) 26 if (!this.CustomDefinitionByName.TryGetValue(definition.Name, out var existing) || definition.Revision > existing.Revision)
27 { 27 {
@@ -29,12 +29,12 @@ namespace WixToolset.Core.ExtensibilityServices
29 } 29 }
30 } 30 }
31 31
32 public bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition) 32 public bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
33 { 33 {
34 // First, look in the built-ins. 34 // First, look in the built-ins.
35 tupleDefinition = TupleDefinitions.ByName(name); 35 symbolDefinition = SymbolDefinitions.ByName(name);
36 36
37 if (tupleDefinition == null) 37 if (symbolDefinition == null)
38 { 38 {
39 if (this.ExtensionData == null) 39 if (this.ExtensionData == null)
40 { 40 {
@@ -44,20 +44,20 @@ namespace WixToolset.Core.ExtensibilityServices
44 // Second, look in the extensions. 44 // Second, look in the extensions.
45 foreach (var data in this.ExtensionData) 45 foreach (var data in this.ExtensionData)
46 { 46 {
47 if (data.TryGetTupleDefinitionByName(name, out tupleDefinition)) 47 if (data.TryGetSymbolDefinitionByName(name, out symbolDefinition))
48 { 48 {
49 break; 49 break;
50 } 50 }
51 } 51 }
52 52
53 // Finally, look in the custom tuple definitions provided during an intermediate load. 53 // Finally, look in the custom symbol definitions provided during an intermediate load.
54 if (tupleDefinition == null) 54 if (symbolDefinition == null)
55 { 55 {
56 this.CustomDefinitionByName.TryGetValue(name, out tupleDefinition); 56 this.CustomDefinitionByName.TryGetValue(name, out symbolDefinition);
57 } 57 }
58 } 58 }
59 59
60 return tupleDefinition != null; 60 return symbolDefinition != null;
61 } 61 }
62 62
63 private void LoadExtensionData() 63 private void LoadExtensionData()
diff --git a/src/WixToolset.Core/Librarian.cs b/src/WixToolset.Core/Librarian.cs
index 0c519b88..6dc8611d 100644
--- a/src/WixToolset.Core/Librarian.cs
+++ b/src/WixToolset.Core/Librarian.cs
@@ -89,17 +89,17 @@ namespace WixToolset.Core
89 89
90 var fileResolver = new FileResolver(context.BindPaths, context.Extensions); 90 var fileResolver = new FileResolver(context.BindPaths, context.Extensions);
91 91
92 foreach (var tuple in sections.SelectMany(s => s.Tuples)) 92 foreach (var symbol in sections.SelectMany(s => s.Symbols))
93 { 93 {
94 foreach (var field in tuple.Fields.Where(f => f?.Type == IntermediateFieldType.Path)) 94 foreach (var field in symbol.Fields.Where(f => f?.Type == IntermediateFieldType.Path))
95 { 95 {
96 var pathField = field.AsPath(); 96 var pathField = field.AsPath();
97 97
98 if (pathField != null && !String.IsNullOrEmpty(pathField.Path)) 98 if (pathField != null && !String.IsNullOrEmpty(pathField.Path))
99 { 99 {
100 var resolution = variableResolver.ResolveVariables(tuple.SourceLineNumbers, pathField.Path); 100 var resolution = variableResolver.ResolveVariables(symbol.SourceLineNumbers, pathField.Path);
101 101
102 var file = fileResolver.Resolve(tuple.SourceLineNumbers, tuple.Definition, resolution.Value); 102 var file = fileResolver.Resolve(symbol.SourceLineNumbers, symbol.Definition, resolution.Value);
103 103
104 if (!String.IsNullOrEmpty(file)) 104 if (!String.IsNullOrEmpty(file))
105 { 105 {
@@ -108,7 +108,7 @@ namespace WixToolset.Core
108 } 108 }
109 else 109 else
110 { 110 {
111 this.Messaging.Write(ErrorMessages.FileNotFound(tuple.SourceLineNumbers, pathField.Path, tuple.Definition.Name)); 111 this.Messaging.Write(ErrorMessages.FileNotFound(symbol.SourceLineNumbers, pathField.Path, symbol.Definition.Name));
112 } 112 }
113 } 113 }
114 } 114 }
diff --git a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
index 31cbf0b8..1c2ca8eb 100644
--- a/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
+++ b/src/WixToolset.Core/Link/FindEntrySectionAndLoadSymbolsCommand.cs
@@ -31,17 +31,17 @@ namespace WixToolset.Core.Link
31 /// <summary> 31 /// <summary>
32 /// Gets the collection of loaded symbols. 32 /// Gets the collection of loaded symbols.
33 /// </summary> 33 /// </summary>
34 public IDictionary<string, TupleWithSection> TuplesByName { get; private set; } 34 public IDictionary<string, SymbolWithSection> SymbolsByName { get; private set; }
35 35
36 /// <summary> 36 /// <summary>
37 /// Gets the collection of possibly conflicting symbols. 37 /// Gets the collection of possibly conflicting symbols.
38 /// </summary> 38 /// </summary>
39 public IEnumerable<TupleWithSection> PossibleConflicts { get; private set; } 39 public IEnumerable<SymbolWithSection> PossibleConflicts { get; private set; }
40 40
41 public void Execute() 41 public void Execute()
42 { 42 {
43 var tuplesByName = new Dictionary<string, TupleWithSection>(); 43 var symbolsByName = new Dictionary<string, SymbolWithSection>();
44 var possibleConflicts = new HashSet<TupleWithSection>(); 44 var possibleConflicts = new HashSet<SymbolWithSection>();
45 45
46 if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType)) 46 if (!Enum.TryParse(this.ExpectedOutputType.ToString(), out SectionType expectedEntrySectionType))
47 { 47 {
@@ -66,44 +66,44 @@ namespace WixToolset.Core.Link
66 } 66 }
67 else 67 else
68 { 68 {
69 this.Messaging.Write(ErrorMessages.MultipleEntrySections(this.EntrySection.Tuples.FirstOrDefault()?.SourceLineNumbers, this.EntrySection.Id, section.Id)); 69 this.Messaging.Write(ErrorMessages.MultipleEntrySections(this.EntrySection.Symbols.FirstOrDefault()?.SourceLineNumbers, this.EntrySection.Id, section.Id));
70 this.Messaging.Write(ErrorMessages.MultipleEntrySections2(section.Tuples.FirstOrDefault()?.SourceLineNumbers)); 70 this.Messaging.Write(ErrorMessages.MultipleEntrySections2(section.Symbols.FirstOrDefault()?.SourceLineNumbers));
71 } 71 }
72 } 72 }
73 73
74 // Load all the symbols from the section's tables that create symbols. 74 // Load all the symbols from the section's tables that create symbols.
75 foreach (var tuple in section.Tuples.Where(t => t.Id != null)) 75 foreach (var symbol in section.Symbols.Where(t => t.Id != null))
76 { 76 {
77 var symbol = new TupleWithSection(section, tuple); 77 var symbolWithSection = new SymbolWithSection(section, symbol);
78 78
79 if (!tuplesByName.TryGetValue(symbol.Name, out var existingSymbol)) 79 if (!symbolsByName.TryGetValue(symbolWithSection.Name, out var existingSymbol))
80 { 80 {
81 tuplesByName.Add(symbol.Name, symbol); 81 symbolsByName.Add(symbolWithSection.Name, symbolWithSection);
82 } 82 }
83 else // uh-oh, duplicate symbols. 83 else // uh-oh, duplicate symbols.
84 { 84 {
85 // If the duplicate symbols are both private directories, there is a chance that they 85 // If the duplicate symbols are both private directories, there is a chance that they
86 // point to identical tuples. Identical directory tuples are redundant and will not cause 86 // point to identical symbols. Identical directory symbols are redundant and will not cause
87 // conflicts. 87 // conflicts.
88 if (AccessModifier.Private == existingSymbol.Access && AccessModifier.Private == symbol.Access && 88 if (AccessModifier.Private == existingSymbol.Access && AccessModifier.Private == symbolWithSection.Access &&
89 TupleDefinitionType.Directory == existingSymbol.Tuple.Definition.Type && existingSymbol.Tuple.IsIdentical(symbol.Tuple)) 89 SymbolDefinitionType.Directory == existingSymbol.Symbol.Definition.Type && existingSymbol.Symbol.IsIdentical(symbolWithSection.Symbol))
90 { 90 {
91 // Ensure identical symbol's tuple is marked redundant to ensure (should the tuple be 91 // Ensure identical symbol's symbol is marked redundant to ensure (should the symbol be
92 // referenced into the final output) it will not add duplicate primary keys during 92 // referenced into the final output) it will not add duplicate primary keys during
93 // the .IDT importing. 93 // the .IDT importing.
94 //symbol.Row.Redundant = true; - TODO: remove this 94 //symbol.Row.Redundant = true; - TODO: remove this
95 existingSymbol.AddRedundant(symbol); 95 existingSymbol.AddRedundant(symbolWithSection);
96 } 96 }
97 else 97 else
98 { 98 {
99 existingSymbol.AddPossibleConflict(symbol); 99 existingSymbol.AddPossibleConflict(symbolWithSection);
100 possibleConflicts.Add(existingSymbol); 100 possibleConflicts.Add(existingSymbol);
101 } 101 }
102 } 102 }
103 } 103 }
104 } 104 }
105 105
106 this.TuplesByName = tuplesByName; 106 this.SymbolsByName = symbolsByName;
107 this.PossibleConflicts = possibleConflicts; 107 this.PossibleConflicts = possibleConflicts;
108 } 108 }
109 } 109 }
diff --git a/src/WixToolset.Core/Link/IntermediateTupleExtensions.cs b/src/WixToolset.Core/Link/IntermediateTupleExtensions.cs
index c4c12e81..db53f1ce 100644
--- a/src/WixToolset.Core/Link/IntermediateTupleExtensions.cs
+++ b/src/WixToolset.Core/Link/IntermediateTupleExtensions.cs
@@ -4,12 +4,12 @@ namespace WixToolset.Core.Link
4{ 4{
5 using WixToolset.Data; 5 using WixToolset.Data;
6 6
7 internal static class IntermediateTupleExtensions 7 internal static class IntermediateSymbolExtensions
8 { 8 {
9 public static bool IsIdentical(this IntermediateTuple first, IntermediateTuple second) 9 public static bool IsIdentical(this IntermediateSymbol first, IntermediateSymbol second)
10 { 10 {
11 var identical = (first.Definition.Type == second.Definition.Type && 11 var identical = (first.Definition.Type == second.Definition.Type &&
12 first.Definition.Name == second.Definition.Name && 12 first.Definition.Name == second.Definition.Name &&
13 first.Definition.FieldDefinitions.Length == second.Definition.FieldDefinitions.Length); 13 first.Definition.FieldDefinitions.Length == second.Definition.FieldDefinitions.Length);
14 14
15 for (int i = 0; identical && i < first.Definition.FieldDefinitions.Length; ++i) 15 for (int i = 0; identical && i < first.Definition.FieldDefinitions.Length; ++i)
diff --git a/src/WixToolset.Core/Link/ReportConflictingTuplesCommand.cs b/src/WixToolset.Core/Link/ReportConflictingTuplesCommand.cs
index ff01f573..ace2e19d 100644
--- a/src/WixToolset.Core/Link/ReportConflictingTuplesCommand.cs
+++ b/src/WixToolset.Core/Link/ReportConflictingTuplesCommand.cs
@@ -7,9 +7,9 @@ namespace WixToolset.Core.Link
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Extensibility.Services; 8 using WixToolset.Extensibility.Services;
9 9
10 internal class ReportConflictingTuplesCommand 10 internal class ReportConflictingSymbolsCommand
11 { 11 {
12 public ReportConflictingTuplesCommand(IMessaging messaging, IEnumerable<TupleWithSection> possibleConflicts, IEnumerable<IntermediateSection> resolvedSections) 12 public ReportConflictingSymbolsCommand(IMessaging messaging, IEnumerable<SymbolWithSection> possibleConflicts, IEnumerable<IntermediateSection> resolvedSections)
13 { 13 {
14 this.Messaging = messaging; 14 this.Messaging = messaging;
15 this.PossibleConflicts = possibleConflicts; 15 this.PossibleConflicts = possibleConflicts;
@@ -18,18 +18,18 @@ namespace WixToolset.Core.Link
18 18
19 private IMessaging Messaging { get; } 19 private IMessaging Messaging { get; }
20 20
21 private IEnumerable<TupleWithSection> PossibleConflicts { get; } 21 private IEnumerable<SymbolWithSection> PossibleConflicts { get; }
22 22
23 private IEnumerable<IntermediateSection> ResolvedSections { get; } 23 private IEnumerable<IntermediateSection> ResolvedSections { get; }
24 24
25 public void Execute() 25 public void Execute()
26 { 26 {
27 // Do a quick check if there are any possibly conflicting symbols that don't come from tables that allow 27 // Do a quick check if there are any possibly conflicting symbols that don't come from tables that allow
28 // overriding. Hopefully the tuples with possible conflicts list is usually very short list (empty should 28 // overriding. Hopefully the symbols with possible conflicts list is usually very short list (empty should
29 // be the most common). If we find any matches, we'll do a more costly check to see if the possible conflicting 29 // be the most common). If we find any matches, we'll do a more costly check to see if the possible conflicting
30 // tuples are in sections we actually referenced. From the resulting set, show an error for each duplicate 30 // symbols are in sections we actually referenced. From the resulting set, show an error for each duplicate
31 // (aka: conflicting) tuple. 31 // (aka: conflicting) symbol.
32 var illegalDuplicates = this.PossibleConflicts.Where(s => s.Tuple.Definition.Type != TupleDefinitionType.WixAction && s.Tuple.Definition.Type != TupleDefinitionType.WixVariable).ToList(); 32 var illegalDuplicates = this.PossibleConflicts.Where(s => s.Symbol.Definition.Type != SymbolDefinitionType.WixAction && s.Symbol.Definition.Type != SymbolDefinitionType.WixVariable).ToList();
33 if (0 < illegalDuplicates.Count) 33 if (0 < illegalDuplicates.Count)
34 { 34 {
35 var referencedSections = new HashSet<IntermediateSection>(this.ResolvedSections); 35 var referencedSections = new HashSet<IntermediateSection>(this.ResolvedSections);
@@ -40,11 +40,11 @@ namespace WixToolset.Core.Link
40 40
41 if (actuallyReferencedDuplicates.Any()) 41 if (actuallyReferencedDuplicates.Any())
42 { 42 {
43 this.Messaging.Write(ErrorMessages.DuplicateSymbol(referencedDuplicate.Tuple.SourceLineNumbers, referencedDuplicate.Name)); 43 this.Messaging.Write(ErrorMessages.DuplicateSymbol(referencedDuplicate.Symbol.SourceLineNumbers, referencedDuplicate.Name));
44 44
45 foreach (var duplicate in actuallyReferencedDuplicates) 45 foreach (var duplicate in actuallyReferencedDuplicates)
46 { 46 {
47 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(duplicate.Tuple.SourceLineNumbers)); 47 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(duplicate.Symbol.SourceLineNumbers));
48 } 48 }
49 } 49 }
50 } 50 }
diff --git a/src/WixToolset.Core/Link/ResolveReferencesCommand.cs b/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
index 4ffb5443..d2be0699 100644
--- a/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
+++ b/src/WixToolset.Core/Link/ResolveReferencesCommand.cs
@@ -6,7 +6,7 @@ namespace WixToolset.Core.Link
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>
@@ -15,19 +15,19 @@ namespace WixToolset.Core.Link
15 internal class ResolveReferencesCommand 15 internal class ResolveReferencesCommand
16 { 16 {
17 private readonly IntermediateSection entrySection; 17 private readonly IntermediateSection entrySection;
18 private readonly IDictionary<string, TupleWithSection> tuplesWithSections; 18 private readonly IDictionary<string, SymbolWithSection> symbolsWithSections;
19 private HashSet<TupleWithSection> referencedTuples; 19 private HashSet<SymbolWithSection> referencedSymbols;
20 private HashSet<IntermediateSection> resolvedSections; 20 private HashSet<IntermediateSection> resolvedSections;
21 21
22 public ResolveReferencesCommand(IMessaging messaging, IntermediateSection entrySection, IDictionary<string, TupleWithSection> tuplesWithSections) 22 public ResolveReferencesCommand(IMessaging messaging, IntermediateSection entrySection, IDictionary<string, SymbolWithSection> symbolsWithSections)
23 { 23 {
24 this.Messaging = messaging; 24 this.Messaging = messaging;
25 this.entrySection = entrySection; 25 this.entrySection = entrySection;
26 this.tuplesWithSections = tuplesWithSections; 26 this.symbolsWithSections = symbolsWithSections;
27 this.BuildingMergeModule = (SectionType.Module == entrySection.Type); 27 this.BuildingMergeModule = (SectionType.Module == entrySection.Type);
28 } 28 }
29 29
30 public IEnumerable<TupleWithSection> ReferencedTupleWithSections => this.referencedTuples; 30 public IEnumerable<SymbolWithSection> ReferencedSymbolWithSections => this.referencedSymbols;
31 31
32 public IEnumerable<IntermediateSection> ResolvedSections => this.resolvedSections; 32 public IEnumerable<IntermediateSection> ResolvedSections => this.resolvedSections;
33 33
@@ -41,7 +41,7 @@ namespace WixToolset.Core.Link
41 public void Execute() 41 public void Execute()
42 { 42 {
43 this.resolvedSections = new HashSet<IntermediateSection>(); 43 this.resolvedSections = new HashSet<IntermediateSection>();
44 this.referencedTuples = new HashSet<TupleWithSection>(); 44 this.referencedSymbols = new HashSet<SymbolWithSection>();
45 45
46 this.RecursivelyResolveReferences(this.entrySection); 46 this.RecursivelyResolveReferences(this.entrySection);
47 } 47 }
@@ -60,10 +60,10 @@ namespace WixToolset.Core.Link
60 } 60 }
61 61
62 // Process all of the references contained in this section using the collection of 62 // Process all of the references contained in this section using the collection of
63 // tuples provided. Then recursively call this method to process the 63 // symbols provided. Then recursively call this method to process the
64 // located tuple's section. All in all this is a very simple depth-first 64 // located symbol's section. All in all this is a very simple depth-first
65 // search of the references per-section. 65 // search of the references per-section.
66 foreach (var wixSimpleReferenceRow in section.Tuples.OfType<WixSimpleReferenceTuple>()) 66 foreach (var wixSimpleReferenceRow in section.Symbols.OfType<WixSimpleReferenceSymbol>())
67 { 67 {
68 // If we're building a Merge Module, ignore all references to the Media table 68 // If we're building a Merge Module, ignore all references to the Media table
69 // because Merge Modules don't have Media tables. 69 // because Merge Modules don't have Media tables.
@@ -72,44 +72,44 @@ namespace WixToolset.Core.Link
72 continue; 72 continue;
73 } 73 }
74 74
75 if (!this.tuplesWithSections.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var tupleWithSection)) 75 if (!this.symbolsWithSections.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var symbolWithSection))
76 { 76 {
77 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName)); 77 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName));
78 } 78 }
79 else // see if the tuple (and any of its duplicates) are appropriately accessible. 79 else // see if the symbol (and any of its duplicates) are appropriately accessible.
80 { 80 {
81 var accessible = this.DetermineAccessibleTuples(section, tupleWithSection); 81 var accessible = this.DetermineAccessibleSymbols(section, symbolWithSection);
82 if (!accessible.Any()) 82 if (!accessible.Any())
83 { 83 {
84 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName, tupleWithSection.Access)); 84 this.Messaging.Write(ErrorMessages.UnresolvedReference(wixSimpleReferenceRow.SourceLineNumbers, wixSimpleReferenceRow.SymbolicName, symbolWithSection.Access));
85 } 85 }
86 else if (1 == accessible.Count) 86 else if (1 == accessible.Count)
87 { 87 {
88 var accessibleTuple = accessible[0]; 88 var accessibleSymbol = accessible[0];
89 this.referencedTuples.Add(accessibleTuple); 89 this.referencedSymbols.Add(accessibleSymbol);
90 90
91 if (null != accessibleTuple.Section) 91 if (null != accessibleSymbol.Section)
92 { 92 {
93 this.RecursivelyResolveReferences(accessibleTuple.Section); 93 this.RecursivelyResolveReferences(accessibleSymbol.Section);
94 } 94 }
95 } 95 }
96 else // display errors for the duplicate tuples. 96 else // display errors for the duplicate symbols.
97 { 97 {
98 var accessibleTuple = accessible[0]; 98 var accessibleSymbol = accessible[0];
99 var referencingSourceLineNumber = wixSimpleReferenceRow.SourceLineNumbers?.ToString(); 99 var referencingSourceLineNumber = wixSimpleReferenceRow.SourceLineNumbers?.ToString();
100 100
101 if (String.IsNullOrEmpty(referencingSourceLineNumber)) 101 if (String.IsNullOrEmpty(referencingSourceLineNumber))
102 { 102 {
103 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleTuple.Tuple.SourceLineNumbers, accessibleTuple.Name)); 103 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleSymbol.Name));
104 } 104 }
105 else 105 else
106 { 106 {
107 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleTuple.Tuple.SourceLineNumbers, accessibleTuple.Name, referencingSourceLineNumber)); 107 this.Messaging.Write(ErrorMessages.DuplicateSymbol(accessibleSymbol.Symbol.SourceLineNumbers, accessibleSymbol.Name, referencingSourceLineNumber));
108 } 108 }
109 109
110 foreach (var accessibleDuplicate in accessible.Skip(1)) 110 foreach (var accessibleDuplicate in accessible.Skip(1))
111 { 111 {
112 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(accessibleDuplicate.Tuple.SourceLineNumbers)); 112 this.Messaging.Write(ErrorMessages.DuplicateSymbol2(accessibleDuplicate.Symbol.SourceLineNumbers));
113 } 113 }
114 } 114 }
115 } 115 }
@@ -117,67 +117,67 @@ namespace WixToolset.Core.Link
117 } 117 }
118 118
119 /// <summary> 119 /// <summary>
120 /// Determine if the tuple and any of its duplicates are accessbile by referencing section. 120 /// Determine if the symbol and any of its duplicates are accessbile by referencing section.
121 /// </summary> 121 /// </summary>
122 /// <param name="referencingSection">Section referencing the tuple.</param> 122 /// <param name="referencingSection">Section referencing the symbol.</param>
123 /// <param name="tupleWithSection">Tuple being referenced.</param> 123 /// <param name="symbolWithSection">Symbol being referenced.</param>
124 /// <returns>List of tuples accessible by referencing section.</returns> 124 /// <returns>List of symbols accessible by referencing section.</returns>
125 private List<TupleWithSection> DetermineAccessibleTuples(IntermediateSection referencingSection, TupleWithSection tupleWithSection) 125 private List<SymbolWithSection> DetermineAccessibleSymbols(IntermediateSection referencingSection, SymbolWithSection symbolWithSection)
126 { 126 {
127 var accessibleTuples = new List<TupleWithSection>(); 127 var accessibleSymbols = new List<SymbolWithSection>();
128 128
129 if (this.AccessibleTuple(referencingSection, tupleWithSection)) 129 if (this.AccessibleSymbol(referencingSection, symbolWithSection))
130 { 130 {
131 accessibleTuples.Add(tupleWithSection); 131 accessibleSymbols.Add(symbolWithSection);
132 } 132 }
133 133
134 foreach (var dupe in tupleWithSection.PossiblyConflicts) 134 foreach (var dupe in symbolWithSection.PossiblyConflicts)
135 { 135 {
136 // don't count overridable WixActionTuples 136 // don't count overridable WixActionSymbols
137 var tupleAction = tupleWithSection.Tuple as WixActionTuple; 137 var symbolAction = symbolWithSection.Symbol as WixActionSymbol;
138 var dupeAction = dupe.Tuple as WixActionTuple; 138 var dupeAction = dupe.Symbol as WixActionSymbol;
139 if (tupleAction?.Overridable != dupeAction?.Overridable) 139 if (symbolAction?.Overridable != dupeAction?.Overridable)
140 { 140 {
141 continue; 141 continue;
142 } 142 }
143 143
144 if (this.AccessibleTuple(referencingSection, dupe)) 144 if (this.AccessibleSymbol(referencingSection, dupe))
145 { 145 {
146 accessibleTuples.Add(dupe); 146 accessibleSymbols.Add(dupe);
147 } 147 }
148 } 148 }
149 149
150 foreach (var dupe in tupleWithSection.Redundants) 150 foreach (var dupe in symbolWithSection.Redundants)
151 { 151 {
152 if (this.AccessibleTuple(referencingSection, dupe)) 152 if (this.AccessibleSymbol(referencingSection, dupe))
153 { 153 {
154 accessibleTuples.Add(dupe); 154 accessibleSymbols.Add(dupe);
155 } 155 }
156 } 156 }
157 157
158 return accessibleTuples; 158 return accessibleSymbols;
159 } 159 }
160 160
161 /// <summary> 161 /// <summary>
162 /// Determine if a single tuple is accessible by the referencing section. 162 /// Determine if a single symbol is accessible by the referencing section.
163 /// </summary> 163 /// </summary>
164 /// <param name="referencingSection">Section referencing the tuple.</param> 164 /// <param name="referencingSection">Section referencing the symbol.</param>
165 /// <param name="tupleWithSection">Tuple being referenced.</param> 165 /// <param name="symbolWithSection">Symbol being referenced.</param>
166 /// <returns>True if tuple is accessible.</returns> 166 /// <returns>True if symbol is accessible.</returns>
167 private bool AccessibleTuple(IntermediateSection referencingSection, TupleWithSection tupleWithSection) 167 private bool AccessibleSymbol(IntermediateSection referencingSection, SymbolWithSection symbolWithSection)
168 { 168 {
169 switch (tupleWithSection.Access) 169 switch (symbolWithSection.Access)
170 { 170 {
171 case AccessModifier.Public: 171 case AccessModifier.Public:
172 return true; 172 return true;
173 case AccessModifier.Internal: 173 case AccessModifier.Internal:
174 return tupleWithSection.Section.CompilationId.Equals(referencingSection.CompilationId) || (null != tupleWithSection.Section.LibraryId && tupleWithSection.Section.LibraryId.Equals(referencingSection.LibraryId)); 174 return symbolWithSection.Section.CompilationId.Equals(referencingSection.CompilationId) || (null != symbolWithSection.Section.LibraryId && symbolWithSection.Section.LibraryId.Equals(referencingSection.LibraryId));
175 case AccessModifier.Protected: 175 case AccessModifier.Protected:
176 return tupleWithSection.Section.CompilationId.Equals(referencingSection.CompilationId); 176 return symbolWithSection.Section.CompilationId.Equals(referencingSection.CompilationId);
177 case AccessModifier.Private: 177 case AccessModifier.Private:
178 return referencingSection == tupleWithSection.Section; 178 return referencingSection == symbolWithSection.Section;
179 default: 179 default:
180 throw new ArgumentOutOfRangeException(nameof(tupleWithSection.Access)); 180 throw new ArgumentOutOfRangeException(nameof(symbolWithSection.Access));
181 } 181 }
182 } 182 }
183 } 183 }
diff --git a/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs b/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs
index 80cafa50..1702d3ca 100644
--- a/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs
+++ b/src/WixToolset.Core/Link/WixComplexReferenceTupleExtensions.cs
@@ -3,17 +3,17 @@
3namespace WixToolset.Core.Link 3namespace WixToolset.Core.Link
4{ 4{
5 using System; 5 using System;
6 using WixToolset.Data.Tuples; 6 using WixToolset.Data.Symbols;
7 7
8 internal static class WixComplexReferenceTupleExtensions 8 internal static class WixComplexReferenceSymbolExtensions
9 { 9 {
10 /// <summary> 10 /// <summary>
11 /// Creates a shallow copy of the ComplexReference. 11 /// Creates a shallow copy of the ComplexReference.
12 /// </summary> 12 /// </summary>
13 /// <returns>A shallow copy of the ComplexReference.</returns> 13 /// <returns>A shallow copy of the ComplexReference.</returns>
14 public static WixComplexReferenceTuple Clone(this WixComplexReferenceTuple source) 14 public static WixComplexReferenceSymbol Clone(this WixComplexReferenceSymbol source)
15 { 15 {
16 var clone = new WixComplexReferenceTuple(source.SourceLineNumbers, source.Id); 16 var clone = new WixComplexReferenceSymbol(source.SourceLineNumbers, source.Id);
17 clone.ParentType = source.ParentType; 17 clone.ParentType = source.ParentType;
18 clone.Parent = source.Parent; 18 clone.Parent = source.Parent;
19 clone.ParentLanguage = source.ParentLanguage; 19 clone.ParentLanguage = source.ParentLanguage;
@@ -29,23 +29,23 @@ namespace WixToolset.Core.Link
29 /// </summary> 29 /// </summary>
30 /// <param name="obj">Complex reference to compare to.</param> 30 /// <param name="obj">Complex reference to compare to.</param>
31 /// <returns>Zero if the objects are equivalent, negative number if the provided object is less, positive if greater.</returns> 31 /// <returns>Zero if the objects are equivalent, negative number if the provided object is less, positive if greater.</returns>
32 public static int CompareToWithoutConsideringPrimary(this WixComplexReferenceTuple tuple, WixComplexReferenceTuple other) 32 public static int CompareToWithoutConsideringPrimary(this WixComplexReferenceSymbol symbol, WixComplexReferenceSymbol other)
33 { 33 {
34 var comparison = tuple.ChildType - other.ChildType; 34 var comparison = symbol.ChildType - other.ChildType;
35 if (0 == comparison) 35 if (0 == comparison)
36 { 36 {
37 comparison = String.Compare(tuple.Child, other.Child, StringComparison.Ordinal); 37 comparison = String.Compare(symbol.Child, other.Child, StringComparison.Ordinal);
38 if (0 == comparison) 38 if (0 == comparison)
39 { 39 {
40 comparison = tuple.ParentType - other.ParentType; 40 comparison = symbol.ParentType - other.ParentType;
41 if (0 == comparison) 41 if (0 == comparison)
42 { 42 {
43 string thisParentLanguage = null == tuple.ParentLanguage ? String.Empty : tuple.ParentLanguage; 43 string thisParentLanguage = null == symbol.ParentLanguage ? String.Empty : symbol.ParentLanguage;
44 string otherParentLanguage = null == other.ParentLanguage ? String.Empty : other.ParentLanguage; 44 string otherParentLanguage = null == other.ParentLanguage ? String.Empty : other.ParentLanguage;
45 comparison = String.Compare(thisParentLanguage, otherParentLanguage, StringComparison.Ordinal); 45 comparison = String.Compare(thisParentLanguage, otherParentLanguage, StringComparison.Ordinal);
46 if (0 == comparison) 46 if (0 == comparison)
47 { 47 {
48 comparison = String.Compare(tuple.Parent, other.Parent, StringComparison.Ordinal); 48 comparison = String.Compare(symbol.Parent, other.Parent, StringComparison.Ordinal);
49 } 49 }
50 } 50 }
51 } 51 }
@@ -58,15 +58,15 @@ namespace WixToolset.Core.Link
58 /// Changes all of the parent references to point to the passed in parent reference. 58 /// Changes all of the parent references to point to the passed in parent reference.
59 /// </summary> 59 /// </summary>
60 /// <param name="parent">New parent complex reference.</param> 60 /// <param name="parent">New parent complex reference.</param>
61 public static void Reparent(this WixComplexReferenceTuple tuple, WixComplexReferenceTuple parent) 61 public static void Reparent(this WixComplexReferenceSymbol symbol, WixComplexReferenceSymbol parent)
62 { 62 {
63 tuple.Parent = parent.Parent; 63 symbol.Parent = parent.Parent;
64 tuple.ParentLanguage = parent.ParentLanguage; 64 symbol.ParentLanguage = parent.ParentLanguage;
65 tuple.ParentType = parent.ParentType; 65 symbol.ParentType = parent.ParentType;
66 66
67 if (!tuple.IsPrimary) 67 if (!symbol.IsPrimary)
68 { 68 {
69 tuple.IsPrimary = parent.IsPrimary; 69 symbol.IsPrimary = parent.IsPrimary;
70 } 70 }
71 } 71 }
72 } 72 }
diff --git a/src/WixToolset.Core/Link/WixGroupingOrdering.cs b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
index 7e0030ca..a7013062 100644
--- a/src/WixToolset.Core/Link/WixGroupingOrdering.cs
+++ b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core.Link
10 using System.Linq; 10 using System.Linq;
11 using System.Text; 11 using System.Text;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Symbols;
14 using WixToolset.Extensibility.Services; 14 using WixToolset.Extensibility.Services;
15 using WixToolset.Data.Burn; 15 using WixToolset.Data.Burn;
16 16
@@ -155,7 +155,7 @@ namespace WixToolset.Core.Link
155 foreach (int rowIndex in sortedIndexes) 155 foreach (int rowIndex in sortedIndexes)
156 { 156 {
157 //wixGroupTable.Rows.RemoveAt(rowIndex); 157 //wixGroupTable.Rows.RemoveAt(rowIndex);
158 this.EntrySection.Tuples.RemoveAt(rowIndex); 158 this.EntrySection.Symbols.RemoveAt(rowIndex);
159 } 159 }
160 } 160 }
161 161
@@ -173,7 +173,7 @@ namespace WixToolset.Core.Link
173 // groups to read from that table instead. 173 // groups to read from that table instead.
174 foreach (var item in orderedItems) 174 foreach (var item in orderedItems)
175 { 175 {
176 this.EntrySection.AddTuple(new WixGroupTuple(item.Row.SourceLineNumbers) 176 this.EntrySection.AddSymbol(new WixGroupSymbol(item.Row.SourceLineNumbers)
177 { 177 {
178 ParentId = parentId, 178 ParentId = parentId,
179 ParentType = (ComplexReferenceParentType)Enum.Parse(typeof(ComplexReferenceParentType), parentType), 179 ParentType = (ComplexReferenceParentType)Enum.Parse(typeof(ComplexReferenceParentType), parentType),
@@ -238,9 +238,9 @@ namespace WixToolset.Core.Link
238 //} 238 //}
239 239
240 // Collect all of the groups 240 // Collect all of the groups
241 for (int rowIndex = 0; rowIndex < this.EntrySection.Tuples.Count; ++rowIndex) 241 for (int rowIndex = 0; rowIndex < this.EntrySection.Symbols.Count; ++rowIndex)
242 { 242 {
243 if (this.EntrySection.Tuples[rowIndex] is WixGroupTuple row) 243 if (this.EntrySection.Symbols[rowIndex] is WixGroupSymbol row)
244 { 244 {
245 var rowParentName = row.ParentId; 245 var rowParentName = row.ParentId;
246 var rowParentType = row.ParentType.ToString(); 246 var rowParentType = row.ParentType.ToString();
@@ -357,7 +357,7 @@ namespace WixToolset.Core.Link
357 // return; 357 // return;
358 //} 358 //}
359 359
360 foreach (var row in this.EntrySection.Tuples.OfType<WixOrderingTuple>()) 360 foreach (var row in this.EntrySection.Symbols.OfType<WixOrderingSymbol>())
361 { 361 {
362 var rowItemType = row.ItemType.ToString(); 362 var rowItemType = row.ItemType.ToString();
363 var rowItemName = row.ItemIdRef; 363 var rowItemName = row.ItemIdRef;
@@ -513,7 +513,7 @@ namespace WixToolset.Core.Link
513 private readonly ItemCollection beforeItems; // for checking for circular references 513 private readonly ItemCollection beforeItems; // for checking for circular references
514 private bool flattenedAfterItems; 514 private bool flattenedAfterItems;
515 515
516 public Item(IntermediateTuple row, string type, string id) 516 public Item(IntermediateSymbol row, string type, string id)
517 { 517 {
518 this.Row = row; 518 this.Row = row;
519 this.Type = type; 519 this.Type = type;
@@ -526,7 +526,7 @@ namespace WixToolset.Core.Link
526 this.flattenedAfterItems = false; 526 this.flattenedAfterItems = false;
527 } 527 }
528 528
529 public IntermediateTuple Row { get; private set; } 529 public IntermediateSymbol Row { get; private set; }
530 public string Type { get; private set; } 530 public string Type { get; private set; }
531 public string Id { get; private set; } 531 public string Id { get; private set; }
532 public string Key { get; private set; } 532 public string Key { get; private set; }
diff --git a/src/WixToolset.Core/LinkContext.cs b/src/WixToolset.Core/LinkContext.cs
index 65b1179e..2f5ecf59 100644
--- a/src/WixToolset.Core/LinkContext.cs
+++ b/src/WixToolset.Core/LinkContext.cs
@@ -26,7 +26,7 @@ namespace WixToolset.Core
26 26
27 public IEnumerable<Intermediate> Intermediates { get; set; } 27 public IEnumerable<Intermediate> Intermediates { get; set; }
28 28
29 public ITupleDefinitionCreator TupleDefinitionCreator { get; set; } 29 public ISymbolDefinitionCreator SymbolDefinitionCreator { get; set; }
30 30
31 public CancellationToken CancellationToken { get; set; } 31 public CancellationToken CancellationToken { get; set; }
32 } 32 }
diff --git a/src/WixToolset.Core/Linker.cs b/src/WixToolset.Core/Linker.cs
index 862681bb..cdefa5c7 100644
--- a/src/WixToolset.Core/Linker.cs
+++ b/src/WixToolset.Core/Linker.cs
@@ -10,7 +10,7 @@ namespace WixToolset.Core
10 using System.Linq; 10 using System.Linq;
11 using WixToolset.Core.Link; 11 using WixToolset.Core.Link;
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.Data; 15 using WixToolset.Extensibility.Data;
16 using WixToolset.Extensibility.Services; 16 using WixToolset.Extensibility.Services;
@@ -60,9 +60,9 @@ namespace WixToolset.Core
60 { 60 {
61 this.Context = context; 61 this.Context = context;
62 62
63 if (this.Context.TupleDefinitionCreator == null) 63 if (this.Context.SymbolDefinitionCreator == null)
64 { 64 {
65 this.Context.TupleDefinitionCreator = this.ServiceProvider.GetService<ITupleDefinitionCreator>(); 65 this.Context.SymbolDefinitionCreator = this.ServiceProvider.GetService<ISymbolDefinitionCreator>();
66 } 66 }
67 67
68 foreach (var extension in this.Context.Extensions) 68 foreach (var extension in this.Context.Extensions)
@@ -85,7 +85,7 @@ namespace WixToolset.Core
85 // Add sections from the extensions with data. 85 // Add sections from the extensions with data.
86 foreach (var data in this.Context.ExtensionData) 86 foreach (var data in this.Context.ExtensionData)
87 { 87 {
88 var library = data.GetLibrary(this.Context.TupleDefinitionCreator); 88 var library = data.GetLibrary(this.Context.SymbolDefinitionCreator);
89 89
90 if (library != null) 90 if (library != null)
91 { 91 {
@@ -107,7 +107,7 @@ namespace WixToolset.Core
107 107
108 var multipleFeatureComponents = new Hashtable(); 108 var multipleFeatureComponents = new Hashtable();
109 109
110 var wixVariables = new Dictionary<string, WixVariableTuple>(); 110 var wixVariables = new Dictionary<string, WixVariableSymbol>();
111 111
112#if MOVE_TO_BACKEND 112#if MOVE_TO_BACKEND
113 // verify that modularization types match for foreign key relationships 113 // verify that modularization types match for foreign key relationships
@@ -149,12 +149,12 @@ namespace WixToolset.Core
149 throw new WixException(ErrorMessages.MissingEntrySection(this.Context.ExpectedOutputType.ToString())); 149 throw new WixException(ErrorMessages.MissingEntrySection(this.Context.ExpectedOutputType.ToString()));
150 } 150 }
151 151
152 // Add the missing standard action tuples. 152 // Add the missing standard action symbols.
153 this.LoadStandardActions(find.EntrySection, find.TuplesByName); 153 this.LoadStandardActions(find.EntrySection, find.SymbolsByName);
154 154
155 // Resolve the tuple references to find the set of sections we care about for linking. 155 // Resolve the symbol references to find the set of sections we care about for linking.
156 // Of course, we start with the entry section (that's how it got its name after all). 156 // Of course, we start with the entry section (that's how it got its name after all).
157 var resolve = new ResolveReferencesCommand(this.Messaging, find.EntrySection, find.TuplesByName); 157 var resolve = new ResolveReferencesCommand(this.Messaging, find.EntrySection, find.SymbolsByName);
158 158
159 resolve.Execute(); 159 resolve.Execute();
160 160
@@ -190,16 +190,16 @@ namespace WixToolset.Core
190 } 190 }
191 191
192 // Display an error message for Components that were not referenced by a Feature. 192 // Display an error message for Components that were not referenced by a Feature.
193 foreach (var tupleWithSection in resolve.ReferencedTupleWithSections.Where(s => s.Tuple.Definition.Type == TupleDefinitionType.Component)) 193 foreach (var symbolWithSection in resolve.ReferencedSymbolWithSections.Where(s => s.Symbol.Definition.Type == SymbolDefinitionType.Component))
194 { 194 {
195 if (!referencedComponents.Contains(tupleWithSection.Name)) 195 if (!referencedComponents.Contains(symbolWithSection.Name))
196 { 196 {
197 this.Messaging.Write(ErrorMessages.OrphanedComponent(tupleWithSection.Tuple.SourceLineNumbers, tupleWithSection.Tuple.Id.Id)); 197 this.Messaging.Write(ErrorMessages.OrphanedComponent(symbolWithSection.Symbol.SourceLineNumbers, symbolWithSection.Symbol.Id.Id));
198 } 198 }
199 } 199 }
200 200
201 // Report duplicates that would ultimately end up being primary key collisions. 201 // Report duplicates that would ultimately end up being primary key collisions.
202 var reportDupes = new ReportConflictingTuplesCommand(this.Messaging, find.PossibleConflicts, resolve.ResolvedSections); 202 var reportDupes = new ReportConflictingSymbolsCommand(this.Messaging, find.PossibleConflicts, resolve.ResolvedSections);
203 reportDupes.Execute(); 203 reportDupes.Execute();
204 204
205 if (this.Messaging.EncounteredError) 205 if (this.Messaging.EncounteredError)
@@ -208,7 +208,7 @@ namespace WixToolset.Core
208 } 208 }
209 209
210 // resolve the feature to feature connects 210 // resolve the feature to feature connects
211 this.ResolveFeatureToFeatureConnects(featuresToFeatures, find.TuplesByName); 211 this.ResolveFeatureToFeatureConnects(featuresToFeatures, find.SymbolsByName);
212 212
213 // Create the section to hold the linked content. 213 // Create the section to hold the linked content.
214 var resolvedSection = new IntermediateSection(find.EntrySection.Id, find.EntrySection.Type, find.EntrySection.Codepage); 214 var resolvedSection = new IntermediateSection(find.EntrySection.Id, find.EntrySection.Type, find.EntrySection.Codepage);
@@ -225,17 +225,17 @@ namespace WixToolset.Core
225 sectionId = "wix.section." + sectionCount.ToString(CultureInfo.InvariantCulture); 225 sectionId = "wix.section." + sectionCount.ToString(CultureInfo.InvariantCulture);
226 } 226 }
227 227
228 foreach (var tuple in section.Tuples) 228 foreach (var symbol in section.Symbols)
229 { 229 {
230 var copyTuple = true; // by default, copy tuples. 230 var copySymbol = true; // by default, copy symbols.
231 231
232 // handle special tables 232 // handle special tables
233 switch (tuple.Definition.Type) 233 switch (symbol.Definition.Type)
234 { 234 {
235 case TupleDefinitionType.Class: 235 case SymbolDefinitionType.Class:
236 if (SectionType.Product == resolvedSection.Type) 236 if (SectionType.Product == resolvedSection.Type)
237 { 237 {
238 this.ResolveFeatures(tuple, (int)ClassTupleFields.ComponentRef, (int)ClassTupleFields.FeatureRef, componentsToFeatures, multipleFeatureComponents); 238 this.ResolveFeatures(symbol, (int)ClassSymbolFields.ComponentRef, (int)ClassSymbolFields.FeatureRef, componentsToFeatures, multipleFeatureComponents);
239 } 239 }
240 break; 240 break;
241 241
@@ -287,48 +287,48 @@ namespace WixToolset.Core
287 } 287 }
288 break; 288 break;
289#endif 289#endif
290 case TupleDefinitionType.Extension: 290 case SymbolDefinitionType.Extension:
291 if (SectionType.Product == resolvedSection.Type) 291 if (SectionType.Product == resolvedSection.Type)
292 { 292 {
293 this.ResolveFeatures(tuple, (int)ExtensionTupleFields.ComponentRef, (int)ExtensionTupleFields.FeatureRef, componentsToFeatures, multipleFeatureComponents); 293 this.ResolveFeatures(symbol, (int)ExtensionSymbolFields.ComponentRef, (int)ExtensionSymbolFields.FeatureRef, componentsToFeatures, multipleFeatureComponents);
294 } 294 }
295 break; 295 break;
296 296
297#if MOVE_TO_BACKEND 297#if MOVE_TO_BACKEND
298 case TupleDefinitionType.ModuleSubstitution: 298 case SymbolDefinitionType.ModuleSubstitution:
299 containsModuleSubstitution = true; 299 containsModuleSubstitution = true;
300 break; 300 break;
301 301
302 case TupleDefinitionType.ModuleConfiguration: 302 case SymbolDefinitionType.ModuleConfiguration:
303 containsModuleConfiguration = true; 303 containsModuleConfiguration = true;
304 break; 304 break;
305#endif 305#endif
306 306
307 case TupleDefinitionType.Assembly: 307 case SymbolDefinitionType.Assembly:
308 if (SectionType.Product == resolvedSection.Type) 308 if (SectionType.Product == resolvedSection.Type)
309 { 309 {
310 this.ResolveFeatures(tuple, (int)AssemblyTupleFields.ComponentRef, (int)AssemblyTupleFields.FeatureRef, componentsToFeatures, multipleFeatureComponents); 310 this.ResolveFeatures(symbol, (int)AssemblySymbolFields.ComponentRef, (int)AssemblySymbolFields.FeatureRef, componentsToFeatures, multipleFeatureComponents);
311 } 311 }
312 break; 312 break;
313 313
314 case TupleDefinitionType.PublishComponent: 314 case SymbolDefinitionType.PublishComponent:
315 if (SectionType.Product == resolvedSection.Type) 315 if (SectionType.Product == resolvedSection.Type)
316 { 316 {
317 this.ResolveFeatures(tuple, (int)PublishComponentTupleFields.ComponentRef, (int)PublishComponentTupleFields.FeatureRef, componentsToFeatures, multipleFeatureComponents); 317 this.ResolveFeatures(symbol, (int)PublishComponentSymbolFields.ComponentRef, (int)PublishComponentSymbolFields.FeatureRef, componentsToFeatures, multipleFeatureComponents);
318 } 318 }
319 break; 319 break;
320 320
321 case TupleDefinitionType.Shortcut: 321 case SymbolDefinitionType.Shortcut:
322 if (SectionType.Product == resolvedSection.Type) 322 if (SectionType.Product == resolvedSection.Type)
323 { 323 {
324 this.ResolveFeatures(tuple, (int)ShortcutTupleFields.ComponentRef, (int)ShortcutTupleFields.Target, componentsToFeatures, multipleFeatureComponents); 324 this.ResolveFeatures(symbol, (int)ShortcutSymbolFields.ComponentRef, (int)ShortcutSymbolFields.Target, componentsToFeatures, multipleFeatureComponents);
325 } 325 }
326 break; 326 break;
327 327
328 case TupleDefinitionType.TypeLib: 328 case SymbolDefinitionType.TypeLib:
329 if (SectionType.Product == resolvedSection.Type) 329 if (SectionType.Product == resolvedSection.Type)
330 { 330 {
331 this.ResolveFeatures(tuple, (int)TypeLibTupleFields.ComponentRef, (int)TypeLibTupleFields.FeatureRef, componentsToFeatures, multipleFeatureComponents); 331 this.ResolveFeatures(symbol, (int)TypeLibSymbolFields.ComponentRef, (int)TypeLibSymbolFields.FeatureRef, componentsToFeatures, multipleFeatureComponents);
332 } 332 }
333 break; 333 break;
334 334
@@ -352,51 +352,51 @@ namespace WixToolset.Core
352 break; 352 break;
353#endif 353#endif
354 354
355 case TupleDefinitionType.WixMerge: 355 case SymbolDefinitionType.WixMerge:
356 if (SectionType.Product == resolvedSection.Type) 356 if (SectionType.Product == resolvedSection.Type)
357 { 357 {
358 this.ResolveFeatures(tuple, -1, (int)WixMergeTupleFields.FeatureRef, modulesToFeatures, null); 358 this.ResolveFeatures(symbol, -1, (int)WixMergeSymbolFields.FeatureRef, modulesToFeatures, null);
359 } 359 }
360 break; 360 break;
361 361
362 case TupleDefinitionType.WixComplexReference: 362 case SymbolDefinitionType.WixComplexReference:
363 copyTuple = false; 363 copySymbol = false;
364 break; 364 break;
365 365
366 case TupleDefinitionType.WixSimpleReference: 366 case SymbolDefinitionType.WixSimpleReference:
367 copyTuple = false; 367 copySymbol = false;
368 break; 368 break;
369 369
370 case TupleDefinitionType.WixVariable: 370 case SymbolDefinitionType.WixVariable:
371 // check for colliding values and collect the wix variable rows 371 // check for colliding values and collect the wix variable rows
372 { 372 {
373 var wixVariableTuple = (WixVariableTuple)tuple; 373 var wixVariableSymbol = (WixVariableSymbol)symbol;
374 var id = wixVariableTuple.Id.Id; 374 var id = wixVariableSymbol.Id.Id;
375 375
376 if (wixVariables.TryGetValue(id, out var collidingTuple)) 376 if (wixVariables.TryGetValue(id, out var collidingSymbol))
377 { 377 {
378 if (collidingTuple.Overridable && !wixVariableTuple.Overridable) 378 if (collidingSymbol.Overridable && !wixVariableSymbol.Overridable)
379 { 379 {
380 wixVariables[id] = wixVariableTuple; 380 wixVariables[id] = wixVariableSymbol;
381 } 381 }
382 else if (!wixVariableTuple.Overridable || (collidingTuple.Overridable && wixVariableTuple.Overridable)) 382 else if (!wixVariableSymbol.Overridable || (collidingSymbol.Overridable && wixVariableSymbol.Overridable))
383 { 383 {
384 this.Messaging.Write(ErrorMessages.WixVariableCollision(wixVariableTuple.SourceLineNumbers, id)); 384 this.Messaging.Write(ErrorMessages.WixVariableCollision(wixVariableSymbol.SourceLineNumbers, id));
385 } 385 }
386 } 386 }
387 else 387 else
388 { 388 {
389 wixVariables.Add(id, wixVariableTuple); 389 wixVariables.Add(id, wixVariableSymbol);
390 } 390 }
391 } 391 }
392 392
393 copyTuple = false; 393 copySymbol = false;
394 break; 394 break;
395 } 395 }
396 396
397 if (copyTuple) 397 if (copySymbol)
398 { 398 {
399 resolvedSection.AddTuple(tuple); 399 resolvedSection.AddSymbol(symbol);
400 } 400 }
401 } 401 }
402 } 402 }
@@ -406,7 +406,7 @@ namespace WixToolset.Core
406 { 406 {
407 foreach (var feature in connectToFeature.ConnectFeatures) 407 foreach (var feature in connectToFeature.ConnectFeatures)
408 { 408 {
409 resolvedSection.AddTuple(new WixFeatureModulesTuple 409 resolvedSection.AddSymbol(new WixFeatureModulesSymbol
410 { 410 {
411 FeatureRef = feature, 411 FeatureRef = feature,
412 WixMergeRef = connectToFeature.ChildId 412 WixMergeRef = connectToFeature.ChildId
@@ -462,16 +462,16 @@ namespace WixToolset.Core
462 { 462 {
463 //var componentSectionIds = new Dictionary<string, string>(); 463 //var componentSectionIds = new Dictionary<string, string>();
464 464
465 //foreach (var componentTuple in entrySection.Tuples.OfType<ComponentTuple>()) 465 //foreach (var componentSymbol in entrySection.Symbols.OfType<ComponentSymbol>())
466 //{ 466 //{
467 // componentSectionIds.Add(componentTuple.Id.Id, componentTuple.SectionId); 467 // componentSectionIds.Add(componentSymbol.Id.Id, componentSymbol.SectionId);
468 //} 468 //}
469 469
470 //foreach (var featureComponentTuple in entrySection.Tuples.OfType<FeatureComponentsTuple>()) 470 //foreach (var featureComponentSymbol in entrySection.Symbols.OfType<FeatureComponentsSymbol>())
471 //{ 471 //{
472 // if (componentSectionIds.TryGetValue(featureComponentTuple.Component_, out var componentSectionId)) 472 // if (componentSectionIds.TryGetValue(featureComponentSymbol.Component_, out var componentSectionId))
473 // { 473 // {
474 // featureComponentTuple.SectionId = componentSectionId; 474 // featureComponentSymbol.SectionId = componentSectionId;
475 // } 475 // }
476 //} 476 //}
477 } 477 }
@@ -544,9 +544,9 @@ namespace WixToolset.Core
544#endif 544#endif
545 545
546 // copy the wix variable rows to the output after all overriding has been accounted for. 546 // copy the wix variable rows to the output after all overriding has been accounted for.
547 foreach (var tuple in wixVariables.Values) 547 foreach (var symbol in wixVariables.Values)
548 { 548 {
549 resolvedSection.AddTuple(tuple); 549 resolvedSection.AddSymbol(symbol);
550 } 550 }
551 551
552 // Bundles have groups of data that must be flattened in a way different from other types. 552 // Bundles have groups of data that must be flattened in a way different from other types.
@@ -734,17 +734,17 @@ namespace WixToolset.Core
734 /// <summary> 734 /// <summary>
735 /// Load the standard action symbols. 735 /// Load the standard action symbols.
736 /// </summary> 736 /// </summary>
737 /// <param name="tuplesByName">Collection of symbols.</param> 737 /// <param name="symbolsByName">Collection of symbols.</param>
738 private void LoadStandardActions(IntermediateSection section, IDictionary<string, TupleWithSection> tuplesByName) 738 private void LoadStandardActions(IntermediateSection section, IDictionary<string, SymbolWithSection> symbolsByName)
739 { 739 {
740 foreach (var actionTuple in WindowsInstallerStandard.StandardActions()) 740 foreach (var actionSymbol in WindowsInstallerStandard.StandardActions())
741 { 741 {
742 var tupleWithSection = new TupleWithSection(section, actionTuple); 742 var symbolWithSection = new SymbolWithSection(section, actionSymbol);
743 743
744 // If the action's tuple has not already been defined (i.e. overriden by the user), add it now. 744 // If the action's symbol has not already been defined (i.e. overriden by the user), add it now.
745 if (!tuplesByName.ContainsKey(tupleWithSection.Name)) 745 if (!symbolsByName.ContainsKey(symbolWithSection.Name))
746 { 746 {
747 tuplesByName.Add(tupleWithSection.Name, tupleWithSection); 747 symbolsByName.Add(symbolWithSection.Name, symbolWithSection);
748 } 748 }
749 } 749 }
750 } 750 }
@@ -752,7 +752,7 @@ namespace WixToolset.Core
752 /// <summary> 752 /// <summary>
753 /// Process the complex references. 753 /// Process the complex references.
754 /// </summary> 754 /// </summary>
755 /// <param name="resolvedSection">Active section to add tuples to.</param> 755 /// <param name="resolvedSection">Active section to add symbols to.</param>
756 /// <param name="sections">Sections that are referenced during the link process.</param> 756 /// <param name="sections">Sections that are referenced during the link process.</param>
757 /// <param name="referencedComponents">Collection of all components referenced by complex reference.</param> 757 /// <param name="referencedComponents">Collection of all components referenced by complex reference.</param>
758 /// <param name="componentsToFeatures">Component to feature complex references.</param> 758 /// <param name="componentsToFeatures">Component to feature complex references.</param>
@@ -764,8 +764,8 @@ namespace WixToolset.Core
764 764
765 foreach (var section in sections) 765 foreach (var section in sections)
766 { 766 {
767 // Need ToList since we might want to add tuples while processing. 767 // Need ToList since we might want to add symbols while processing.
768 foreach (var wixComplexReferenceRow in section.Tuples.OfType<WixComplexReferenceTuple>().ToList()) 768 foreach (var wixComplexReferenceRow in section.Symbols.OfType<WixComplexReferenceSymbol>().ToList())
769 { 769 {
770 ConnectToFeature connection; 770 ConnectToFeature connection;
771 switch (wixComplexReferenceRow.ParentType) 771 switch (wixComplexReferenceRow.ParentType)
@@ -799,7 +799,7 @@ namespace WixToolset.Core
799 } 799 }
800 800
801 // add a row to the FeatureComponents table 801 // add a row to the FeatureComponents table
802 section.AddTuple(new FeatureComponentsTuple 802 section.AddSymbol(new FeatureComponentsSymbol
803 { 803 {
804 FeatureRef = wixComplexReferenceRow.Parent, 804 FeatureRef = wixComplexReferenceRow.Parent,
805 ComponentRef = wixComplexReferenceRow.Child, 805 ComponentRef = wixComplexReferenceRow.Child,
@@ -867,7 +867,7 @@ namespace WixToolset.Core
867 componentsToModules.Add(wixComplexReferenceRow.Child, wixComplexReferenceRow); // should always be new 867 componentsToModules.Add(wixComplexReferenceRow.Child, wixComplexReferenceRow); // should always be new
868 868
869 // add a row to the ModuleComponents table 869 // add a row to the ModuleComponents table
870 section.AddTuple(new ModuleComponentsTuple 870 section.AddSymbol(new ModuleComponentsSymbol
871 { 871 {
872 Component = wixComplexReferenceRow.Child, 872 Component = wixComplexReferenceRow.Child,
873 ModuleID = wixComplexReferenceRow.Parent, 873 ModuleID = wixComplexReferenceRow.Parent,
@@ -931,7 +931,7 @@ namespace WixToolset.Core
931 /// <param name="sections">Sections that are referenced during the link process.</param> 931 /// <param name="sections">Sections that are referenced during the link process.</param>
932 private void FlattenSectionsComplexReferences(IEnumerable<IntermediateSection> sections) 932 private void FlattenSectionsComplexReferences(IEnumerable<IntermediateSection> sections)
933 { 933 {
934 var parentGroups = new Dictionary<string, List<WixComplexReferenceTuple>>(); 934 var parentGroups = new Dictionary<string, List<WixComplexReferenceSymbol>>();
935 var parentGroupsSections = new Dictionary<string, IntermediateSection>(); 935 var parentGroupsSections = new Dictionary<string, IntermediateSection>();
936 var parentGroupsNeedingProcessing = new Dictionary<string, IntermediateSection>(); 936 var parentGroupsNeedingProcessing = new Dictionary<string, IntermediateSection>();
937 937
@@ -945,12 +945,12 @@ namespace WixToolset.Core
945 foreach (var section in sections) 945 foreach (var section in sections)
946 { 946 {
947 // Count down because we'll sometimes remove items from the list. 947 // Count down because we'll sometimes remove items from the list.
948 for (var i = section.Tuples.Count - 1; i >= 0; --i) 948 for (var i = section.Symbols.Count - 1; i >= 0; --i)
949 { 949 {
950 // Only process the "grouping parents" such as FeatureGroup, ComponentGroup, Feature, 950 // Only process the "grouping parents" such as FeatureGroup, ComponentGroup, Feature,
951 // and Module. Non-grouping complex references are simple and 951 // and Module. Non-grouping complex references are simple and
952 // resolved during normal complex reference resolutions. 952 // resolved during normal complex reference resolutions.
953 if (section.Tuples[i] is WixComplexReferenceTuple wixComplexReferenceRow && 953 if (section.Symbols[i] is WixComplexReferenceSymbol wixComplexReferenceRow &&
954 (ComplexReferenceParentType.FeatureGroup == wixComplexReferenceRow.ParentType || 954 (ComplexReferenceParentType.FeatureGroup == wixComplexReferenceRow.ParentType ||
955 ComplexReferenceParentType.ComponentGroup == wixComplexReferenceRow.ParentType || 955 ComplexReferenceParentType.ComponentGroup == wixComplexReferenceRow.ParentType ||
956 ComplexReferenceParentType.Feature == wixComplexReferenceRow.ParentType || 956 ComplexReferenceParentType.Feature == wixComplexReferenceRow.ParentType ||
@@ -965,12 +965,12 @@ namespace WixToolset.Core
965 // Step 2. 965 // Step 2.
966 if (!parentGroups.TryGetValue(parentTypeAndId, out var childrenComplexRefs)) 966 if (!parentGroups.TryGetValue(parentTypeAndId, out var childrenComplexRefs))
967 { 967 {
968 childrenComplexRefs = new List<WixComplexReferenceTuple>(); 968 childrenComplexRefs = new List<WixComplexReferenceSymbol>();
969 parentGroups.Add(parentTypeAndId, childrenComplexRefs); 969 parentGroups.Add(parentTypeAndId, childrenComplexRefs);
970 } 970 }
971 971
972 childrenComplexRefs.Add(wixComplexReferenceRow); 972 childrenComplexRefs.Add(wixComplexReferenceRow);
973 section.Tuples.RemoveAt(i); 973 section.Symbols.RemoveAt(i);
974 974
975 // Remember the mapping from set of complex references with a common 975 // Remember the mapping from set of complex references with a common
976 // parent to their section. We'll need this to add them back to the 976 // parent to their section. We'll need this to add them back to the
@@ -1034,7 +1034,7 @@ namespace WixToolset.Core
1034 (ComplexReferenceParentType.ComponentGroup != wixComplexReferenceRow.ParentType) && 1034 (ComplexReferenceParentType.ComponentGroup != wixComplexReferenceRow.ParentType) &&
1035 (ComplexReferenceParentType.PatchFamilyGroup != wixComplexReferenceRow.ParentType)) 1035 (ComplexReferenceParentType.PatchFamilyGroup != wixComplexReferenceRow.ParentType))
1036 { 1036 {
1037 section.AddTuple(wixComplexReferenceRow); 1037 section.AddSymbol(wixComplexReferenceRow);
1038 } 1038 }
1039 } 1039 }
1040 } 1040 }
@@ -1059,12 +1059,12 @@ namespace WixToolset.Core
1059 /// <param name="loopDetector">Stack of groups processed thus far. Used to detect loops.</param> 1059 /// <param name="loopDetector">Stack of groups processed thus far. Used to detect loops.</param>
1060 /// <param name="parentGroups">Hash table of complex references grouped by parent id.</param> 1060 /// <param name="parentGroups">Hash table of complex references grouped by parent id.</param>
1061 /// <param name="parentGroupsNeedingProcessing">Hash table of parent groups that still have nested groups that need to be flattened.</param> 1061 /// <param name="parentGroupsNeedingProcessing">Hash table of parent groups that still have nested groups that need to be flattened.</param>
1062 private void FlattenGroup(string parentTypeAndId, Stack<string> loopDetector, Dictionary<string, List<WixComplexReferenceTuple>> parentGroups, Dictionary<string, IntermediateSection> parentGroupsNeedingProcessing) 1062 private void FlattenGroup(string parentTypeAndId, Stack<string> loopDetector, Dictionary<string, List<WixComplexReferenceSymbol>> parentGroups, Dictionary<string, IntermediateSection> parentGroupsNeedingProcessing)
1063 { 1063 {
1064 Debug.Assert(parentGroupsNeedingProcessing.ContainsKey(parentTypeAndId)); 1064 Debug.Assert(parentGroupsNeedingProcessing.ContainsKey(parentTypeAndId));
1065 loopDetector.Push(parentTypeAndId); // push this complex reference parent identfier into the stack for loop verifying 1065 loopDetector.Push(parentTypeAndId); // push this complex reference parent identfier into the stack for loop verifying
1066 1066
1067 var allNewChildComplexReferences = new List<WixComplexReferenceTuple>(); 1067 var allNewChildComplexReferences = new List<WixComplexReferenceSymbol>();
1068 1068
1069 var referencesToParent = parentGroups[parentTypeAndId]; 1069 var referencesToParent = parentGroups[parentTypeAndId];
1070 foreach (var wixComplexReferenceRow in referencesToParent) 1070 foreach (var wixComplexReferenceRow in referencesToParent)
@@ -1158,7 +1158,7 @@ namespace WixToolset.Core
1158 } 1158 }
1159 } 1159 }
1160 1160
1161 int ComplexReferenceComparision(WixComplexReferenceTuple x, WixComplexReferenceTuple y) 1161 int ComplexReferenceComparision(WixComplexReferenceSymbol x, WixComplexReferenceSymbol y)
1162 { 1162 {
1163 var comparison = x.ChildType - y.ChildType; 1163 var comparison = x.ChildType - y.ChildType;
1164 if (0 == comparison) 1164 if (0 == comparison)
@@ -1242,11 +1242,11 @@ namespace WixToolset.Core
1242 /// </summary> 1242 /// </summary>
1243 /// <param name="featuresToFeatures">Feature to feature complex references.</param> 1243 /// <param name="featuresToFeatures">Feature to feature complex references.</param>
1244 /// <param name="allSymbols">All symbols loaded from the sections.</param> 1244 /// <param name="allSymbols">All symbols loaded from the sections.</param>
1245 private void ResolveFeatureToFeatureConnects(ConnectToFeatureCollection featuresToFeatures, IDictionary<string, TupleWithSection> allSymbols) 1245 private void ResolveFeatureToFeatureConnects(ConnectToFeatureCollection featuresToFeatures, IDictionary<string, SymbolWithSection> allSymbols)
1246 { 1246 {
1247 foreach (ConnectToFeature connection in featuresToFeatures) 1247 foreach (ConnectToFeature connection in featuresToFeatures)
1248 { 1248 {
1249 var wixSimpleReferenceRow = new WixSimpleReferenceTuple 1249 var wixSimpleReferenceRow = new WixSimpleReferenceSymbol
1250 { 1250 {
1251 Table = "Feature", 1251 Table = "Feature",
1252 PrimaryKeys = connection.ChildId 1252 PrimaryKeys = connection.ChildId
@@ -1254,8 +1254,8 @@ namespace WixToolset.Core
1254 1254
1255 if (allSymbols.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var symbol)) 1255 if (allSymbols.TryGetValue(wixSimpleReferenceRow.SymbolicName, out var symbol))
1256 { 1256 {
1257 var featureTuple = (FeatureTuple)symbol.Tuple; 1257 var featureSymbol = (FeatureSymbol)symbol.Symbol;
1258 featureTuple.ParentFeatureRef = connection.PrimaryFeature; 1258 featureSymbol.ParentFeatureRef = connection.PrimaryFeature;
1259 } 1259 }
1260 } 1260 }
1261 } 1261 }
@@ -1308,15 +1308,15 @@ namespace WixToolset.Core
1308 /// <summary> 1308 /// <summary>
1309 /// Resolve features for columns that have null guid placeholders. 1309 /// Resolve features for columns that have null guid placeholders.
1310 /// </summary> 1310 /// </summary>
1311 /// <param name="tuple">Tuple to resolve.</param> 1311 /// <param name="symbol">Symbol to resolve.</param>
1312 /// <param name="connectionColumn">Number of the column containing the connection identifier.</param> 1312 /// <param name="connectionColumn">Number of the column containing the connection identifier.</param>
1313 /// <param name="featureColumn">Number of the column containing the feature.</param> 1313 /// <param name="featureColumn">Number of the column containing the feature.</param>
1314 /// <param name="connectToFeatures">Connect to feature complex references.</param> 1314 /// <param name="connectToFeatures">Connect to feature complex references.</param>
1315 /// <param name="multipleFeatureComponents">Hashtable of known components under multiple features.</param> 1315 /// <param name="multipleFeatureComponents">Hashtable of known components under multiple features.</param>
1316 private void ResolveFeatures(IntermediateTuple tuple, int connectionColumn, int featureColumn, ConnectToFeatureCollection connectToFeatures, Hashtable multipleFeatureComponents) 1316 private void ResolveFeatures(IntermediateSymbol symbol, int connectionColumn, int featureColumn, ConnectToFeatureCollection connectToFeatures, Hashtable multipleFeatureComponents)
1317 { 1317 {
1318 var connectionId = connectionColumn < 0 ? tuple.Id.Id : tuple.AsString(connectionColumn); 1318 var connectionId = connectionColumn < 0 ? symbol.Id.Id : symbol.AsString(connectionColumn);
1319 var featureId = tuple.AsString(featureColumn); 1319 var featureId = symbol.AsString(featureColumn);
1320 1320
1321 if (EmptyGuid == featureId) 1321 if (EmptyGuid == featureId)
1322 { 1322 {
@@ -1327,11 +1327,11 @@ namespace WixToolset.Core
1327 // display an error for the component or merge module as appropriate 1327 // display an error for the component or merge module as appropriate
1328 if (null != multipleFeatureComponents) 1328 if (null != multipleFeatureComponents)
1329 { 1329 {
1330 this.Messaging.Write(ErrorMessages.ComponentExpectedFeature(tuple.SourceLineNumbers, connectionId, tuple.Definition.Name, tuple.Id.Id)); 1330 this.Messaging.Write(ErrorMessages.ComponentExpectedFeature(symbol.SourceLineNumbers, connectionId, symbol.Definition.Name, symbol.Id.Id));
1331 } 1331 }
1332 else 1332 else
1333 { 1333 {
1334 this.Messaging.Write(ErrorMessages.MergeModuleExpectedFeature(tuple.SourceLineNumbers, connectionId)); 1334 this.Messaging.Write(ErrorMessages.MergeModuleExpectedFeature(symbol.SourceLineNumbers, connectionId));
1335 } 1335 }
1336 } 1336 }
1337 else 1337 else
@@ -1359,7 +1359,7 @@ namespace WixToolset.Core
1359 } 1359 }
1360 1360
1361 // set the feature 1361 // set the feature
1362 tuple.Set(featureColumn, connection.PrimaryFeature); 1362 symbol.Set(featureColumn, connection.PrimaryFeature);
1363 } 1363 }
1364 } 1364 }
1365 } 1365 }
diff --git a/src/WixToolset.Core/Resolver.cs b/src/WixToolset.Core/Resolver.cs
index 1342444f..4f12ae76 100644
--- a/src/WixToolset.Core/Resolver.cs
+++ b/src/WixToolset.Core/Resolver.cs
@@ -7,7 +7,7 @@ namespace WixToolset.Core
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.Extensibility; 11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Data; 12 using WixToolset.Extensibility.Data;
13 using WixToolset.Extensibility.Services; 13 using WixToolset.Extensibility.Services;
@@ -132,72 +132,72 @@ namespace WixToolset.Core
132 { 132 {
133 foreach (var section in context.IntermediateRepresentation.Sections) 133 foreach (var section in context.IntermediateRepresentation.Sections)
134 { 134 {
135 foreach (var tuple in section.Tuples.OfType<DialogTuple>()) 135 foreach (var symbol in section.Symbols.OfType<DialogSymbol>())
136 { 136 {
137 if (this.VariableResolver.TryGetLocalizedControl(tuple.Id.Id, null, out var localizedControl)) 137 if (this.VariableResolver.TryGetLocalizedControl(symbol.Id.Id, null, out var localizedControl))
138 { 138 {
139 if (CompilerConstants.IntegerNotSet != localizedControl.X) 139 if (CompilerConstants.IntegerNotSet != localizedControl.X)
140 { 140 {
141 tuple.HCentering = localizedControl.X; 141 symbol.HCentering = localizedControl.X;
142 } 142 }
143 143
144 if (CompilerConstants.IntegerNotSet != localizedControl.Y) 144 if (CompilerConstants.IntegerNotSet != localizedControl.Y)
145 { 145 {
146 tuple.VCentering = localizedControl.Y; 146 symbol.VCentering = localizedControl.Y;
147 } 147 }
148 148
149 if (CompilerConstants.IntegerNotSet != localizedControl.Width) 149 if (CompilerConstants.IntegerNotSet != localizedControl.Width)
150 { 150 {
151 tuple.Width = localizedControl.Width; 151 symbol.Width = localizedControl.Width;
152 } 152 }
153 153
154 if (CompilerConstants.IntegerNotSet != localizedControl.Height) 154 if (CompilerConstants.IntegerNotSet != localizedControl.Height)
155 { 155 {
156 tuple.Height = localizedControl.Height; 156 symbol.Height = localizedControl.Height;
157 } 157 }
158 158
159 tuple.RightAligned |= localizedControl.RightAligned; 159 symbol.RightAligned |= localizedControl.RightAligned;
160 tuple.RightToLeft |= localizedControl.RightToLeft; 160 symbol.RightToLeft |= localizedControl.RightToLeft;
161 tuple.LeftScroll |= localizedControl.LeftScroll; 161 symbol.LeftScroll |= localizedControl.LeftScroll;
162 162
163 if (!String.IsNullOrEmpty(localizedControl.Text)) 163 if (!String.IsNullOrEmpty(localizedControl.Text))
164 { 164 {
165 tuple.Title = localizedControl.Text; 165 symbol.Title = localizedControl.Text;
166 } 166 }
167 } 167 }
168 } 168 }
169 169
170 foreach (var tuple in section.Tuples.OfType<ControlTuple>()) 170 foreach (var symbol in section.Symbols.OfType<ControlSymbol>())
171 { 171 {
172 if (this.VariableResolver.TryGetLocalizedControl(tuple.DialogRef, tuple.Control, out var localizedControl)) 172 if (this.VariableResolver.TryGetLocalizedControl(symbol.DialogRef, symbol.Control, out var localizedControl))
173 { 173 {
174 if (CompilerConstants.IntegerNotSet != localizedControl.X) 174 if (CompilerConstants.IntegerNotSet != localizedControl.X)
175 { 175 {
176 tuple.X = localizedControl.X; 176 symbol.X = localizedControl.X;
177 } 177 }
178 178
179 if (CompilerConstants.IntegerNotSet != localizedControl.Y) 179 if (CompilerConstants.IntegerNotSet != localizedControl.Y)
180 { 180 {
181 tuple.Y = localizedControl.Y; 181 symbol.Y = localizedControl.Y;
182 } 182 }
183 183
184 if (CompilerConstants.IntegerNotSet != localizedControl.Width) 184 if (CompilerConstants.IntegerNotSet != localizedControl.Width)
185 { 185 {
186 tuple.Width = localizedControl.Width; 186 symbol.Width = localizedControl.Width;
187 } 187 }
188 188
189 if (CompilerConstants.IntegerNotSet != localizedControl.Height) 189 if (CompilerConstants.IntegerNotSet != localizedControl.Height)
190 { 190 {
191 tuple.Height = localizedControl.Height; 191 symbol.Height = localizedControl.Height;
192 } 192 }
193 193
194 tuple.RightAligned |= localizedControl.RightAligned; 194 symbol.RightAligned |= localizedControl.RightAligned;
195 tuple.RightToLeft |= localizedControl.RightToLeft; 195 symbol.RightToLeft |= localizedControl.RightToLeft;
196 tuple.LeftScroll |= localizedControl.LeftScroll; 196 symbol.LeftScroll |= localizedControl.LeftScroll;
197 197
198 if (!String.IsNullOrEmpty(localizedControl.Text)) 198 if (!String.IsNullOrEmpty(localizedControl.Text))
199 { 199 {
200 tuple.Text = localizedControl.Text; 200 symbol.Text = localizedControl.Text;
201 } 201 }
202 } 202 }
203 } 203 }
@@ -215,10 +215,10 @@ namespace WixToolset.Core
215 } 215 }
216 216
217 // Gather all the wix variables. 217 // Gather all the wix variables.
218 var wixVariableTuples = context.IntermediateRepresentation.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>(); 218 var wixVariableSymbols = context.IntermediateRepresentation.Sections.SelectMany(s => s.Symbols).OfType<WixVariableSymbol>();
219 foreach (var tuple in wixVariableTuples) 219 foreach (var symbol in wixVariableSymbols)
220 { 220 {
221 this.VariableResolver.AddVariable(tuple.SourceLineNumbers, tuple.Id.Id, tuple.Value, tuple.Overridable); 221 this.VariableResolver.AddVariable(symbol.SourceLineNumbers, symbol.Id.Id, symbol.Value, symbol.Overridable);
222 } 222 }
223 223
224 return codepage; 224 return codepage;
@@ -234,7 +234,7 @@ namespace WixToolset.Core
234 AddFilteredLocalizations(result, filter, localizations); 234 AddFilteredLocalizations(result, filter, localizations);
235 235
236 // Filter localizations provided by extensions with data. 236 // Filter localizations provided by extensions with data.
237 var creator = context.ServiceProvider.GetService<ITupleDefinitionCreator>(); 237 var creator = context.ServiceProvider.GetService<ISymbolDefinitionCreator>();
238 238
239 foreach (var data in context.ExtensionData) 239 foreach (var data in context.ExtensionData)
240 { 240 {
diff --git a/src/WixToolset.Core/WixToolsetServiceProvider.cs b/src/WixToolset.Core/WixToolsetServiceProvider.cs
index d7a6171a..646b21fa 100644
--- a/src/WixToolset.Core/WixToolsetServiceProvider.cs
+++ b/src/WixToolset.Core/WixToolsetServiceProvider.cs
@@ -20,7 +20,7 @@ namespace WixToolset.Core
20 // Singletons. 20 // Singletons.
21 this.AddService((provider, singletons) => AddSingleton<IExtensionManager>(singletons, new ExtensionManager(provider))); 21 this.AddService((provider, singletons) => AddSingleton<IExtensionManager>(singletons, new ExtensionManager(provider)));
22 this.AddService((provider, singletons) => AddSingleton<IMessaging>(singletons, new Messaging())); 22 this.AddService((provider, singletons) => AddSingleton<IMessaging>(singletons, new Messaging()));
23 this.AddService((provider, singletons) => AddSingleton<ITupleDefinitionCreator>(singletons, new TupleDefinitionCreator(provider))); 23 this.AddService((provider, singletons) => AddSingleton<ISymbolDefinitionCreator>(singletons, new SymbolDefinitionCreator(provider)));
24 this.AddService((provider, singletons) => AddSingleton<IParseHelper>(singletons, new ParseHelper(provider))); 24 this.AddService((provider, singletons) => AddSingleton<IParseHelper>(singletons, new ParseHelper(provider)));
25 this.AddService((provider, singletons) => AddSingleton<IPreprocessHelper>(singletons, new PreprocessHelper(provider))); 25 this.AddService((provider, singletons) => AddSingleton<IPreprocessHelper>(singletons, new PreprocessHelper(provider)));
26 this.AddService((provider, singletons) => AddSingleton<IBackendHelper>(singletons, new BackendHelper(provider))); 26 this.AddService((provider, singletons) => AddSingleton<IBackendHelper>(singletons, new BackendHelper(provider)));
diff --git a/src/test/Example.Extension/ExampleCompilerExtension.cs b/src/test/Example.Extension/ExampleCompilerExtension.cs
index 0005b1d5..5b8d4b3f 100644
--- a/src/test/Example.Extension/ExampleCompilerExtension.cs
+++ b/src/test/Example.Extension/ExampleCompilerExtension.cs
@@ -92,8 +92,8 @@ namespace Example.Extension
92 92
93 if (!this.Messaging.EncounteredError) 93 if (!this.Messaging.EncounteredError)
94 { 94 {
95 var tuple = this.ParseHelper.CreateTuple(section, sourceLineNumbers, "Example", id); 95 var symbol = this.ParseHelper.CreateSymbol(section, sourceLineNumbers, "Example", id);
96 tuple.Set(0, value); 96 symbol.Set(0, value);
97 } 97 }
98 } 98 }
99 99
@@ -152,12 +152,12 @@ namespace Example.Extension
152 152
153 if (!this.Messaging.EncounteredError) 153 if (!this.Messaging.EncounteredError)
154 { 154 {
155 this.ParseHelper.CreateWixSearchTuple(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, this.BundleExtensionId); 155 this.ParseHelper.CreateWixSearchSymbol(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, this.BundleExtensionId);
156 } 156 }
157 157
158 if (!this.Messaging.EncounteredError) 158 if (!this.Messaging.EncounteredError)
159 { 159 {
160 var tuple = section.AddTuple(new ExampleSearchTuple(sourceLineNumbers, id) 160 var symbol = section.AddSymbol(new ExampleSearchSymbol(sourceLineNumbers, id)
161 { 161 {
162 SearchFor = searchFor, 162 SearchFor = searchFor,
163 }); 163 });
@@ -176,7 +176,7 @@ namespace Example.Extension
176 { 176 {
177 case "Id": 177 case "Id":
178 var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); 178 var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
179 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, ExampleTupleDefinitions.ExampleSearch, refId); 179 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, ExampleSymbolDefinitions.ExampleSearch, refId);
180 break; 180 break;
181 default: 181 default:
182 this.ParseHelper.UnexpectedAttribute(element, attrib); 182 this.ParseHelper.UnexpectedAttribute(element, attrib);
diff --git a/src/test/Example.Extension/ExampleExtensionData.cs b/src/test/Example.Extension/ExampleExtensionData.cs
index 2ba94397..91d60eb9 100644
--- a/src/test/Example.Extension/ExampleExtensionData.cs
+++ b/src/test/Example.Extension/ExampleExtensionData.cs
@@ -9,15 +9,15 @@ namespace Example.Extension
9 { 9 {
10 public string DefaultCulture => null; 10 public string DefaultCulture => null;
11 11
12 public Intermediate GetLibrary(ITupleDefinitionCreator tupleDefinitions) 12 public Intermediate GetLibrary(ISymbolDefinitionCreator symbolDefinitions)
13 { 13 {
14 return Intermediate.Load(typeof(ExampleExtensionData).Assembly, "Example.Extension.Example.wixlib", tupleDefinitions); 14 return Intermediate.Load(typeof(ExampleExtensionData).Assembly, "Example.Extension.Example.wixlib", symbolDefinitions);
15 } 15 }
16 16
17 public bool TryGetTupleDefinitionByName(string name, out IntermediateTupleDefinition tupleDefinition) 17 public bool TryGetSymbolDefinitionByName(string name, out IntermediateSymbolDefinition symbolDefinition)
18 { 18 {
19 tupleDefinition = ExampleTupleDefinitions.ByName(name); 19 symbolDefinition = ExampleSymbolDefinitions.ByName(name);
20 return tupleDefinition != null; 20 return symbolDefinition != null;
21 } 21 }
22 } 22 }
23} \ No newline at end of file 23} \ No newline at end of file
diff --git a/src/test/Example.Extension/ExampleSearchTuple.cs b/src/test/Example.Extension/ExampleSearchTuple.cs
index 353ef158..40a39292 100644
--- a/src/test/Example.Extension/ExampleSearchTuple.cs
+++ b/src/test/Example.Extension/ExampleSearchTuple.cs
@@ -4,27 +4,27 @@ namespace Example.Extension
4{ 4{
5 using WixToolset.Data; 5 using WixToolset.Data;
6 6
7 public enum ExampleSearchTupleFields 7 public enum ExampleSearchSymbolFields
8 { 8 {
9 SearchFor, 9 SearchFor,
10 } 10 }
11 11
12 public class ExampleSearchTuple : IntermediateTuple 12 public class ExampleSearchSymbol : IntermediateSymbol
13 { 13 {
14 public ExampleSearchTuple() : base(ExampleTupleDefinitions.ExampleSearch, null, null) 14 public ExampleSearchSymbol() : base(ExampleSymbolDefinitions.ExampleSearch, null, null)
15 { 15 {
16 } 16 }
17 17
18 public ExampleSearchTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ExampleTupleDefinitions.ExampleSearch, sourceLineNumber, id) 18 public ExampleSearchSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ExampleSymbolDefinitions.ExampleSearch, sourceLineNumber, id)
19 { 19 {
20 } 20 }
21 21
22 public IntermediateField this[ExampleTupleFields index] => this.Fields[(int)index]; 22 public IntermediateField this[ExampleSymbolFields index] => this.Fields[(int)index];
23 23
24 public string SearchFor 24 public string SearchFor
25 { 25 {
26 get => this.Fields[(int)ExampleSearchTupleFields.SearchFor]?.AsString(); 26 get => this.Fields[(int)ExampleSearchSymbolFields.SearchFor]?.AsString();
27 set => this.Set((int)ExampleSearchTupleFields.SearchFor, value); 27 set => this.Set((int)ExampleSearchSymbolFields.SearchFor, value);
28 } 28 }
29 } 29 }
30} 30}
diff --git a/src/test/Example.Extension/ExampleTableDefinitions.cs b/src/test/Example.Extension/ExampleTableDefinitions.cs
index 4901cc09..a2b81698 100644
--- a/src/test/Example.Extension/ExampleTableDefinitions.cs
+++ b/src/test/Example.Extension/ExampleTableDefinitions.cs
@@ -8,14 +8,14 @@ namespace Example.Extension
8 { 8 {
9 public static readonly TableDefinition ExampleTable = new TableDefinition( 9 public static readonly TableDefinition ExampleTable = new TableDefinition(
10 "Wix4Example", 10 "Wix4Example",
11 ExampleTupleDefinitions.Example, 11 ExampleSymbolDefinitions.Example,
12 new[] 12 new[]
13 { 13 {
14 new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier), 14 new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier),
15 new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted), 15 new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted),
16 }, 16 },
17 strongRowType: typeof(ExampleRow), 17 strongRowType: typeof(ExampleRow),
18 tupleIdIsPrimaryKey: true 18 symbolIdIsPrimaryKey: true
19 ); 19 );
20 20
21 public static readonly TableDefinition NotInAll = new TableDefinition( 21 public static readonly TableDefinition NotInAll = new TableDefinition(
@@ -26,7 +26,7 @@ namespace Example.Extension
26 new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier), 26 new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier),
27 new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted), 27 new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted),
28 }, 28 },
29 tupleIdIsPrimaryKey: true 29 symbolIdIsPrimaryKey: true
30 ); 30 );
31 31
32 public static readonly TableDefinition[] All = new[] { ExampleTable }; 32 public static readonly TableDefinition[] All = new[] { ExampleTable };
diff --git a/src/test/Example.Extension/ExampleTuple.cs b/src/test/Example.Extension/ExampleTuple.cs
index f2bcb925..314087e9 100644
--- a/src/test/Example.Extension/ExampleTuple.cs
+++ b/src/test/Example.Extension/ExampleTuple.cs
@@ -4,27 +4,27 @@ namespace Example.Extension
4{ 4{
5 using WixToolset.Data; 5 using WixToolset.Data;
6 6
7 public enum ExampleTupleFields 7 public enum ExampleSymbolFields
8 { 8 {
9 Value, 9 Value,
10 } 10 }
11 11
12 public class ExampleTuple : IntermediateTuple 12 public class ExampleSymbol : IntermediateSymbol
13 { 13 {
14 public ExampleTuple() : base(ExampleTupleDefinitions.Example, null, null) 14 public ExampleSymbol() : base(ExampleSymbolDefinitions.Example, null, null)
15 { 15 {
16 } 16 }
17 17
18 public ExampleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ExampleTupleDefinitions.Example, sourceLineNumber, id) 18 public ExampleSymbol(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ExampleSymbolDefinitions.Example, sourceLineNumber, id)
19 { 19 {
20 } 20 }
21 21
22 public IntermediateField this[ExampleTupleFields index] => this.Fields[(int)index]; 22 public IntermediateField this[ExampleSymbolFields index] => this.Fields[(int)index];
23 23
24 public string Value 24 public string Value
25 { 25 {
26 get => this.Fields[(int)ExampleTupleFields.Value]?.AsString(); 26 get => this.Fields[(int)ExampleSymbolFields.Value]?.AsString();
27 set => this.Set((int)ExampleTupleFields.Value, value); 27 set => this.Set((int)ExampleSymbolFields.Value, value);
28 } 28 }
29 } 29 }
30} 30}
diff --git a/src/test/Example.Extension/ExampleTupleDefinitions.cs b/src/test/Example.Extension/ExampleTupleDefinitions.cs
index 446c2c45..f13d716d 100644
--- a/src/test/Example.Extension/ExampleTupleDefinitions.cs
+++ b/src/test/Example.Extension/ExampleTupleDefinitions.cs
@@ -6,58 +6,58 @@ namespace Example.Extension
6 using WixToolset.Data; 6 using WixToolset.Data;
7 using WixToolset.Data.Burn; 7 using WixToolset.Data.Burn;
8 8
9 public enum ExampleTupleDefinitionType 9 public enum ExampleSymbolDefinitionType
10 { 10 {
11 Example, 11 Example,
12 ExampleSearch, 12 ExampleSearch,
13 } 13 }
14 14
15 public static class ExampleTupleDefinitions 15 public static class ExampleSymbolDefinitions
16 { 16 {
17 public static readonly IntermediateTupleDefinition Example = new IntermediateTupleDefinition( 17 public static readonly IntermediateSymbolDefinition Example = new IntermediateSymbolDefinition(
18 ExampleTupleDefinitionType.Example.ToString(), 18 ExampleSymbolDefinitionType.Example.ToString(),
19 new[] 19 new[]
20 { 20 {
21 new IntermediateFieldDefinition(nameof(ExampleTupleFields.Value), IntermediateFieldType.String), 21 new IntermediateFieldDefinition(nameof(ExampleSymbolFields.Value), IntermediateFieldType.String),
22 }, 22 },
23 typeof(ExampleTuple)); 23 typeof(ExampleSymbol));
24 24
25 public static readonly IntermediateTupleDefinition ExampleSearch = new IntermediateTupleDefinition( 25 public static readonly IntermediateSymbolDefinition ExampleSearch = new IntermediateSymbolDefinition(
26 ExampleTupleDefinitionType.ExampleSearch.ToString(), 26 ExampleSymbolDefinitionType.ExampleSearch.ToString(),
27 new[] 27 new[]
28 { 28 {
29 new IntermediateFieldDefinition(nameof(ExampleSearchTupleFields.SearchFor), IntermediateFieldType.String), 29 new IntermediateFieldDefinition(nameof(ExampleSearchSymbolFields.SearchFor), IntermediateFieldType.String),
30 }, 30 },
31 typeof(ExampleSearchTuple)); 31 typeof(ExampleSearchSymbol));
32 32
33 static ExampleTupleDefinitions() 33 static ExampleSymbolDefinitions()
34 { 34 {
35 ExampleSearch.AddTag(BurnConstants.BundleExtensionSearchTupleDefinitionTag); 35 ExampleSearch.AddTag(BurnConstants.BundleExtensionSearchSymbolDefinitionTag);
36 } 36 }
37 37
38 public static bool TryGetTupleType(string name, out ExampleTupleDefinitionType type) 38 public static bool TryGetSymbolType(string name, out ExampleSymbolDefinitionType type)
39 { 39 {
40 return Enum.TryParse(name, out type); 40 return Enum.TryParse(name, out type);
41 } 41 }
42 42
43 public static IntermediateTupleDefinition ByName(string name) 43 public static IntermediateSymbolDefinition ByName(string name)
44 { 44 {
45 if (!TryGetTupleType(name, out var type)) 45 if (!TryGetSymbolType(name, out var type))
46 { 46 {
47 return null; 47 return null;
48 } 48 }
49 return ByType(type); 49 return ByType(type);
50 } 50 }
51 51
52 public static IntermediateTupleDefinition ByType(ExampleTupleDefinitionType type) 52 public static IntermediateSymbolDefinition ByType(ExampleSymbolDefinitionType type)
53 { 53 {
54 switch (type) 54 switch (type)
55 { 55 {
56 case ExampleTupleDefinitionType.Example: 56 case ExampleSymbolDefinitionType.Example:
57 return ExampleTupleDefinitions.Example; 57 return ExampleSymbolDefinitions.Example;
58 58
59 case ExampleTupleDefinitionType.ExampleSearch: 59 case ExampleSymbolDefinitionType.ExampleSearch:
60 return ExampleTupleDefinitions.ExampleSearch; 60 return ExampleSymbolDefinitions.ExampleSearch;
61 61
62 default: 62 default:
63 throw new ArgumentOutOfRangeException(nameof(type)); 63 throw new ArgumentOutOfRangeException(nameof(type));
diff --git a/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs b/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs
index 4ce4635f..2c108d96 100644
--- a/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs
+++ b/src/test/Example.Extension/ExampleWindowsInstallerBackendExtension.cs
@@ -11,23 +11,23 @@ namespace Example.Extension
11 { 11 {
12 public override IEnumerable<TableDefinition> TableDefinitions => ExampleTableDefinitions.All; 12 public override IEnumerable<TableDefinition> TableDefinitions => ExampleTableDefinitions.All;
13 13
14 public override bool TryAddTupleToOutput(IntermediateSection section, IntermediateTuple tuple, WindowsInstallerData output, TableDefinitionCollection tableDefinitions) 14 public override bool TryAddSymbolToOutput(IntermediateSection section, IntermediateSymbol symbol, WindowsInstallerData output, TableDefinitionCollection tableDefinitions)
15 { 15 {
16 if (ExampleTupleDefinitions.TryGetTupleType(tuple.Definition.Name, out var tupleType)) 16 if (ExampleSymbolDefinitions.TryGetSymbolType(symbol.Definition.Name, out var symbolType))
17 { 17 {
18 switch (tupleType) 18 switch (symbolType)
19 { 19 {
20 case ExampleTupleDefinitionType.Example: 20 case ExampleSymbolDefinitionType.Example:
21 { 21 {
22 var row = (ExampleRow)this.BackendHelper.CreateRow(section, tuple, output, ExampleTableDefinitions.ExampleTable); 22 var row = (ExampleRow)this.BackendHelper.CreateRow(section, symbol, output, ExampleTableDefinitions.ExampleTable);
23 row.Example = tuple.Id.Id; 23 row.Example = symbol.Id.Id;
24 row.Value = tuple[0].AsString(); 24 row.Value = symbol[0].AsString();
25 } 25 }
26 return true; 26 return true;
27 } 27 }
28 } 28 }
29 29
30 return base.TryAddTupleToOutput(section, tuple, output, tableDefinitions); 30 return base.TryAddSymbolToOutput(section, symbol, output, tableDefinitions);
31 } 31 }
32 } 32 }
33} 33}
diff --git a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
index b86e67ff..cf57eae1 100644
--- a/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
@@ -12,7 +12,7 @@ namespace WixToolsetTest.CoreIntegration
12 using WixToolset.Core.TestPackage; 12 using WixToolset.Core.TestPackage;
13 using WixToolset.Data; 13 using WixToolset.Data;
14 using WixToolset.Data.Burn; 14 using WixToolset.Data.Burn;
15 using WixToolset.Data.Tuples; 15 using WixToolset.Data.Symbols;
16 using Xunit; 16 using Xunit;
17 17
18 public class BundleFixture 18 public class BundleFixture
@@ -81,14 +81,14 @@ namespace WixToolsetTest.CoreIntegration
81 var intermediate = Intermediate.Load(wixOutput); 81 var intermediate = Intermediate.Load(wixOutput);
82 var section = intermediate.Sections.Single(); 82 var section = intermediate.Sections.Single();
83 83
84 var bundleTuple = section.Tuples.OfType<WixBundleTuple>().Single(); 84 var bundleSymbol = section.Symbols.OfType<WixBundleSymbol>().Single();
85 Assert.Equal("1.0.0.0", bundleTuple.Version); 85 Assert.Equal("1.0.0.0", bundleSymbol.Version);
86 86
87 var previousVersion = bundleTuple.Fields[(int)WixBundleTupleFields.Version].PreviousValue; 87 var previousVersion = bundleSymbol.Fields[(int)WixBundleSymbolFields.Version].PreviousValue;
88 Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString()); 88 Assert.Equal("!(bind.packageVersion.test.msi)", previousVersion.AsString());
89 89
90 var msiTuple = section.Tuples.OfType<WixBundlePackageTuple>().Single(); 90 var msiSymbol = section.Symbols.OfType<WixBundlePackageSymbol>().Single();
91 Assert.Equal("test.msi", msiTuple.Id.Id); 91 Assert.Equal("test.msi", msiSymbol.Id.Id);
92 92
93 var extractResult = BundleExtractor.ExtractBAContainer(null, exePath, baFolderPath, extractFolderPath); 93 var extractResult = BundleExtractor.ExtractBAContainer(null, exePath, baFolderPath, extractFolderPath);
94 extractResult.AssertSuccess(); 94 extractResult.AssertSuccess();
@@ -111,7 +111,7 @@ namespace WixToolsetTest.CoreIntegration
111 111
112 var registrationElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration"); 112 var registrationElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Registration");
113 var registrationElement = (XmlNode)Assert.Single(registrationElements); 113 var registrationElement = (XmlNode)Assert.Single(registrationElements);
114 Assert.Equal($"<Registration Id='{bundleTuple.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleTuple.BundleId}'>" + 114 Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" +
115 "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" + 115 "<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" +
116 "</Registration>", registrationElement.GetTestXml()); 116 "</Registration>", registrationElement.GetTestXml());
117 } 117 }
diff --git a/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
index bad7f3ef..ff0c3258 100644
--- a/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
@@ -9,7 +9,7 @@ namespace WixToolsetTest.CoreIntegration
9 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
10 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using Xunit; 13 using Xunit;
14 14
15 public class ExtensionFixture 15 public class ExtensionFixture
@@ -58,11 +58,11 @@ namespace WixToolsetTest.CoreIntegration
58 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\extest.wixpdb")); 58 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\extest.wixpdb"));
59 var section = intermediate.Sections.Single(); 59 var section = intermediate.Sections.Single();
60 60
61 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 61 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
62 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 62 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
63 Assert.Equal(@"example.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 63 Assert.Equal(@"example.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
64 64
65 var example = section.Tuples.Where(t => t.Definition.Type == TupleDefinitionType.MustBeFromAnExtension).Single(); 65 var example = section.Symbols.Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension).Single();
66 Assert.Equal("Foo", example.Id?.Id); 66 Assert.Equal("Foo", example.Id?.Id);
67 Assert.Equal("Bar", example[0].AsString()); 67 Assert.Equal("Bar", example[0].AsString());
68 } 68 }
@@ -96,7 +96,7 @@ namespace WixToolsetTest.CoreIntegration
96 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\extest.wixpdb")); 96 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\extest.wixpdb"));
97 var section = intermediate.Sections.Single(); 97 var section = intermediate.Sections.Single();
98 98
99 var property = section.Tuples.OfType<PropertyTuple>().Where(p => p.Id.Id == "ExampleProperty").Single(); 99 var property = section.Symbols.OfType<PropertySymbol>().Where(p => p.Id.Id == "ExampleProperty").Single();
100 Assert.Equal("ExampleProperty", property.Id.Id); 100 Assert.Equal("ExampleProperty", property.Id.Id);
101 Assert.Equal("test", property.Value); 101 Assert.Equal("test", property.Value);
102 } 102 }
@@ -111,7 +111,7 @@ namespace WixToolsetTest.CoreIntegration
111 { 111 {
112 var intermediateFolder = fs.GetFolder(); 112 var intermediateFolder = fs.GetFolder();
113 113
114 var exception = Assert.Throws<WixException>(() => 114 var exception = Assert.Throws<WixException>(() =>
115 WixRunner.Execute(new[] 115 WixRunner.Execute(new[]
116 { 116 {
117 "build", 117 "build",
diff --git a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs
index 97e6bde9..5e08ca58 100644
--- a/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/LinkerFixture.cs
@@ -9,7 +9,7 @@ namespace WixToolsetTest.CoreIntegration
9 using WixToolset.Core; 9 using WixToolset.Core;
10 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
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 using Xunit; 15 using Xunit;
@@ -27,12 +27,12 @@ namespace WixToolsetTest.CoreIntegration
27 var messaging = serviceProvider.GetService<IMessaging>(); 27 var messaging = serviceProvider.GetService<IMessaging>();
28 messaging.SetListener(listener); 28 messaging.SetListener(listener);
29 29
30 var creator = serviceProvider.GetService<ITupleDefinitionCreator>(); 30 var creator = serviceProvider.GetService<ISymbolDefinitionCreator>();
31 var context = serviceProvider.GetService<ILinkContext>(); 31 var context = serviceProvider.GetService<ILinkContext>();
32 context.Extensions = Enumerable.Empty<WixToolset.Extensibility.ILinkerExtension>(); 32 context.Extensions = Enumerable.Empty<WixToolset.Extensibility.ILinkerExtension>();
33 context.ExtensionData = Enumerable.Empty<WixToolset.Extensibility.IExtensionData>(); 33 context.ExtensionData = Enumerable.Empty<WixToolset.Extensibility.IExtensionData>();
34 context.Intermediates = new[] { intermediate1, intermediate2 }; 34 context.Intermediates = new[] { intermediate1, intermediate2 };
35 context.TupleDefinitionCreator = creator; 35 context.SymbolDefinitionCreator = creator;
36 36
37 var linker = serviceProvider.GetService<ILinker>(); 37 var linker = serviceProvider.GetService<ILinker>();
38 linker.Link(context); 38 linker.Link(context);
@@ -72,10 +72,10 @@ namespace WixToolsetTest.CoreIntegration
72 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 72 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
73 var section = intermediate.Sections.Single(); 73 var section = intermediate.Sections.Single();
74 74
75 var actions = section.Tuples.OfType<WixActionTuple>().Where(wat => wat.Action.StartsWith("Set")).ToList(); 75 var actions = section.Symbols.OfType<WixActionSymbol>().Where(wat => wat.Action.StartsWith("Set")).ToList();
76 Assert.Equal(2, actions.Count); 76 Assert.Equal(2, actions.Count);
77 //Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileTupleFields.Source].AsPath().Path); 77 //Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[WixFileSymbolFields.Source].AsPath().Path);
78 //Assert.Equal(@"test.txt", wixFile[WixFileTupleFields.Source].PreviousValue.AsPath().Path); 78 //Assert.Equal(@"test.txt", wixFile[WixFileSymbolFields.Source].PreviousValue.AsPath().Path);
79 } 79 }
80 } 80 }
81 } 81 }
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
index fbfebc5b..740d58c7 100644
--- a/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/MsiFixture.cs
@@ -9,7 +9,7 @@ namespace WixToolsetTest.CoreIntegration
9 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
10 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
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 Xunit; 14 using Xunit;
15 15
@@ -51,9 +51,9 @@ namespace WixToolsetTest.CoreIntegration
51 51
52 var section = intermediate.Sections.Single(); 52 var section = intermediate.Sections.Single();
53 53
54 var fileTuple = section.Tuples.OfType<FileTuple>().First(); 54 var fileSymbol = section.Symbols.OfType<FileSymbol>().First();
55 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 55 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
56 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 56 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
57 } 57 }
58 } 58 }
59 59
@@ -86,9 +86,9 @@ namespace WixToolsetTest.CoreIntegration
86 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 86 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
87 var section = intermediate.Sections.Single(); 87 var section = intermediate.Sections.Single();
88 88
89 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 89 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
90 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 90 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
91 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 91 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
92 } 92 }
93 } 93 }
94 94
@@ -244,14 +244,14 @@ namespace WixToolsetTest.CoreIntegration
244 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 244 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
245 var section = intermediate.Sections.Single(); 245 var section = intermediate.Sections.Single();
246 246
247 var errors = section.Tuples.OfType<ErrorTuple>().ToDictionary(t => t.Id.Id); 247 var errors = section.Symbols.OfType<ErrorSymbol>().ToDictionary(t => t.Id.Id);
248 Assert.Equal("Category 55 Emergency Doomsday Crisis", errors["1234"].Message.Trim()); 248 Assert.Equal("Category 55 Emergency Doomsday Crisis", errors["1234"].Message.Trim());
249 Assert.Equal(" ", errors["5678"].Message); 249 Assert.Equal(" ", errors["5678"].Message);
250 250
251 var customAction1 = section.Tuples.OfType<CustomActionTuple>().Where(t => t.Id.Id == "CanWeReferenceAnError_YesWeCan").Single(); 251 var customAction1 = section.Symbols.OfType<CustomActionSymbol>().Where(t => t.Id.Id == "CanWeReferenceAnError_YesWeCan").Single();
252 Assert.Equal("1234", customAction1.Target); 252 Assert.Equal("1234", customAction1.Target);
253 253
254 var customAction2 = section.Tuples.OfType<CustomActionTuple>().Where(t => t.Id.Id == "TextErrorsWorkOKToo").Single(); 254 var customAction2 = section.Symbols.OfType<CustomActionSymbol>().Where(t => t.Id.Id == "TextErrorsWorkOKToo").Single();
255 Assert.Equal("If you see this, something went wrong.", customAction2.Target); 255 Assert.Equal("If you see this, something went wrong.", customAction2.Target);
256 } 256 }
257 } 257 }
@@ -353,10 +353,10 @@ namespace WixToolsetTest.CoreIntegration
353 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 353 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
354 var section = intermediate.Sections.Single(); 354 var section = intermediate.Sections.Single();
355 355
356 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 356 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
357 Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileTuple.Id.Id); 357 Assert.Equal("filyIq8rqcxxf903Hsn5K9L0SWV73g", fileSymbol.Id.Id);
358 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 358 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
359 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 359 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
360 360
361 var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 361 var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
362 var fileRows = data.Tables["File"].Rows; 362 var fileRows = data.Tables["File"].Rows;
@@ -405,15 +405,15 @@ namespace WixToolsetTest.CoreIntegration
405 var intermediate = Intermediate.Load(pdbPath); 405 var intermediate = Intermediate.Load(pdbPath);
406 var section = intermediate.Sections.Single(); 406 var section = intermediate.Sections.Single();
407 407
408 var upgradeTuple = section.Tuples.OfType<UpgradeTuple>().Single(); 408 var upgradeSymbol = section.Symbols.OfType<UpgradeSymbol>().Single();
409 Assert.False(upgradeTuple.ExcludeLanguages); 409 Assert.False(upgradeSymbol.ExcludeLanguages);
410 Assert.True(upgradeTuple.IgnoreRemoveFailures); 410 Assert.True(upgradeSymbol.IgnoreRemoveFailures);
411 Assert.False(upgradeTuple.VersionMaxInclusive); 411 Assert.False(upgradeSymbol.VersionMaxInclusive);
412 Assert.True(upgradeTuple.VersionMinInclusive); 412 Assert.True(upgradeSymbol.VersionMinInclusive);
413 Assert.Equal("13.0.0", upgradeTuple.VersionMax); 413 Assert.Equal("13.0.0", upgradeSymbol.VersionMax);
414 Assert.Equal("12.0.0", upgradeTuple.VersionMin); 414 Assert.Equal("12.0.0", upgradeSymbol.VersionMin);
415 Assert.False(upgradeTuple.OnlyDetect); 415 Assert.False(upgradeSymbol.OnlyDetect);
416 Assert.Equal("BLAHBLAHBLAH", upgradeTuple.ActionProperty); 416 Assert.Equal("BLAHBLAHBLAH", upgradeSymbol.ActionProperty);
417 417
418 var pdb = WindowsInstallerData.Load(pdbPath, suppressVersionCheck: false); 418 var pdb = WindowsInstallerData.Load(pdbPath, suppressVersionCheck: false);
419 var secureProperties = pdb.Tables["Property"].Rows.Where(row => row.GetKey() == "SecureCustomProperties").Single(); 419 var secureProperties = pdb.Tables["Property"].Rows.Where(row => row.GetKey() == "SecureCustomProperties").Single();
@@ -581,9 +581,9 @@ namespace WixToolsetTest.CoreIntegration
581 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 581 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
582 var section = intermediate.Sections.Single(); 582 var section = intermediate.Sections.Single();
583 583
584 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 584 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
585 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 585 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
586 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 586 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
587 } 587 }
588 } 588 }
589 589
@@ -617,11 +617,11 @@ namespace WixToolsetTest.CoreIntegration
617 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 617 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
618 var section = intermediate.Sections.Single(); 618 var section = intermediate.Sections.Single();
619 619
620 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 620 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
621 Assert.Equal(Path.Combine(folder, @"data\candle.exe"), fileTuple[FileTupleFields.Source].AsPath().Path); 621 Assert.Equal(Path.Combine(folder, @"data\candle.exe"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
622 Assert.Equal(@"candle.exe", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 622 Assert.Equal(@"candle.exe", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
623 623
624 var msiAssemblyNameTuples = section.Tuples.OfType<MsiAssemblyNameTuple>(); 624 var msiAssemblyNameSymbols = section.Symbols.OfType<MsiAssemblyNameSymbol>();
625 Assert.Equal(new[] 625 Assert.Equal(new[]
626 { 626 {
627 "culture", 627 "culture",
@@ -630,7 +630,7 @@ namespace WixToolsetTest.CoreIntegration
630 "processorArchitecture", 630 "processorArchitecture",
631 "publicKeyToken", 631 "publicKeyToken",
632 "version" 632 "version"
633 }, msiAssemblyNameTuples.OrderBy(a => a.Name).Select(a => a.Name).ToArray()); 633 }, msiAssemblyNameSymbols.OrderBy(a => a.Name).Select(a => a.Name).ToArray());
634 634
635 Assert.Equal(new[] 635 Assert.Equal(new[]
636 { 636 {
@@ -640,7 +640,7 @@ namespace WixToolsetTest.CoreIntegration
640 "x86", 640 "x86",
641 "256B3414DFA97718", 641 "256B3414DFA97718",
642 "3.0.0.0" 642 "3.0.0.0"
643 }, msiAssemblyNameTuples.OrderBy(a => a.Name).Select(a => a.Value).ToArray()); 643 }, msiAssemblyNameSymbols.OrderBy(a => a.Name).Select(a => a.Value).ToArray());
644 } 644 }
645 } 645 }
646 646
@@ -671,7 +671,7 @@ namespace WixToolsetTest.CoreIntegration
671 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 671 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
672 var section = intermediate.Sections.Single(); 672 var section = intermediate.Sections.Single();
673 673
674 var platformSummary = section.Tuples.OfType<SummaryInformationTuple>().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage); 674 var platformSummary = section.Symbols.OfType<SummaryInformationSymbol>().Single(s => s.PropertyId == SummaryInformationType.PlatformAndLanguage);
675 Assert.Equal("x64;1033", platformSummary.Value); 675 Assert.Equal("x64;1033", platformSummary.Value);
676 } 676 }
677 } 677 }
@@ -704,12 +704,12 @@ namespace WixToolsetTest.CoreIntegration
704 var section = intermediate.Sections.Single(); 704 var section = intermediate.Sections.Single();
705 705
706 // Only one component is shared. 706 // Only one component is shared.
707 var sharedComponentTuples = section.Tuples.OfType<ComponentTuple>(); 707 var sharedComponentSymbols = section.Symbols.OfType<ComponentSymbol>();
708 Assert.Equal(1, sharedComponentTuples.Sum(t => t.Shared ? 1 : 0)); 708 Assert.Equal(1, sharedComponentSymbols.Sum(t => t.Shared ? 1 : 0));
709 709
710 // And it is this one. 710 // And it is this one.
711 var sharedComponentTuple = sharedComponentTuples.Single(t => t.Id.Id == "Shared.dll"); 711 var sharedComponentSymbol = sharedComponentSymbols.Single(t => t.Id.Id == "Shared.dll");
712 Assert.True(sharedComponentTuple.Shared); 712 Assert.True(sharedComponentSymbol.Shared);
713 } 713 }
714 } 714 }
715 715
@@ -775,7 +775,7 @@ namespace WixToolsetTest.CoreIntegration
775 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb")); 775 var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
776 var section = intermediate.Sections.Single(); 776 var section = intermediate.Sections.Single();
777 777
778 var progids = section.Tuples.OfType<ProgIdTuple>().OrderBy(tuple => tuple.ProgId).ToList(); 778 var progids = section.Symbols.OfType<ProgIdSymbol>().OrderBy(symbol => symbol.ProgId).ToList();
779 Assert.Equal(new[] 779 Assert.Equal(new[]
780 { 780 {
781 "Foo.File.hol", 781 "Foo.File.hol",
diff --git a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs
index c78b0c29..078a33d5 100644
--- a/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/MsiQueryFixture.cs
@@ -9,7 +9,7 @@ namespace WixToolsetTest.CoreIntegration
9 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
10 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
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 Xunit; 14 using Xunit;
15 15
@@ -1074,7 +1074,7 @@ namespace WixToolsetTest.CoreIntegration
1074 1074
1075 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 1075 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
1076 var section = intermediate.Sections.Single(); 1076 var section = intermediate.Sections.Single();
1077 Assert.Empty(section.Tuples.OfType<FileTuple>()); 1077 Assert.Empty(section.Symbols.OfType<FileSymbol>());
1078 1078
1079 var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 1079 var data = WindowsInstallerData.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
1080 Assert.Null(data.Tables["File"]); 1080 Assert.Null(data.Tables["File"]);
diff --git a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs
index afb93041..83f74a47 100644
--- a/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/ParseFixture.cs
@@ -5,7 +5,7 @@ namespace WixToolsetTest.CoreIntegration
5 using System.Linq; 5 using System.Linq;
6 using WixToolset.Core; 6 using WixToolset.Core;
7 using WixToolset.Data; 7 using WixToolset.Data;
8 using WixToolset.Data.Tuples; 8 using WixToolset.Data.Symbols;
9 using WixToolset.Extensibility.Data; 9 using WixToolset.Extensibility.Data;
10 using WixToolset.Extensibility.Services; 10 using WixToolset.Extensibility.Services;
11 using Xunit; 11 using Xunit;
@@ -25,7 +25,7 @@ namespace WixToolsetTest.CoreIntegration
25 parseHelper.CreateCustomActionReference(null, section, "CustomAction", Platform.X64, CustomActionPlatforms.X86 | CustomActionPlatforms.ARM); 25 parseHelper.CreateCustomActionReference(null, section, "CustomAction", Platform.X64, CustomActionPlatforms.X86 | CustomActionPlatforms.ARM);
26 parseHelper.CreateCustomActionReference(null, section, "CustomAction", Platform.X64, CustomActionPlatforms.X86 | CustomActionPlatforms.X64); 26 parseHelper.CreateCustomActionReference(null, section, "CustomAction", Platform.X64, CustomActionPlatforms.X86 | CustomActionPlatforms.X64);
27 27
28 var simpleReferences = section.Tuples.OfType<WixSimpleReferenceTuple>(); 28 var simpleReferences = section.Symbols.OfType<WixSimpleReferenceSymbol>();
29 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomAction32_X86").FirstOrDefault()); 29 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomAction32_X86").FirstOrDefault());
30 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomArmAction_X86").FirstOrDefault()); 30 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomArmAction_X86").FirstOrDefault());
31 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomArmAction_A64").FirstOrDefault()); 31 Assert.NotNull(simpleReferences.Where(t => t.SymbolicName == "CustomAction:Wix4CustomArmAction_A64").FirstOrDefault());
diff --git a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs
index 25067830..942f253f 100644
--- a/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/WixiplFixture.cs
@@ -8,7 +8,7 @@ namespace WixToolsetTest.CoreIntegration
8 using WixBuildTools.TestSupport; 8 using WixBuildTools.TestSupport;
9 using WixToolset.Core.TestPackage; 9 using WixToolset.Core.TestPackage;
10 using WixToolset.Data; 10 using WixToolset.Data;
11 using WixToolset.Data.Tuples; 11 using WixToolset.Data.Symbols;
12 using Example.Extension; 12 using Example.Extension;
13 using Xunit; 13 using Xunit;
14 14
@@ -62,9 +62,9 @@ namespace WixToolsetTest.CoreIntegration
62 62
63 var section = intermediate.Sections.Single(); 63 var section = intermediate.Sections.Single();
64 64
65 var fileTuple = section.Tuples.OfType<FileTuple>().First(); 65 var fileSymbol = section.Symbols.OfType<FileSymbol>().First();
66 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 66 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
67 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 67 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
68 } 68 }
69 } 69 }
70 70
@@ -132,14 +132,14 @@ namespace WixToolsetTest.CoreIntegration
132 var section = intermediate.Sections.Single(); 132 var section = intermediate.Sections.Single();
133 133
134 { 134 {
135 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 135 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
136 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 136 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
137 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 137 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
138 } 138 }
139 139
140 { 140 {
141 var binary = section.Tuples.OfType<BinaryTuple>().Single(); 141 var binary = section.Symbols.OfType<BinarySymbol>().Single();
142 var path = binary[BinaryTupleFields.Data].AsPath().Path; 142 var path = binary[BinarySymbolFields.Data].AsPath().Path;
143 Assert.StartsWith(Path.Combine(baseFolder, @"obj\Example.Extension"), path); 143 Assert.StartsWith(Path.Combine(baseFolder, @"obj\Example.Extension"), path);
144 Assert.EndsWith(@"wix-ir\example.txt", path); 144 Assert.EndsWith(@"wix-ir\example.txt", path);
145 Assert.Equal(@"BinFromWir", binary.Id.Id); 145 Assert.Equal(@"BinFromWir", binary.Id.Id);
@@ -187,14 +187,14 @@ namespace WixToolsetTest.CoreIntegration
187 var section = intermediate.Sections.Single(); 187 var section = intermediate.Sections.Single();
188 188
189 { 189 {
190 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 190 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
191 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 191 Assert.Equal(Path.Combine(folder, @"data\test.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
192 Assert.Equal(@"test.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 192 Assert.Equal(@"test.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
193 } 193 }
194 194
195 { 195 {
196 var binary = section.Tuples.OfType<BinaryTuple>().Single(); 196 var binary = section.Symbols.OfType<BinarySymbol>().Single();
197 var path = binary[BinaryTupleFields.Data].AsPath().Path; 197 var path = binary[BinarySymbolFields.Data].AsPath().Path;
198 Assert.StartsWith(Path.Combine(baseFolder, @"obj\test"), path); 198 Assert.StartsWith(Path.Combine(baseFolder, @"obj\test"), path);
199 Assert.EndsWith(@"wix-ir\example.txt", path); 199 Assert.EndsWith(@"wix-ir\example.txt", path);
200 Assert.Equal(@"BinFromWir", binary.Id.Id); 200 Assert.Equal(@"BinFromWir", binary.Id.Id);
diff --git a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs
index 63771248..6ae2c0b8 100644
--- a/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/WixlibFixture.cs
@@ -9,7 +9,7 @@ namespace WixToolsetTest.CoreIntegration
9 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
10 using WixToolset.Core.TestPackage; 10 using WixToolset.Core.TestPackage;
11 using WixToolset.Data; 11 using WixToolset.Data;
12 using WixToolset.Data.Tuples; 12 using WixToolset.Data.Symbols;
13 using Xunit; 13 using Xunit;
14 14
15 public class WixlibFixture 15 public class WixlibFixture
@@ -80,11 +80,11 @@ namespace WixToolsetTest.CoreIntegration
80 result.AssertSuccess(); 80 result.AssertSuccess();
81 81
82 var wixlib = Intermediate.Load(wixlibPath); 82 var wixlib = Intermediate.Load(wixlibPath);
83 var binaryTuples = wixlib.Sections.SelectMany(s => s.Tuples).OfType<BinaryTuple>().ToList(); 83 var binarySymbols = wixlib.Sections.SelectMany(s => s.Symbols).OfType<BinarySymbol>().ToList();
84 Assert.Equal(3, binaryTuples.Count); 84 Assert.Equal(3, binarySymbols.Count);
85 Assert.Single(binaryTuples.Where(t => t.Data.Path == "wix-ir/foo.dll")); 85 Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll"));
86 Assert.Single(binaryTuples.Where(t => t.Data.Path == "wix-ir/foo.dll-1")); 86 Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll-1"));
87 Assert.Single(binaryTuples.Where(t => t.Data.Path == "wix-ir/foo.dll-2")); 87 Assert.Single(binarySymbols.Where(t => t.Data.Path == "wix-ir/foo.dll-2"));
88 } 88 }
89 } 89 }
90 90
@@ -138,9 +138,9 @@ namespace WixToolsetTest.CoreIntegration
138 138
139 var section = intermediate.Sections.Single(); 139 var section = intermediate.Sections.Single();
140 140
141 var wixFile = section.Tuples.OfType<FileTuple>().First(); 141 var wixFile = section.Symbols.OfType<FileSymbol>().First();
142 Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[FileTupleFields.Source].AsPath().Path); 142 Assert.Equal(Path.Combine(folder, @"data\test.txt"), wixFile[FileSymbolFields.Source].AsPath().Path);
143 Assert.Equal(@"test.txt", wixFile[FileTupleFields.Source].PreviousValue.AsPath().Path); 143 Assert.Equal(@"test.txt", wixFile[FileSymbolFields.Source].PreviousValue.AsPath().Path);
144 } 144 }
145 } 145 }
146 146
@@ -183,11 +183,11 @@ namespace WixToolsetTest.CoreIntegration
183 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 183 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
184 var section = intermediate.Sections.Single(); 184 var section = intermediate.Sections.Single();
185 185
186 var fileTuple = section.Tuples.OfType<FileTuple>().Single(); 186 var fileSymbol = section.Symbols.OfType<FileSymbol>().Single();
187 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileTuple[FileTupleFields.Source].AsPath().Path); 187 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileSymbol[FileSymbolFields.Source].AsPath().Path);
188 Assert.Equal(@"example.txt", fileTuple[FileTupleFields.Source].PreviousValue.AsPath().Path); 188 Assert.Equal(@"example.txt", fileSymbol[FileSymbolFields.Source].PreviousValue.AsPath().Path);
189 189
190 var example = section.Tuples.Where(t => t.Definition.Type == TupleDefinitionType.MustBeFromAnExtension).Single(); 190 var example = section.Symbols.Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension).Single();
191 Assert.Equal("Foo", example.Id?.Id); 191 Assert.Equal("Foo", example.Id?.Id);
192 Assert.Equal("Bar", example[0].AsString()); 192 Assert.Equal("Bar", example[0].AsString());
193 } 193 }
@@ -244,13 +244,13 @@ namespace WixToolsetTest.CoreIntegration
244 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb")); 244 var intermediate = Intermediate.Load(Path.Combine(intermediateFolder, @"bin\test.wixpdb"));
245 var section = intermediate.Sections.Single(); 245 var section = intermediate.Sections.Single();
246 246
247 var fileTuples = section.Tuples.OfType<FileTuple>().OrderBy(t => Path.GetFileName(t.Source.Path)).ToArray(); 247 var fileSymbols = section.Symbols.OfType<FileSymbol>().OrderBy(t => Path.GetFileName(t.Source.Path)).ToArray();
248 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileTuples[0][FileTupleFields.Source].AsPath().Path); 248 Assert.Equal(Path.Combine(folder, @"data\example.txt"), fileSymbols[0][FileSymbolFields.Source].AsPath().Path);
249 Assert.Equal(@"example.txt", fileTuples[0][FileTupleFields.Source].PreviousValue.AsPath().Path); 249 Assert.Equal(@"example.txt", fileSymbols[0][FileSymbolFields.Source].PreviousValue.AsPath().Path);
250 Assert.Equal(Path.Combine(folder, @"data\other.txt"), fileTuples[1][FileTupleFields.Source].AsPath().Path); 250 Assert.Equal(Path.Combine(folder, @"data\other.txt"), fileSymbols[1][FileSymbolFields.Source].AsPath().Path);
251 Assert.Equal(@"other.txt", fileTuples[1][FileTupleFields.Source].PreviousValue.AsPath().Path); 251 Assert.Equal(@"other.txt", fileSymbols[1][FileSymbolFields.Source].PreviousValue.AsPath().Path);
252 252
253 var examples = section.Tuples.Where(t => t.Definition.Type == TupleDefinitionType.MustBeFromAnExtension).ToArray(); 253 var examples = section.Symbols.Where(t => t.Definition.Type == SymbolDefinitionType.MustBeFromAnExtension).ToArray();
254 Assert.Equal(new string[] { "Foo", "Other" }, examples.Select(t => t.Id?.Id).ToArray()); 254 Assert.Equal(new string[] { "Foo", "Other" }, examples.Select(t => t.Id?.Id).ToArray());
255 Assert.Equal(new[] { "Bar", "Value" }, examples.Select(t => t[0].AsString()).ToArray()); 255 Assert.Equal(new[] { "Bar", "Value" }, examples.Select(t => t[0].AsString()).ToArray());
256 } 256 }
diff --git a/src/test/WixToolsetTest.CoreIntegration/WixlibQueryFixture.cs b/src/test/WixToolsetTest.CoreIntegration/WixlibQueryFixture.cs
index 7f9b9686..57351b27 100644
--- a/src/test/WixToolsetTest.CoreIntegration/WixlibQueryFixture.cs
+++ b/src/test/WixToolsetTest.CoreIntegration/WixlibQueryFixture.cs
@@ -7,7 +7,7 @@ namespace WixToolsetTest.CoreIntegration
7 using WixBuildTools.TestSupport; 7 using WixBuildTools.TestSupport;
8 using WixToolset.Core.TestPackage; 8 using WixToolset.Core.TestPackage;
9 using WixToolset.Data; 9 using WixToolset.Data;
10 using WixToolset.Data.Tuples; 10 using WixToolset.Data.Symbols;
11 using Xunit; 11 using Xunit;
12 12
13 public class WixlibQueryFixture 13 public class WixlibQueryFixture
@@ -34,9 +34,9 @@ namespace WixToolsetTest.CoreIntegration
34 result.AssertSuccess(); 34 result.AssertSuccess();
35 35
36 var intermediate = Intermediate.Load(wixlibPath); 36 var intermediate = Intermediate.Load(wixlibPath);
37 var allTuples = intermediate.Sections.SelectMany(s => s.Tuples); 37 var allSymbols = intermediate.Sections.SelectMany(s => s.Symbols);
38 var wixSimpleRefTuples = allTuples.OfType<WixSimpleReferenceTuple>(); 38 var wixSimpleRefSymbols = allSymbols.OfType<WixSimpleReferenceSymbol>();
39 var repRef = wixSimpleRefTuples.Where(t => t.Table == "WixAction" && 39 var repRef = wixSimpleRefSymbols.Where(t => t.Table == "WixAction" &&
40 t.PrimaryKeys == "InstallExecuteSequence/RemoveExistingProducts") 40 t.PrimaryKeys == "InstallExecuteSequence/RemoveExistingProducts")
41 .SingleOrDefault(); 41 .SingleOrDefault();
42 Assert.NotNull(repRef); 42 Assert.NotNull(repRef);
@@ -65,12 +65,12 @@ namespace WixToolsetTest.CoreIntegration
65 result.AssertSuccess(); 65 result.AssertSuccess();
66 66
67 var intermediate = Intermediate.Load(wixlibPath); 67 var intermediate = Intermediate.Load(wixlibPath);
68 var allTuples = intermediate.Sections.SelectMany(s => s.Tuples); 68 var allSymbols = intermediate.Sections.SelectMany(s => s.Symbols);
69 var typeLibTuple = allTuples.OfType<TypeLibTuple>() 69 var typeLibSymbol = allSymbols.OfType<TypeLibSymbol>()
70 .SingleOrDefault(); 70 .SingleOrDefault();
71 Assert.NotNull(typeLibTuple); 71 Assert.NotNull(typeLibSymbol);
72 72
73 var fields = typeLibTuple.Fields.Select(field => field?.Type == IntermediateFieldType.Bool 73 var fields = typeLibSymbol.Fields.Select(field => field?.Type == IntermediateFieldType.Bool
74 ? field.AsNullableNumber()?.ToString() 74 ? field.AsNullableNumber()?.ToString()
75 : field?.AsString()) 75 : field?.AsString())
76 .ToList(); 76 .ToList();