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; }