Implement optimized simple reference creation
Rob Mensching committed
Jul 10, 2020 at 23:09 UTC
28f41d1afec40d79459402fbed21f6c237768adb
2 files changed
+46
-1
src/WixToolset.Core/CompilerCore.cs
+31
@@ -376,6 +376,26 @@ namespace WixToolset.Core
376
return this.parseHelper.CreateRegistrySymbol(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true);
377
}
378
379
+ /// <summary>
380
+ /// Create a WixSimpleReferenceSymbol in the active section.
381
+ /// </summary>
382
+ /// <param name="sourceLineNumbers">Source line information for the row.</param>
383
+ /// <param name="symbolName">The symbol name of the simple reference.</param>
384
+ /// <param name="primaryKey">The primary key of the simple reference.</param>
385
+ public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, string symbolName, string primaryKey)
386
+ {
387
+ if (!this.EncounteredError)
388
+ {
389
+ var id = String.Concat(symbolName, ":", primaryKey);
390
+
391
+ // If this simple reference hasn't been added to the active section already, add it.
392
+ if (this.activeSectionSimpleReferences.Add(id))
393
+ {
394
+ this.parseHelper.CreateSimpleReference(this.ActiveSection, sourceLineNumbers, symbolName, primaryKey);
395
+ }
396
+ }
397
+ }
398
+
399
/// <summary>
400
/// Create a WixSimpleReferenceSymbol in the active section.
401
/// </summary>
@@ -397,6 +417,17 @@ namespace WixToolset.Core
417
}
418
}
419
420
+ /// <summary>
421
+ /// Create a WixSimpleReferenceSymbol in the active section.
422
+ /// </summary>
423
+ /// <param name="sourceLineNumbers">Source line information for the row.</param>
424
+ /// <param name="symbolDefinition">The symbol definition of the simple reference.</param>
425
+ /// <param name="primaryKey">The primary key of the simple reference.</param>
426
+ public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, string primaryKey)
427
+ {
428
+ this.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, primaryKey);
429
+ }
430
+
431
/// <summary>
432
/// Create a WixSimpleReferenceSymbol in the active section.
433
/// </summary>
src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs
+15
-1
@@ -225,6 +225,15 @@ namespace WixToolset.Core.ExtensibilityServices
225
return symbol.Id;
226
}
227
228
+ public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, string primaryKey)
229
+ {
230
+ section.AddSymbol(new WixSimpleReferenceSymbol(sourceLineNumbers)
231
+ {
232
+ Table = symbolName,
233
+ PrimaryKeys = primaryKey
234
+ });
235
+ }
236
+
237
public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, params string[] primaryKeys)
238
{
239
section.AddSymbol(new WixSimpleReferenceSymbol(sourceLineNumbers)
@@ -234,6 +243,11 @@ namespace WixToolset.Core.ExtensibilityServices
243
});
244
}
245
246
+ public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, string primaryKey)
247
+ {
248
+ this.CreateSimpleReference(section, sourceLineNumbers, symbolDefinition.Name, primaryKey);
249
+ }
250
+
251
public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, params string[] primaryKeys)
252
{
253
this.CreateSimpleReference(section, sourceLineNumbers, symbolDefinition.Name, primaryKeys);
@@ -849,7 +863,7 @@ namespace WixToolset.Core.ExtensibilityServices
863
}
864
else if (allowRelative)
865
{
852
- return filename.IndexOfAny(Common.IllegalRelativeLongFilenameCharacters) == -1;
866
+ return filename.IndexOfAny(Common.IllegalRelativeLongFilenameCharacters) == -1;
867
}
868
else
869
{