aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Core/Link/WixGroupingOrdering.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Core/Link/WixGroupingOrdering.cs')
-rw-r--r--src/WixToolset.Core/Link/WixGroupingOrdering.cs56
1 files changed, 17 insertions, 39 deletions
diff --git a/src/WixToolset.Core/Link/WixGroupingOrdering.cs b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
index f15ebc75..50c4d8d2 100644
--- a/src/WixToolset.Core/Link/WixGroupingOrdering.cs
+++ b/src/WixToolset.Core/Link/WixGroupingOrdering.cs
@@ -11,13 +11,14 @@ namespace WixToolset.Core.Link
11 using System.Text; 11 using System.Text;
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Tuples; 13 using WixToolset.Data.Tuples;
14 using WixToolset.Extensibility.Services;
14 15
15 /// <summary> 16 /// <summary>
16 /// Grouping and Ordering class of the WiX toolset. 17 /// Grouping and Ordering class of the WiX toolset.
17 /// </summary> 18 /// </summary>
18 internal sealed class WixGroupingOrdering : IMessageHandler 19 internal sealed class WixGroupingOrdering
19 { 20 {
20 private IMessageHandler messageHandler; 21 private IMessaging messageHandler;
21 private List<string> groupTypes; 22 private List<string> groupTypes;
22 private List<string> itemTypes; 23 private List<string> itemTypes;
23 private ItemCollection items; 24 private ItemCollection items;
@@ -32,7 +33,7 @@ namespace WixToolset.Core.Link
32 /// <param name="messageHandler">Handler for any error messages.</param> 33 /// <param name="messageHandler">Handler for any error messages.</param>
33 /// <param name="groupTypes">Group types to include.</param> 34 /// <param name="groupTypes">Group types to include.</param>
34 /// <param name="itemTypes">Item types to include.</param> 35 /// <param name="itemTypes">Item types to include.</param>
35 public WixGroupingOrdering(IntermediateSection entrySections, IMessageHandler messageHandler) 36 public WixGroupingOrdering(IntermediateSection entrySections, IMessaging messageHandler)
36 { 37 {
37 this.EntrySection = entrySections; 38 this.EntrySection = entrySections;
38 this.messageHandler = messageHandler; 39 this.messageHandler = messageHandler;
@@ -59,29 +60,6 @@ namespace WixToolset.Core.Link
59 } 60 }
60 61
61 /// <summary> 62 /// <summary>
62 /// Sends a message to the message handler if there is one.
63 /// </summary>
64 /// <param name="mea">Message event arguments.</param>
65 public void OnMessage(MessageEventArgs e)
66 {
67 WixErrorEventArgs errorEventArgs = e as WixErrorEventArgs;
68
69 if (null != errorEventArgs || MessageLevel.Error == e.Level)
70 {
71 this.encounteredError = true;
72 }
73
74 if (null != this.messageHandler)
75 {
76 this.messageHandler.OnMessage(e);
77 }
78 else if (null != errorEventArgs)
79 {
80 throw new WixException(errorEventArgs);
81 }
82 }
83
84 /// <summary>
85 /// Finds all nested items under a parent group and creates new WixGroup data for them. 63 /// Finds all nested items under a parent group and creates new WixGroup data for them.
86 /// </summary> 64 /// </summary>
87 /// <param name="parentType">The group type for the parent group to flatten.</param> 65 /// <param name="parentType">The group type for the parent group to flatten.</param>
@@ -156,7 +134,7 @@ namespace WixToolset.Core.Link
156 Item parentItem; 134 Item parentItem;
157 if (!this.items.TryGetValue(parentType, parentId, out parentItem)) 135 if (!this.items.TryGetValue(parentType, parentId, out parentItem))
158 { 136 {
159 this.OnMessage(WixErrors.IdentifierNotFound(parentType, parentId)); 137 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(parentType, parentId));
160 return; 138 return;
161 } 139 }
162 140
@@ -257,7 +235,7 @@ namespace WixToolset.Core.Link
257 //if (null == wixGroupTable || 0 == wixGroupTable.Rows.Count) 235 //if (null == wixGroupTable || 0 == wixGroupTable.Rows.Count)
258 //{ 236 //{
259 // // TODO: Change message name to make it *not* Bundle specific? 237 // // TODO: Change message name to make it *not* Bundle specific?
260 // this.OnMessage(WixErrors.MissingBundleInformation("WixGroup")); 238 // this.Write(WixErrors.MissingBundleInformation("WixGroup"));
261 //} 239 //}
262 240
263 // Collect all of the groups 241 // Collect all of the groups
@@ -326,7 +304,7 @@ namespace WixToolset.Core.Link
326 if (this.FindCircularGroupReference(item, item, itemsSeen, out circularReference)) 304 if (this.FindCircularGroupReference(item, item, itemsSeen, out circularReference))
327 { 305 {
328 itemsInKnownLoops.Add(itemsSeen); 306 itemsInKnownLoops.Add(itemsSeen);
329 this.OnMessage(WixErrors.ReferenceLoopDetected(item.Row.SourceLineNumbers, circularReference)); 307 this.messageHandler.Write(ErrorMessages.ReferenceLoopDetected(item.Row.SourceLineNumbers, circularReference));
330 } 308 }
331 } 309 }
332 } 310 }
@@ -398,12 +376,12 @@ namespace WixToolset.Core.Link
398 376
399 if (!this.items.TryGetValue(rowItemType, rowItemName, out var item)) 377 if (!this.items.TryGetValue(rowItemType, rowItemName, out var item))
400 { 378 {
401 this.OnMessage(WixErrors.IdentifierNotFound(rowItemType, rowItemName)); 379 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(rowItemType, rowItemName));
402 } 380 }
403 381
404 if (!this.items.TryGetValue(rowDependsOnType, rowDependsOnName, out var dependsOn)) 382 if (!this.items.TryGetValue(rowDependsOnType, rowDependsOnName, out var dependsOn))
405 { 383 {
406 this.OnMessage(WixErrors.IdentifierNotFound(rowDependsOnType, rowDependsOnName)); 384 this.messageHandler.Write(ErrorMessages.IdentifierNotFound(rowDependsOnType, rowDependsOnName));
407 } 385 }
408 386
409 if (null == item || null == dependsOn) 387 if (null == item || null == dependsOn)
@@ -411,7 +389,7 @@ namespace WixToolset.Core.Link
411 continue; 389 continue;
412 } 390 }
413 391
414 item.AddAfter(dependsOn, this); 392 item.AddAfter(dependsOn, this.messageHandler);
415 } 393 }
416 } 394 }
417 395
@@ -426,12 +404,12 @@ namespace WixToolset.Core.Link
426 // ordering. 404 // ordering.
427 foreach (Item item in this.items) 405 foreach (Item item in this.items)
428 { 406 {
429 item.PropagateAfterToChildItems(this); 407 item.PropagateAfterToChildItems(this.messageHandler);
430 } 408 }
431 409
432 foreach (Item item in this.items) 410 foreach (Item item in this.items)
433 { 411 {
434 item.FlattenAfters(this); 412 item.FlattenAfters(this.messageHandler);
435 } 413 }
436 } 414 }
437 415
@@ -595,7 +573,7 @@ namespace WixToolset.Core.Link
595 /// </summary> 573 /// </summary>
596 /// <param name="items">List of items to add.</param> 574 /// <param name="items">List of items to add.</param>
597 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 575 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
598 public void AddAfter(ItemCollection items, IMessageHandler messageHandler) 576 public void AddAfter(ItemCollection items, IMessaging messageHandler)
599 { 577 {
600 foreach (Item item in items) 578 foreach (Item item in items)
601 { 579 {
@@ -608,7 +586,7 @@ namespace WixToolset.Core.Link
608 /// </summary> 586 /// </summary>
609 /// <param name="item">Items to add.</param> 587 /// <param name="item">Items to add.</param>
610 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 588 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
611 public void AddAfter(Item after, IMessageHandler messageHandler) 589 public void AddAfter(Item after, IMessaging messageHandler)
612 { 590 {
613 if (this.beforeItems.Contains(after)) 591 if (this.beforeItems.Contains(after))
614 { 592 {
@@ -617,7 +595,7 @@ namespace WixToolset.Core.Link
617 // have lost some distinction between authored and propagated ordering. 595 // have lost some distinction between authored and propagated ordering.
618 string circularReference = String.Format(CultureInfo.InvariantCulture, "{0}:{1} -> {2}:{3} -> {0}:{1}", 596 string circularReference = String.Format(CultureInfo.InvariantCulture, "{0}:{1} -> {2}:{3} -> {0}:{1}",
619 this.Type, this.Id, after.Type, after.Id); 597 this.Type, this.Id, after.Type, after.Id);
620 messageHandler.OnMessage(WixErrors.OrderingReferenceLoopDetected(after.Row.SourceLineNumbers, circularReference)); 598 messageHandler.Write(ErrorMessages.OrderingReferenceLoopDetected(after.Row.SourceLineNumbers, circularReference));
621 return; 599 return;
622 } 600 }
623 601
@@ -632,7 +610,7 @@ namespace WixToolset.Core.Link
632 /// <remarks>Because items don't know about their parent groups (and can, in fact, be in more 610 /// <remarks>Because items don't know about their parent groups (and can, in fact, be in more
633 /// than one group at a time), we need to propagate the 'afters' from each parent item to its children 611 /// than one group at a time), we need to propagate the 'afters' from each parent item to its children
634 /// before we attempt to flatten the ordering.</remarks> 612 /// before we attempt to flatten the ordering.</remarks>
635 public void PropagateAfterToChildItems(IMessageHandler messageHandler) 613 public void PropagateAfterToChildItems(IMessaging messageHandler)
636 { 614 {
637 if (this.ShouldItemPropagateChildOrdering()) 615 if (this.ShouldItemPropagateChildOrdering())
638 { 616 {
@@ -647,7 +625,7 @@ namespace WixToolset.Core.Link
647 /// Flattens the ordering dependency for this item. 625 /// Flattens the ordering dependency for this item.
648 /// </summary> 626 /// </summary>
649 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param> 627 /// <param name="messageHandler">Message handler in case a circular ordering reference is found.</param>
650 public void FlattenAfters(IMessageHandler messageHandler) 628 public void FlattenAfters(IMessaging messageHandler)
651 { 629 {
652 if (this.flattenedAfterItems) 630 if (this.flattenedAfterItems)
653 { 631 {