@joebigelow / wix / commits / 487f0f8a

Let listeners adjust message levels; general messaging cleanup.

Bob Arnson committed Jan 17, 2020 at 21:51 UTC 487f0f8afcb3431420e2106819cb7fd0afe4e118
2 files changed +58 -16
src/WixToolset.BuildTasks/DoIt.cs
+2
@@ -278,6 +278,8 @@ namespace WixToolset.BuildTasks
278 {
279 this.Logger.LogMessage(MessageImportance.Low, message);
280 }
281 +
282 + public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
283 }
284 }
285 }
src/WixToolset.Tools.Core/ConsoleMessageListener.cs
+56 -16
@@ -1,39 +1,54 @@
1 -using System;
2 -using System.Globalization;
3 -using System.Text;
4 -using System.Threading;
5 -using WixToolset.Data;
6 -using WixToolset.Extensibility;
1 +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 namespace WixToolset.Tools.Core
4 {
5 + using System;
6 + using System.Collections.Generic;
7 + using System.Linq;
8 + using System.Globalization;
9 + using System.Text;
10 + using System.Threading;
11 + using WixToolset.Data;
12 + using WixToolset.Extensibility;
13 + using WixToolset.Extensibility.Services;
14 +
15 public sealed class ConsoleMessageListener : IMessageListener
16 {
12 - public ConsoleMessageListener(string shortName, string longName)
17 + public ConsoleMessageListener(string prefix, string appName)
18 {
14 - this.ShortAppName = shortName;
15 - this.LongAppName = longName;
19 + this.Prefix = prefix;
20 + this.AppName = appName;
21
22 PrepareConsoleForLocalization();
23 }
24
20 - public string LongAppName { get; }
25 + public string AppName { get; }
26
22 - public string ShortAppName { get; }
27 + public string Prefix { get; }
28
29 public void Write(Message message)
30 {
26 - var filename = message.SourceLineNumbers?.FileName ?? this.LongAppName;
27 - var line = message.SourceLineNumbers?.LineNumber ?? -1;
31 + var filename = message.SourceLineNumbers?.FileName ?? this.AppName;
32 var type = message.Level.ToString().ToLowerInvariant();
33 var output = message.Level >= MessageLevel.Warning ? Console.Out : Console.Error;
34
31 - if (line > 0)
35 + if (message.SourceLineNumbers?.LineNumber.HasValue == true)
36 {
33 - filename = String.Concat(filename, "(", line, ")");
37 + filename = String.Concat(filename, "(", message.SourceLineNumbers?.LineNumber.Value, ")");
38 }
39
36 - output.WriteLine("{0} : {1} {2}{3:0000}: {4}", filename, type, this.ShortAppName, message.Id, message.ToString());
40 + output.WriteLine("{0} : {1} {2}{3:0000}: {4}", filename, type, this.Prefix, message.Id, message.ToString());
41 +
42 + var fileNames = GetFileNames(message.SourceLineNumbers);
43 + if (fileNames.Any())
44 + {
45 + output.WriteLine("Source trace:");
46 +
47 + foreach (var fileName in fileNames)
48 + {
49 + output.WriteLine("Source trace: {0}", fileName);
50 + }
51 + }
52 }
53
54 public void Write(string message)
@@ -41,6 +56,31 @@ namespace WixToolset.Tools.Core
56 Console.Out.WriteLine(message);
57 }
58
59 + public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
60 +
61 + private static IList<string> GetFileNames(SourceLineNumber sourceLineNumbers)
62 + {
63 + var fileNames = new List<string>();
64 +
65 + for (var sln = sourceLineNumbers; null != sln; sln = sln.Parent)
66 + {
67 + if (String.IsNullOrEmpty(sln.FileName))
68 + {
69 + continue;
70 + }
71 + else if (sln.LineNumber.HasValue)
72 + {
73 + fileNames.Add(String.Format(CultureInfo.CurrentUICulture, "{0}: line {1}", sln.FileName, sln.LineNumber));
74 + }
75 + else
76 + {
77 + fileNames.Add(sln.FileName);
78 + }
79 + }
80 +
81 + return fileNames;
82 + }
83 +
84 private static void PrepareConsoleForLocalization()
85 {
86 Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture();