@joebigelow / wix-1 / commits / 0c688dbd

Use class name from xml for the generated class name.

Sean Hall committed Jan 19, 2019 at 20:40 UTC 0c688dbd8a32342f117179ec3432b4237334dbcd
1 file changed +32 -8
src/MessagesToMessages/Program.cs
+32 -8
@@ -1,4 +1,4 @@
1 -using System;
1 +using System;
2 using System.Collections.Generic;
3 using System.IO;
4 using System.Linq;
@@ -40,9 +40,10 @@ namespace MessagesToMessages
40
41 foreach (var m in messages.GroupBy(m => m.Level))
42 {
43 - var result = GenerateCs(m.Key, m);
43 + var className = m.First().ClassName;
44 + var result = GenerateCs(className, m.Key, m);
45
45 - var path = Path.Combine(args[1], m.Key + "Messages.cs");
46 + var path = Path.Combine(args[1], className + ".cs");
47 File.WriteAllText(path, result);
48 }
49 }
@@ -53,7 +54,28 @@ namespace MessagesToMessages
54
55 foreach (var xClass in doc.Root.Descendants(ClassDefinition))
56 {
56 - var level = xClass.Attribute(Level).Value;
57 + var name = xClass.Attribute(Name)?.Value;
58 + var level = xClass.Attribute(Level)?.Value;
59 +
60 + if (String.IsNullOrEmpty(name))
61 + {
62 + name = level + "Messages";
63 + }
64 + if (String.IsNullOrEmpty(level))
65 + {
66 + if (name.EndsWith("Errors", StringComparison.InvariantCultureIgnoreCase))
67 + {
68 + level = "Error";
69 + }
70 + else if (name.EndsWith("Verboses", StringComparison.InvariantCultureIgnoreCase))
71 + {
72 + level = "Verbose";
73 + }
74 + else if (name.EndsWith("Warnings", StringComparison.InvariantCultureIgnoreCase))
75 + {
76 + level = "Warning";
77 + }
78 + }
79
80 var unique = new HashSet<string>();
81 var lastNumber = 0;
@@ -81,7 +103,7 @@ namespace MessagesToMessages
103
104 var parameters = xInstance.Elements(ParameterDefinition).Select(ReadParameter).ToList();
105
84 - yield return new Message { Id = id, Level = level, Number = number, Parameters = parameters, SourceLineNumbers = sln, Value = value, Suffix = suffix == 0 ? String.Empty : suffix.ToString() };
106 + yield return new Message { Id = id, ClassName = name, Level = level, Number = number, Parameters = parameters, SourceLineNumbers = sln, Value = value, Suffix = suffix == 0 ? String.Empty : suffix.ToString() };
107
108 ++suffix;
109 }
@@ -117,7 +139,7 @@ namespace MessagesToMessages
139 return new Parameter { Name = name, Type = type };
140 }
141
120 - private static string GenerateCs(string level, IEnumerable<Message> messages)
142 + private static string GenerateCs(string className, string level, IEnumerable<Message> messages)
143 {
144 var header = String.Join(Environment.NewLine,
145 "// 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.",
@@ -127,7 +149,7 @@ namespace MessagesToMessages
149 " using System;",
150 " using System.Resources;",
151 "",
130 - " public static class {0}Messages",
152 + " public static class {0}",
153 " {");
154
155 var messageFormat = String.Join(Environment.NewLine,
@@ -162,7 +184,7 @@ namespace MessagesToMessages
184
185 var sb = new StringBuilder();
186
165 - sb.AppendLine(header.Replace("{0}", level));
187 + sb.AppendLine(header.Replace("{0}", className));
188
189 foreach (var message in messages.OrderBy(m => m.Id))
190 {
@@ -215,6 +237,8 @@ namespace MessagesToMessages
237
238 public string Suffix { get; set; }
239
240 + public string ClassName { get; set; }
241 +
242 public string Level { get; set; }
243
244 public int Number { get; set; }