aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2020-06-25 14:43:50 -0700
committerRob Mensching <rob@firegiant.com>2020-06-25 14:50:31 -0700
commit38afa9e7bc7eacc021f8805f607368a05751e3c3 (patch)
tree803b0a8d9a06a7d6f7c4df408437017ae21a883e /src/WixToolset.Core
parent8968578d50858721317d410549a9f9b5c62bf1f7 (diff)
downloadwix-38afa9e7bc7eacc021f8805f607368a05751e3c3.tar.gz
wix-38afa9e7bc7eacc021f8805f607368a05751e3c3.tar.bz2
wix-38afa9e7bc7eacc021f8805f607368a05751e3c3.zip
The Great Tuple to Symbol Rename (tm)
Diffstat (limited to 'src/WixToolset.Core')
-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
29 files changed, 875 insertions, 875 deletions
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)));