aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/Bind/ResolveFieldsCommand.cs')
-rw-r--r--src/WixToolset.Core/Bind/ResolveFieldsCommand.cs57
1 files changed, 31 insertions, 26 deletions
diff --git a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
index 3e680a98..af7e262a 100644
--- a/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
+++ b/src/WixToolset.Core/Bind/ResolveFieldsCommand.cs
@@ -4,7 +4,9 @@ namespace WixToolset.Core.Bind
4{ 4{
5 using System; 5 using System;
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.Linq;
7 using WixToolset.Data; 8 using WixToolset.Data;
9 using WixToolset.Data.Tuples;
8 using WixToolset.Extensibility; 10 using WixToolset.Extensibility;
9 using WixToolset.Extensibility.Data; 11 using WixToolset.Extensibility.Data;
10 using WixToolset.Extensibility.Services; 12 using WixToolset.Extensibility.Services;
@@ -42,6 +44,9 @@ namespace WixToolset.Core.Bind
42 44
43 var fileResolver = new FileResolver(this.BindPaths, this.Extensions); 45 var fileResolver = new FileResolver(this.BindPaths, this.Extensions);
44 46
47 // Build the column lookup only when needed.
48 Dictionary<string, WixCustomTableColumnTuple> customColumnsById = null;
49
45 foreach (var sections in this.Intermediate.Sections) 50 foreach (var sections in this.Intermediate.Sections)
46 { 51 {
47 foreach (var tuple in sections.Tuples) 52 foreach (var tuple in sections.Tuples)
@@ -53,13 +58,37 @@ namespace WixToolset.Core.Bind
53 continue; 58 continue;
54 } 59 }
55 60
61 var fieldType = field.Type;
62
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
65 // the column definition may be more specific.
66 if (tuple.Definition.Type == TupleDefinitionType.WixCustomTableCell)
67 {
68 // We only care about the Data in a CustomTable cell.
69 if (field.Name != nameof(WixCustomTableCellTupleFields.Data))
70 {
71 continue;
72 }
73
74 if (customColumnsById == null)
75 {
76 customColumnsById = this.Intermediate.Sections.SelectMany(s => s.Tuples.OfType<WixCustomTableColumnTuple>()).ToDictionary(t => t.Id.Id);
77 }
78
79 if (customColumnsById.TryGetValue(tuple.Fields[(int)WixCustomTableCellTupleFields.TableRef].AsString() + "/" + tuple.Fields[(int)WixCustomTableCellTupleFields.ColumnRef].AsString(), out var customColumn))
80 {
81 fieldType = customColumn.Type;
82 }
83 }
84
56 var isDefault = true; 85 var isDefault = true;
57 86
58 // Check to make sure we're in a scenario where we can handle variable resolution. 87 // Check to make sure we're in a scenario where we can handle variable resolution.
59 if (null != delayedFields) 88 if (null != delayedFields)
60 { 89 {
61 // resolve localization and wix variables 90 // resolve localization and wix variables
62 if (field.Type == IntermediateFieldType.String) 91 if (fieldType == IntermediateFieldType.String)
63 { 92 {
64 var original = field.AsString(); 93 var original = field.AsString();
65 if (!String.IsNullOrEmpty(original)) 94 if (!String.IsNullOrEmpty(original))
@@ -87,7 +116,7 @@ namespace WixToolset.Core.Bind
87 } 116 }
88 117
89 // Resolve file paths 118 // Resolve file paths
90 if (field.Type == IntermediateFieldType.Path) 119 if (fieldType == IntermediateFieldType.Path)
91 { 120 {
92 var objectField = field.AsPath(); 121 var objectField = field.AsPath();
93 122
@@ -226,29 +255,5 @@ namespace WixToolset.Core.Bind
226 255
227 this.DelayedFields = delayedFields; 256 this.DelayedFields = delayedFields;
228 } 257 }
229
230#if false
231 private string ResolveFile(string source, string type, SourceLineNumber sourceLineNumbers, BindStage bindStage = BindStage.Normal)
232 {
233 string path = null;
234 foreach (var extension in this.Extensions)
235 {
236 path = extension.ResolveFile(source, type, sourceLineNumbers, bindStage);
237 if (null != path)
238 {
239 break;
240 }
241 }
242
243 throw new NotImplementedException(); // need to do default binder stuff
244
245 //if (null == path)
246 //{
247 // throw new WixFileNotFoundException(sourceLineNumbers, source, type);
248 //}
249
250 //return path;
251 }
252#endif
253 } 258 }
254} 259}