aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-03-26 12:59:03 -0700
committerRob Mensching <rob@firegiant.com>2021-04-02 14:58:00 -0700
commit9cca339473d77c7036035f949239f5231c325968 (patch)
tree342399ad52d1eb8102be17c71a12242c566fca25 /src/WixToolset.Core
parent67bcf306aa020c5480b6dd28eab5db3d49264585 (diff)
downloadwix-9cca339473d77c7036035f949239f5231c325968.tar.gz
wix-9cca339473d77c7036035f949239f5231c325968.tar.bz2
wix-9cca339473d77c7036035f949239f5231c325968.zip
Integrate the IntermediateSection and IntermediateSymbol mutable changes
Diffstat (limited to 'src/WixToolset.Core')
-rw-r--r--src/WixToolset.Core/CompilerCore.cs3
-rw-r--r--src/WixToolset.Core/Librarian.cs2
-rw-r--r--src/WixToolset.Core/Link/WixGroupingOrdering.cs66
-rw-r--r--src/WixToolset.Core/Linker.cs13
4 files changed, 40 insertions, 44 deletions
diff --git a/src/WixToolset.Core/CompilerCore.cs b/src/WixToolset.Core/CompilerCore.cs
index d737b359..0bc63d79 100644
--- a/src/WixToolset.Core/CompilerCore.cs
+++ b/src/WixToolset.Core/CompilerCore.cs
@@ -1059,8 +1059,7 @@ namespace WixToolset.Core
1059 /// <returns>New section.</returns> 1059 /// <returns>New section.</returns>
1060 internal IntermediateSection CreateSection(string id, SectionType type, int codepage, string compilationId) 1060 internal IntermediateSection CreateSection(string id, SectionType type, int codepage, string compilationId)
1061 { 1061 {
1062 var section = new IntermediateSection(id, type, codepage); 1062 var section = new IntermediateSection(id, type, codepage, compilationId);
1063 section.CompilationId = compilationId;
1064 1063
1065 this.intermediate.Sections.Add(section); 1064 this.intermediate.Sections.Add(section);
1066 1065
diff --git a/src/WixToolset.Core/Librarian.cs b/src/WixToolset.Core/Librarian.cs
index 059a478b..1dd1b44d 100644
--- a/src/WixToolset.Core/Librarian.cs
+++ b/src/WixToolset.Core/Librarian.cs
@@ -60,7 +60,7 @@ namespace WixToolset.Core
60 60
61 foreach (var section in sections) 61 foreach (var section in sections)
62 { 62 {
63 section.LibraryId = context.LibraryId; 63 section.AssignToLibrary(context.LibraryId);
64 } 64 }
65 65
66 library = new Intermediate(context.LibraryId, IntermediateLevels.Compiled, sections, localizationsByCulture); 66 library = new Intermediate(context.LibraryId, IntermediateLevels.Compiled, sections, localizationsByCulture);
diff --git a/src/WixToolset.Core/Link/WixGroupingOrdering.cs b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
index a8044a0c..99220900 100644
--- a/src/WixToolset.Core/Link/WixGroupingOrdering.cs
+++ b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
@@ -23,7 +23,7 @@ namespace WixToolset.Core.Link
23 private List<string> groupTypes; 23 private List<string> groupTypes;
24 private List<string> itemTypes; 24 private List<string> itemTypes;
25 private ItemCollection items; 25 private ItemCollection items;
26 private readonly List<int> rowsUsed; 26 private readonly List<IntermediateSymbol> symbolsUsed;
27 private bool loaded; 27 private bool loaded;
28 28
29 /// <summary> 29 /// <summary>
@@ -36,7 +36,7 @@ namespace WixToolset.Core.Link
36 this.EntrySection = entrySections; 36 this.EntrySection = entrySections;
37 this.Messaging = messageHandler; 37 this.Messaging = messageHandler;
38 38
39 this.rowsUsed = new List<int>(); 39 this.symbolsUsed = new List<IntermediateSymbol>();
40 this.loaded = false; 40 this.loaded = false;
41 } 41 }
42 42
@@ -144,16 +144,9 @@ namespace WixToolset.Core.Link
144 /// </summary> 144 /// </summary>
145 public void RemoveUsedGroupRows() 145 public void RemoveUsedGroupRows()
146 { 146 {
147 var sortedIndexes = this.rowsUsed.Distinct().OrderByDescending(i => i).ToList(); 147 foreach (var symbol in this.symbolsUsed)
148
149 //Table wixGroupTable = this.output.Tables["WixGroup"];
150 //Debug.Assert(null != wixGroupTable);
151 //Debug.Assert(sortedIndexes[0] < wixGroupTable.Rows.Count);
152
153 foreach (int rowIndex in sortedIndexes)
154 { 148 {
155 //wixGroupTable.Rows.RemoveAt(rowIndex); 149 this.EntrySection.RemoveSymbol(symbol);
156 this.EntrySection.Symbols.RemoveAt(rowIndex);
157 } 150 }
158 } 151 }
159 152
@@ -236,39 +229,36 @@ namespace WixToolset.Core.Link
236 //} 229 //}
237 230
238 // Collect all of the groups 231 // Collect all of the groups
239 for (int rowIndex = 0; rowIndex < this.EntrySection.Symbols.Count; ++rowIndex) 232 foreach (var symbol in this.EntrySection.Symbols.OfType<WixGroupSymbol>())
240 { 233 {
241 if (this.EntrySection.Symbols[rowIndex] is WixGroupSymbol row) 234 var rowParentName = symbol.ParentId;
235 var rowParentType = symbol.ParentType.ToString();
236 var rowChildName = symbol.ChildId;
237 var rowChildType = symbol.ChildType.ToString();
238
239 // If this row specifies a parent or child type that's not in our
240 // lists, we assume it's not a row that we're concerned about.
241 if (!this.groupTypes.Contains(rowParentType) ||
242 !this.itemTypes.Contains(rowChildType))
242 { 243 {
243 var rowParentName = row.ParentId; 244 continue;
244 var rowParentType = row.ParentType.ToString(); 245 }
245 var rowChildName = row.ChildId;
246 var rowChildType = row.ChildType.ToString();
247
248 // If this row specifies a parent or child type that's not in our
249 // lists, we assume it's not a row that we're concerned about.
250 if (!this.groupTypes.Contains(rowParentType) ||
251 !this.itemTypes.Contains(rowChildType))
252 {
253 continue;
254 }
255 246
256 this.rowsUsed.Add(rowIndex); 247 this.symbolsUsed.Add(symbol);
257 248
258 if (!this.items.TryGetValue(rowParentType, rowParentName, out var parentItem)) 249 if (!this.items.TryGetValue(rowParentType, rowParentName, out var parentItem))
259 { 250 {
260 parentItem = new Item(row, rowParentType, rowParentName); 251 parentItem = new Item(symbol, rowParentType, rowParentName);
261 this.items.Add(parentItem); 252 this.items.Add(parentItem);
262 } 253 }
263
264 if (!this.items.TryGetValue(rowChildType, rowChildName, out var childItem))
265 {
266 childItem = new Item(row, rowChildType, rowChildName);
267 this.items.Add(childItem);
268 }
269 254
270 parentItem.ChildItems.Add(childItem); 255 if (!this.items.TryGetValue(rowChildType, rowChildName, out var childItem))
256 {
257 childItem = new Item(symbol, rowChildType, rowChildName);
258 this.items.Add(childItem);
271 } 259 }
260
261 parentItem.ChildItems.Add(childItem);
272 } 262 }
273 } 263 }
274 264
diff --git a/src/WixToolset.Core/Linker.cs b/src/WixToolset.Core/Linker.cs
index a6d43715..320f7d1f 100644
--- a/src/WixToolset.Core/Linker.cs
+++ b/src/WixToolset.Core/Linker.cs
@@ -585,13 +585,15 @@ namespace WixToolset.Core
585 // now and after processing added back in Step 3 below. 585 // now and after processing added back in Step 3 below.
586 foreach (var section in sections) 586 foreach (var section in sections)
587 { 587 {
588 var removeSymbols = new List<IntermediateSymbol>();
589
588 // Count down because we'll sometimes remove items from the list. 590 // Count down because we'll sometimes remove items from the list.
589 for (var i = section.Symbols.Count - 1; i >= 0; --i) 591 foreach (var symbol in section.Symbols)
590 { 592 {
591 // Only process the "grouping parents" such as FeatureGroup, ComponentGroup, Feature, 593 // Only process the "grouping parents" such as FeatureGroup, ComponentGroup, Feature,
592 // and Module. Non-grouping complex references are simple and 594 // and Module. Non-grouping complex references are simple and
593 // resolved during normal complex reference resolutions. 595 // resolved during normal complex reference resolutions.
594 if (section.Symbols[i] is WixComplexReferenceSymbol wixComplexReferenceRow && 596 if (symbol is WixComplexReferenceSymbol wixComplexReferenceRow &&
595 (ComplexReferenceParentType.FeatureGroup == wixComplexReferenceRow.ParentType || 597 (ComplexReferenceParentType.FeatureGroup == wixComplexReferenceRow.ParentType ||
596 ComplexReferenceParentType.ComponentGroup == wixComplexReferenceRow.ParentType || 598 ComplexReferenceParentType.ComponentGroup == wixComplexReferenceRow.ParentType ||
597 ComplexReferenceParentType.Feature == wixComplexReferenceRow.ParentType || 599 ComplexReferenceParentType.Feature == wixComplexReferenceRow.ParentType ||
@@ -611,7 +613,7 @@ namespace WixToolset.Core
611 } 613 }
612 614
613 childrenComplexRefs.Add(wixComplexReferenceRow); 615 childrenComplexRefs.Add(wixComplexReferenceRow);
614 section.Symbols.RemoveAt(i); 616 removeSymbols.Add(wixComplexReferenceRow);
615 617
616 // Remember the mapping from set of complex references with a common 618 // Remember the mapping from set of complex references with a common
617 // parent to their section. We'll need this to add them back to the 619 // parent to their section. We'll need this to add them back to the
@@ -635,6 +637,11 @@ namespace WixToolset.Core
635 } 637 }
636 } 638 }
637 } 639 }
640
641 foreach (var removeSymbol in removeSymbols)
642 {
643 section.RemoveSymbol(removeSymbol);
644 }
638 } 645 }
639 646
640 Debug.Assert(parentGroups.Count == parentGroupsSections.Count); 647 Debug.Assert(parentGroups.Count == parentGroupsSections.Count);