@joebigelow / wix / commits / 752c7593

Early detection of duplicate table definitions from extensions.

Bob Arnson committed Feb 21, 2020 at 19:31 UTC 752c7593613d72bd2d0da88508b5b3e9e0857286
2 files changed +11 -2
src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+1 -1
@@ -111,7 +111,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
111 // Load standard tables, authored custom tables, and extension custom tables.
112 TableDefinitionCollection tableDefinitions;
113 {
114 - var command = new LoadTableDefinitionsCommand(section, this.BackendExtensions);
114 + var command = new LoadTableDefinitionsCommand(this.Messaging, section, this.BackendExtensions);
115 command.Execute();
116
117 tableDefinitions = command.TableDefinitions;
src/WixToolset.Core.WindowsInstaller/Bind/LoadTableDefinitionsCommand.cs
+10 -1
@@ -10,15 +10,19 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using WixToolset.Data.Tuples;
11 using WixToolset.Data.WindowsInstaller;
12 using WixToolset.Extensibility;
13 + using WixToolset.Extensibility.Services;
14
15 internal class LoadTableDefinitionsCommand
16 {
16 - public LoadTableDefinitionsCommand(IntermediateSection section, IEnumerable<IWindowsInstallerBackendBinderExtension> backendExtensions)
17 + public LoadTableDefinitionsCommand(IMessaging messaging, IntermediateSection section, IEnumerable<IWindowsInstallerBackendBinderExtension> backendExtensions)
18 {
19 + this.Messaging = messaging;
20 this.Section = section;
21 this.BackendExtensions = backendExtensions;
22 }
23
24 + public IMessaging Messaging { get; }
25 +
26 private IntermediateSection Section { get; }
27
28 private IEnumerable<IWindowsInstallerBackendBinderExtension> BackendExtensions { get; }
@@ -39,6 +43,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
43 {
44 foreach (var tableDefinition in backendExtension.TableDefinitions)
45 {
46 + if (tableDefinitions.Contains(tableDefinition.Name))
47 + {
48 + this.Messaging.Write(ErrorMessages.DuplicateExtensionTable(backendExtension.GetType().Assembly.Location, tableDefinition.Name));
49 + }
50 +
51 tableDefinitions.Add(tableDefinition);
52 }
53 }