aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2020-01-29 15:04:53 -0500
committerBob Arnson <bob@firegiant.com>2020-01-29 15:08:59 -0500
commitc9c3ab2776252d3131fea561bd3f3fac8c045f5e (patch)
treedc57f6f3685ebbacd0ae9ec46b410cfccc546273 /src
parent2d6d903defea5625da52831c2a2a7a958b1ab325 (diff)
downloadwix-c9c3ab2776252d3131fea561bd3f3fac8c045f5e.tar.gz
wix-c9c3ab2776252d3131fea561bd3f3fac8c045f5e.tar.bz2
wix-c9c3ab2776252d3131fea561bd3f3fac8c045f5e.zip
Clean up variable resolution during Resolve.
Diffstat (limited to 'src')
-rw-r--r--src/WixToolset.Core/CommandLine/BuildCommand.cs1
-rw-r--r--src/WixToolset.Core/Resolver.cs30
-rw-r--r--src/WixToolset.Core/VariableResolver.cs8
3 files changed, 17 insertions, 22 deletions
diff --git a/src/WixToolset.Core/CommandLine/BuildCommand.cs b/src/WixToolset.Core/CommandLine/BuildCommand.cs
index 023a3c1e..0868a3b6 100644
--- a/src/WixToolset.Core/CommandLine/BuildCommand.cs
+++ b/src/WixToolset.Core/CommandLine/BuildCommand.cs
@@ -284,7 +284,6 @@ namespace WixToolset.Core.CommandLine
284 context.IntermediateFolder = intermediateFolder; 284 context.IntermediateFolder = intermediateFolder;
285 context.IntermediateRepresentation = output; 285 context.IntermediateRepresentation = output;
286 context.Localizations = localizations; 286 context.Localizations = localizations;
287 context.VariableResolver = this.ServiceProvider.GetService<IVariableResolver>();
288 287
289 var resolver = this.ServiceProvider.GetService<IResolver>(); 288 var resolver = this.ServiceProvider.GetService<IResolver>();
290 resolveResult = resolver.Resolve(context); 289 resolveResult = resolver.Resolve(context);
diff --git a/src/WixToolset.Core/Resolver.cs b/src/WixToolset.Core/Resolver.cs
index d2a81477..cbae3742 100644
--- a/src/WixToolset.Core/Resolver.cs
+++ b/src/WixToolset.Core/Resolver.cs
@@ -22,12 +22,16 @@ namespace WixToolset.Core
22 this.ServiceProvider = serviceProvider; 22 this.ServiceProvider = serviceProvider;
23 23
24 this.Messaging = serviceProvider.GetService<IMessaging>(); 24 this.Messaging = serviceProvider.GetService<IMessaging>();
25
26 this.VariableResolver = serviceProvider.GetService<IVariableResolver>();
25 } 27 }
26 28
27 private IServiceProvider ServiceProvider { get; } 29 private IServiceProvider ServiceProvider { get; }
28 30
29 private IMessaging Messaging { get; } 31 private IMessaging Messaging { get; }
30 32
33 private IVariableResolver VariableResolver { get; set; }
34
31 public IEnumerable<IBindPath> BindPaths { get; set; } 35 public IEnumerable<IBindPath> BindPaths { get; set; }
32 36
33 public string IntermediateFolder { get; set; } 37 public string IntermediateFolder { get; set; }
@@ -40,7 +44,6 @@ namespace WixToolset.Core
40 44
41 public IResolveResult Resolve(IResolveContext context) 45 public IResolveResult Resolve(IResolveContext context)
42 { 46 {
43
44 foreach (var extension in context.Extensions) 47 foreach (var extension in context.Extensions)
45 { 48 {
46 extension.PreResolve(context); 49 extension.PreResolve(context);
@@ -49,11 +52,11 @@ namespace WixToolset.Core
49 ResolveResult resolveResult = null; 52 ResolveResult resolveResult = null;
50 try 53 try
51 { 54 {
52 PopulateVariableResolver(context); 55 var codepage = this.PopulateVariableResolver(context);
53 56
54 this.LocalizeUI(context); 57 this.LocalizeUI(context);
55 58
56 resolveResult = this.DoResolve(context); 59 resolveResult = this.DoResolve(context, codepage);
57 } 60 }
58 finally 61 finally
59 { 62 {
@@ -66,7 +69,7 @@ namespace WixToolset.Core
66 return resolveResult; 69 return resolveResult;
67 } 70 }
68 71
69 private ResolveResult DoResolve(IResolveContext context) 72 private ResolveResult DoResolve(IResolveContext context, int? codepage)
70 { 73 {
71 var buildingPatch = context.IntermediateRepresentation.Sections.Any(s => s.Type == SectionType.Patch); 74 var buildingPatch = context.IntermediateRepresentation.Sections.Any(s => s.Type == SectionType.Patch);
72 75
@@ -77,7 +80,7 @@ namespace WixToolset.Core
77 var command = new ResolveFieldsCommand(); 80 var command = new ResolveFieldsCommand();
78 command.Messaging = this.Messaging; 81 command.Messaging = this.Messaging;
79 command.BuildingPatch = buildingPatch; 82 command.BuildingPatch = buildingPatch;
80 command.VariableResolver = context.VariableResolver; 83 command.VariableResolver = this.VariableResolver;
81 command.BindPaths = context.BindPaths; 84 command.BindPaths = context.BindPaths;
82 command.Extensions = context.Extensions; 85 command.Extensions = context.Extensions;
83 command.FilesWithEmbeddedFiles = filesWithEmbeddedFiles; 86 command.FilesWithEmbeddedFiles = filesWithEmbeddedFiles;
@@ -112,7 +115,7 @@ namespace WixToolset.Core
112 115
113 return new ResolveResult 116 return new ResolveResult
114 { 117 {
115 Codepage = context.VariableResolver.Codepage, 118 Codepage = codepage.HasValue ? codepage.Value : -1,
116 ExpectedEmbeddedFiles = expectedEmbeddedFiles, 119 ExpectedEmbeddedFiles = expectedEmbeddedFiles,
117 DelayedFields = delayedFields, 120 DelayedFields = delayedFields,
118 IntermediateRepresentation = context.IntermediateRepresentation 121 IntermediateRepresentation = context.IntermediateRepresentation
@@ -128,7 +131,7 @@ namespace WixToolset.Core
128 { 131 {
129 foreach (var tuple in section.Tuples.OfType<DialogTuple>()) 132 foreach (var tuple in section.Tuples.OfType<DialogTuple>())
130 { 133 {
131 if (context.VariableResolver.TryGetLocalizedControl(tuple.Id.Id, null, out var localizedControl)) 134 if (this.VariableResolver.TryGetLocalizedControl(tuple.Id.Id, null, out var localizedControl))
132 { 135 {
133 if (CompilerConstants.IntegerNotSet != localizedControl.X) 136 if (CompilerConstants.IntegerNotSet != localizedControl.X)
134 { 137 {
@@ -163,7 +166,7 @@ namespace WixToolset.Core
163 166
164 foreach (var tuple in section.Tuples.OfType<ControlTuple>()) 167 foreach (var tuple in section.Tuples.OfType<ControlTuple>())
165 { 168 {
166 if (context.VariableResolver.TryGetLocalizedControl(tuple.DialogRef, tuple.Control, out var localizedControl)) 169 if (this.VariableResolver.TryGetLocalizedControl(tuple.DialogRef, tuple.Control, out var localizedControl))
167 { 170 {
168 if (CompilerConstants.IntegerNotSet != localizedControl.X) 171 if (CompilerConstants.IntegerNotSet != localizedControl.X)
169 { 172 {
@@ -198,23 +201,24 @@ namespace WixToolset.Core
198 } 201 }
199 } 202 }
200 203
201 private static void PopulateVariableResolver(IResolveContext context) 204 private int? PopulateVariableResolver(IResolveContext context)
202 { 205 {
203 var creator = context.ServiceProvider.GetService<ITupleDefinitionCreator>();
204
205 var localizations = FilterLocalizations(context); 206 var localizations = FilterLocalizations(context);
207 var codepage = localizations.FirstOrDefault()?.Codepage;
206 208
207 foreach (var localization in localizations) 209 foreach (var localization in localizations)
208 { 210 {
209 context.VariableResolver.AddLocalization(localization); 211 this.VariableResolver.AddLocalization(localization);
210 } 212 }
211 213
212 // Gather all the wix variables. 214 // Gather all the wix variables.
213 var wixVariableTuples = context.IntermediateRepresentation.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>(); 215 var wixVariableTuples = context.IntermediateRepresentation.Sections.SelectMany(s => s.Tuples).OfType<WixVariableTuple>();
214 foreach (var tuple in wixVariableTuples) 216 foreach (var tuple in wixVariableTuples)
215 { 217 {
216 context.VariableResolver.AddVariable(tuple.SourceLineNumbers, tuple.Id.Id, tuple.Value, tuple.Overridable); 218 this.VariableResolver.AddVariable(tuple.SourceLineNumbers, tuple.Id.Id, tuple.Value, tuple.Overridable);
217 } 219 }
220
221 return codepage;
218 } 222 }
219 223
220 private static IEnumerable<Localization> FilterLocalizations(IResolveContext context) 224 private static IEnumerable<Localization> FilterLocalizations(IResolveContext context)
diff --git a/src/WixToolset.Core/VariableResolver.cs b/src/WixToolset.Core/VariableResolver.cs
index c2a54a12..189fb883 100644
--- a/src/WixToolset.Core/VariableResolver.cs
+++ b/src/WixToolset.Core/VariableResolver.cs
@@ -29,24 +29,16 @@ namespace WixToolset.Core
29 this.locVariables = new Dictionary<string, BindVariable>(); 29 this.locVariables = new Dictionary<string, BindVariable>();
30 this.wixVariables = new Dictionary<string, BindVariable>(); 30 this.wixVariables = new Dictionary<string, BindVariable>();
31 this.localizedControls = new Dictionary<string, LocalizedControl>(); 31 this.localizedControls = new Dictionary<string, LocalizedControl>();
32 this.Codepage = -1;
33 } 32 }
34 33
35 private IServiceProvider ServiceProvider { get; } 34 private IServiceProvider ServiceProvider { get; }
36 35
37 private IMessaging Messaging { get; } 36 private IMessaging Messaging { get; }
38 37
39 public int Codepage { get; private set; }
40
41 public int VariableCount => this.wixVariables.Count; 38 public int VariableCount => this.wixVariables.Count;
42 39
43 public void AddLocalization(Localization localization) 40 public void AddLocalization(Localization localization)
44 { 41 {
45 if (-1 == this.Codepage)
46 {
47 this.Codepage = localization.Codepage;
48 }
49
50 foreach (var variable in localization.Variables) 42 foreach (var variable in localization.Variables)
51 { 43 {
52 if (!TryAddWixVariable(this.locVariables, variable)) 44 if (!TryAddWixVariable(this.locVariables, variable))