aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.BuildTasks/MsbuildMessageListener.cs
blob: f186d7213ee08efe239c5f6ed4b3f4ba1f206d7f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// 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.

#if !NETCOREAPP
namespace WixToolset.BuildTasks
{
    using System;
    using Microsoft.Build.Framework;
    using Microsoft.Build.Utilities;
    using WixToolset.Data;
    using WixToolset.Extensibility;
    using WixToolset.Extensibility.Services;

    public sealed class MsbuildMessageListener : IMessageListener
    {
        public MsbuildMessageListener(TaskLoggingHelper logger, string shortName, string longName)
        {
            this.Logger = logger;
            this.ShortAppName = shortName;
            this.LongAppName = longName;
        }

        public string ShortAppName { get; }

        public string LongAppName { get; }

        private TaskLoggingHelper Logger { get; }

        public void Write(Message message)
        {
            var code = this.ShortAppName + message.Id.ToString();
            var file = message.SourceLineNumbers?.FileName ?? this.LongAppName;
            var lineNumber = message.SourceLineNumbers?.LineNumber ?? 0;
            switch (message.Level)
            {
                case MessageLevel.Error:
                    this.Logger.LogError(null, code, null, file, lineNumber, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
                    break;

                case MessageLevel.Verbose:
                    this.Logger.LogMessage(null, code, null, file, lineNumber, 0, 0, 0, MessageImportance.Low, message.ResourceNameOrFormat, message.MessageArgs);
                    break;

                case MessageLevel.Warning:
                    this.Logger.LogWarning(null, code, null, file, lineNumber, 0, 0, 0, message.ResourceNameOrFormat, message.MessageArgs);
                    break;

                default:
                    if (message.Id > 0)
                    {
                        this.Logger.LogMessage(null, code, null, file, lineNumber, 0, 0, 0, MessageImportance.Normal, message.ResourceNameOrFormat, message.MessageArgs);
                    }
                    else
                    {
                        this.Logger.LogMessage(MessageImportance.Normal, message.ResourceNameOrFormat, message.MessageArgs);
                    }
                    break;
            }
        }

        public void Write(string message)
        {
            this.Logger.LogMessage(MessageImportance.Low, message);
        }

        public MessageLevel CalculateMessageLevel(IMessaging messaging, Message message, MessageLevel defaultMessageLevel) => defaultMessageLevel;
    }
}
#endif