aboutsummaryrefslogtreecommitdiff
path: root/src/tools/heat/ConsoleMessageListener.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/heat/ConsoleMessageListener.cs')
-rw-r--r--src/tools/heat/ConsoleMessageListener.cs90
1 files changed, 0 insertions, 90 deletions
diff --git a/src/tools/heat/ConsoleMessageListener.cs b/src/tools/heat/ConsoleMessageListener.cs
deleted file mode 100644
index ebf1622b..00000000
--- a/src/tools/heat/ConsoleMessageListener.cs
+++ /dev/null
@@ -1,90 +0,0 @@
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
3namespace WixToolset.Tools.Core
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.Text;
9 using System.Threading;
10 using WixToolset.Data;
11 using WixToolset.Extensibility;
12 using WixToolset.Extensibility.Services;
13
14 public sealed class ConsoleMessageListener : IMessageListener
15 {
16 public ConsoleMessageListener(string prefix, string appName)
17 {
18 this.Prefix = prefix;
19 this.AppName = appName;
20
21 PrepareConsoleForLocalization();
22 }
23
24 public string AppName { get; }
25
26 public string Prefix { get; }
27
28 public void Write(Message message)
29 {
30 var filename = message.SourceLineNumbers?.FileName ?? this.AppName;
31 var type = message.Level.ToString().ToLowerInvariant();
32 var output = message.Level >= MessageLevel.Warning ? Console.Out : Console.Error;
33
34 if (message.SourceLineNumbers?.LineNumber.HasValue == true)
35 {
36 filename = String.Concat(filename, "(", message.SourceLineNumbers?.LineNumber.Value, ")");
37 }
38
39 output.WriteLine("{0} : {1} {2}{3:0000}: {4}", filename, type, this.Prefix, message.Id, message.ToString());
40
41 var fileNames = GetFileNames(message.SourceLineNumbers);
42 if (fileNames.Count > 1)
43 {
44 foreach (var fileName in fileNames)
45 {
46 output.WriteLine("Source trace: {0}", fileName);
47 }
48 }
49 }
50
51 public void Write(string message) => Console.Out.WriteLine(message);
52
53 public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
54
55 private static IList<string> GetFileNames(SourceLineNumber sourceLineNumbers)
56 {
57 var fileNames = new List<string>();
58
59 for (var sln = sourceLineNumbers; null != sln; sln = sln.Parent)
60 {
61 if (String.IsNullOrEmpty(sln.FileName))
62 {
63 continue;
64 }
65 else if (sln.LineNumber.HasValue)
66 {
67 fileNames.Add(String.Format(CultureInfo.CurrentUICulture, "{0}: line {1}", sln.FileName, sln.LineNumber));
68 }
69 else
70 {
71 fileNames.Add(sln.FileName);
72 }
73 }
74
75 return fileNames;
76 }
77
78 private static void PrepareConsoleForLocalization()
79 {
80 Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture.GetConsoleFallbackUICulture();
81
82 if (Console.OutputEncoding.CodePage != Encoding.UTF8.CodePage &&
83 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage &&
84 Console.OutputEncoding.CodePage != Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage)
85 {
86 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
87 }
88 }
89 }
90}