From 28f41d1afec40d79459402fbed21f6c237768adb Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Fri, 10 Jul 2020 23:09:54 -0700 Subject: Implement optimized simple reference creation --- src/WixToolset.Core/CompilerCore.cs | 31 ++++++++++++++++++++++ .../ExtensibilityServices/ParseHelper.cs | 16 ++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs index 2f65db7a..d88858ae 100644 --- a/src/WixToolset.Core/CompilerCore.cs +++ b/src/WixToolset.Core/CompilerCore.cs @@ -376,6 +376,26 @@ namespace WixToolset.Core return this.parseHelper.CreateRegistrySymbol(this.ActiveSection, sourceLineNumbers, root, key, name, value, componentId, true); } + /// + /// Create a WixSimpleReferenceSymbol in the active section. + /// + /// Source line information for the row. + /// The symbol name of the simple reference. + /// The primary key of the simple reference. + public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, string symbolName, string primaryKey) + { + if (!this.EncounteredError) + { + var id = String.Concat(symbolName, ":", primaryKey); + + // If this simple reference hasn't been added to the active section already, add it. + if (this.activeSectionSimpleReferences.Add(id)) + { + this.parseHelper.CreateSimpleReference(this.ActiveSection, sourceLineNumbers, symbolName, primaryKey); + } + } + } + /// /// Create a WixSimpleReferenceSymbol in the active section. /// @@ -397,6 +417,17 @@ namespace WixToolset.Core } } + /// + /// Create a WixSimpleReferenceSymbol in the active section. + /// + /// Source line information for the row. + /// The symbol definition of the simple reference. + /// The primary key of the simple reference. + public void CreateSimpleReference(SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, string primaryKey) + { + this.CreateSimpleReference(sourceLineNumbers, symbolDefinition.Name, primaryKey); + } + /// /// Create a WixSimpleReferenceSymbol in the active section. /// diff --git a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs index 7115017c..d9087ce3 100644 --- a/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs +++ b/src/WixToolset.Core/ExtensibilityServices/ParseHelper.cs @@ -225,6 +225,15 @@ namespace WixToolset.Core.ExtensibilityServices return symbol.Id; } + public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, string primaryKey) + { + section.AddSymbol(new WixSimpleReferenceSymbol(sourceLineNumbers) + { + Table = symbolName, + PrimaryKeys = primaryKey + }); + } + public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, string symbolName, params string[] primaryKeys) { section.AddSymbol(new WixSimpleReferenceSymbol(sourceLineNumbers) @@ -234,6 +243,11 @@ namespace WixToolset.Core.ExtensibilityServices }); } + public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, string primaryKey) + { + this.CreateSimpleReference(section, sourceLineNumbers, symbolDefinition.Name, primaryKey); + } + public void CreateSimpleReference(IntermediateSection section, SourceLineNumber sourceLineNumbers, IntermediateSymbolDefinition symbolDefinition, params string[] primaryKeys) { this.CreateSimpleReference(section, sourceLineNumbers, symbolDefinition.Name, primaryKeys); @@ -849,7 +863,7 @@ namespace WixToolset.Core.ExtensibilityServices } else if (allowRelative) { - return filename.IndexOfAny(Common.IllegalRelativeLongFilenameCharacters) == -1; + return filename.IndexOfAny(Common.IllegalRelativeLongFilenameCharacters) == -1; } else { -- cgit v1.2.3-55-g6feb