Skip to content

Commit 5567143

Browse files
committed
Code cleanup.
Use using directive. Use pattern matching. Removed unneeded imports.
1 parent 15c5063 commit 5567143

22 files changed

+466
-527
lines changed

ReClass.NET/CodeGenerator/CSharpCodeGenerator.cs

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -43,59 +43,56 @@ public class CSharpCodeGenerator : ICodeGenerator
4343

4444
public string GenerateCode(IReadOnlyList<ClassNode> classes, IReadOnlyList<EnumDescription> enums, ILogger logger)
4545
{
46-
using (var sw = new StringWriter())
46+
using var sw = new StringWriter();
47+
using var iw = new IndentedTextWriter(sw, "\t");
48+
49+
iw.WriteLine($"// Created with {Constants.ApplicationName} {Constants.ApplicationVersion} by {Constants.Author}");
50+
iw.WriteLine();
51+
iw.WriteLine("// Warning: The C# code generator doesn't support all node types!");
52+
iw.WriteLine();
53+
iw.WriteLine("using System.Runtime.InteropServices;");
54+
55+
iw.WriteLine("// optional namespace, only for vectors");
56+
iw.WriteLine("using System.Numerics;");
57+
iw.WriteLine();
58+
59+
using (var en = enums.GetEnumerator())
4760
{
48-
using (var iw = new IndentedTextWriter(sw, "\t"))
61+
if (en.MoveNext())
4962
{
50-
iw.WriteLine($"// Created with {Constants.ApplicationName} {Constants.ApplicationVersion} by {Constants.Author}");
51-
iw.WriteLine();
52-
iw.WriteLine("// Warning: The C# code generator doesn't support all node types!");
53-
iw.WriteLine();
54-
iw.WriteLine("using System.Runtime.InteropServices;");
63+
WriteEnum(iw, en.Current);
5564

56-
iw.WriteLine("// optional namespace, only for vectors");
57-
iw.WriteLine("using System.Numerics;");
58-
iw.WriteLine();
59-
60-
using (var en = enums.GetEnumerator())
65+
while (en.MoveNext())
6166
{
62-
if (en.MoveNext())
63-
{
64-
WriteEnum(iw, en.Current);
67+
iw.WriteLine();
6568

66-
while (en.MoveNext())
67-
{
68-
iw.WriteLine();
69+
WriteEnum(iw, en.Current);
70+
}
6971

70-
WriteEnum(iw, en.Current);
71-
}
72+
iw.WriteLine();
73+
}
74+
}
7275

73-
iw.WriteLine();
74-
}
75-
}
76+
var classesToWrite = classes
77+
.Where(c => c.Nodes.None(n => n is FunctionNode)) // Skip class which contains FunctionNodes because these are not data classes.
78+
.Distinct();
7679

77-
var classesToWrite = classes
78-
.Where(c => c.Nodes.None(n => n is FunctionNode)) // Skip class which contains FunctionNodes because these are not data classes.
79-
.Distinct();
80+
using (var en = classesToWrite.GetEnumerator())
81+
{
82+
if (en.MoveNext())
83+
{
84+
WriteClass(iw, en.Current, logger);
8085

81-
using (var en = classesToWrite.GetEnumerator())
86+
while (en.MoveNext())
8287
{
83-
if (en.MoveNext())
84-
{
85-
WriteClass(iw, en.Current, logger);
86-
87-
while (en.MoveNext())
88-
{
89-
iw.WriteLine();
88+
iw.WriteLine();
9089

91-
WriteClass(iw, en.Current, logger);
92-
}
93-
}
90+
WriteClass(iw, en.Current, logger);
9491
}
9592
}
96-
97-
return sw.ToString();
9893
}
94+
95+
return sw.ToString();
9996
}
10097

10198
/// <summary>

ReClass.NET/CodeGenerator/CppCodeGenerator.cs

Lines changed: 83 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -154,76 +154,73 @@ public CppCodeGenerator(CppTypeMapping typeMapping)
154154

155155
public string GenerateCode(IReadOnlyList<ClassNode> classes, IReadOnlyList<EnumDescription> enums, ILogger logger)
156156
{
157-
using (var sw = new StringWriter())
157+
using var sw = new StringWriter();
158+
using var iw = new IndentedTextWriter(sw, "\t");
159+
160+
iw.WriteLine($"// Created with {Constants.ApplicationName} {Constants.ApplicationVersion} by {Constants.Author}");
161+
iw.WriteLine();
162+
163+
using (var en = enums.GetEnumerator())
158164
{
159-
using (var iw = new IndentedTextWriter(sw, "\t"))
165+
if (en.MoveNext())
160166
{
161-
iw.WriteLine($"// Created with {Constants.ApplicationName} {Constants.ApplicationVersion} by {Constants.Author}");
162-
iw.WriteLine();
167+
WriteEnum(iw, en.Current);
163168

164-
using (var en = enums.GetEnumerator())
169+
while (en.MoveNext())
165170
{
166-
if (en.MoveNext())
167-
{
168-
WriteEnum(iw, en.Current);
171+
iw.WriteLine();
169172

170-
while (en.MoveNext())
171-
{
172-
iw.WriteLine();
173+
WriteEnum(iw, en.Current);
174+
}
173175

174-
WriteEnum(iw, en.Current);
175-
}
176+
iw.WriteLine();
177+
}
178+
}
176179

177-
iw.WriteLine();
178-
}
179-
}
180+
var alreadySeen = new HashSet<ClassNode>();
180181

181-
var alreadySeen = new HashSet<ClassNode>();
182+
IEnumerable<ClassNode> GetReversedClassHierarchy(ClassNode node)
183+
{
184+
Contract.Requires(node != null);
185+
Contract.Ensures(Contract.Result<IEnumerable<ClassNode>>() != null);
182186

183-
IEnumerable<ClassNode> GetReversedClassHierarchy(ClassNode node)
184-
{
185-
Contract.Requires(node != null);
186-
Contract.Ensures(Contract.Result<IEnumerable<ClassNode>>() != null);
187+
if (!alreadySeen.Add(node))
188+
{
189+
return Enumerable.Empty<ClassNode>();
190+
}
187191

188-
if (!alreadySeen.Add(node))
189-
{
190-
return Enumerable.Empty<ClassNode>();
191-
}
192+
var classNodes = node.Nodes
193+
.OfType<BaseWrapperNode>()
194+
.Where(w => !w.IsNodePresentInChain<PointerNode>()) // Pointers are forward declared
195+
.Select(w => w.ResolveMostInnerNode() as ClassNode)
196+
.Where(n => n != null);
192197

193-
var classNodes = node.Nodes
194-
.OfType<BaseWrapperNode>()
195-
.Where(w => !w.IsNodePresentInChain<PointerNode>()) // Pointers are forward declared
196-
.Select(w => w.ResolveMostInnerNode() as ClassNode)
197-
.Where(n => n != null);
198+
return classNodes
199+
.SelectMany(GetReversedClassHierarchy)
200+
.Append(node);
201+
}
198202

199-
return classNodes
200-
.SelectMany(GetReversedClassHierarchy)
201-
.Append(node);
202-
}
203+
var classesToWrite = classes
204+
.Where(c => c.Nodes.None(n => n is FunctionNode)) // Skip class which contains FunctionNodes because these are not data classes.
205+
.SelectMany(GetReversedClassHierarchy) // Order the classes by their use hierarchy.
206+
.Distinct();
203207

204-
var classesToWrite = classes
205-
.Where(c => c.Nodes.None(n => n is FunctionNode)) // Skip class which contains FunctionNodes because these are not data classes.
206-
.SelectMany(GetReversedClassHierarchy) // Order the classes by their use hierarchy.
207-
.Distinct();
208+
using (var en = classesToWrite.GetEnumerator())
209+
{
210+
if (en.MoveNext())
211+
{
212+
WriteClass(iw, en.Current, classes, logger);
208213

209-
using (var en = classesToWrite.GetEnumerator())
214+
while (en.MoveNext())
210215
{
211-
if (en.MoveNext())
212-
{
213-
WriteClass(iw, en.Current, classes, logger);
214-
215-
while (en.MoveNext())
216-
{
217-
iw.WriteLine();
216+
iw.WriteLine();
218217

219-
WriteClass(iw, en.Current, classes, logger);
220-
}
221-
}
218+
WriteClass(iw, en.Current, classes, logger);
222219
}
223220
}
224-
225-
return sw.ToString();
226221
}
222+
223+
return sw.ToString();
227224
}
228225

229226
/// <summary>
@@ -366,7 +363,7 @@ private void WriteNodes(IndentedTextWriter writer, IEnumerable<BaseNode> nodes,
366363
var fill = 0;
367364
var fillStart = 0;
368365

369-
BaseNode CreatePaddingMember(int offset, int count)
366+
static BaseNode CreatePaddingMember(int offset, int count)
370367
{
371368
var node = new ArrayNode
372369
{
@@ -496,7 +493,7 @@ private static BaseNode TransformNode(BaseNode node)
496493
return custom.TransformNode(node);
497494
}
498495

499-
BaseNode GetCharacterNodeForEncoding(Encoding encoding)
496+
static BaseNode GetCharacterNodeForEncoding(Encoding encoding)
500497
{
501498
if (encoding.IsSameCodePage(Encoding.Unicode))
502499
{
@@ -509,35 +506,35 @@ BaseNode GetCharacterNodeForEncoding(Encoding encoding)
509506
return new Utf8CharacterNode();
510507
}
511508

512-
if (node is BaseTextNode textNode)
513-
{
514-
var arrayNode = new ArrayNode { Count = textNode.Length };
515-
arrayNode.CopyFromNode(node);
516-
arrayNode.ChangeInnerNode(GetCharacterNodeForEncoding(textNode.Encoding));
517-
return arrayNode;
518-
}
519-
520-
if (node is BaseTextPtrNode textPtrNode)
521-
{
522-
var pointerNode = new PointerNode();
523-
pointerNode.CopyFromNode(node);
524-
pointerNode.ChangeInnerNode(GetCharacterNodeForEncoding(textPtrNode.Encoding));
525-
return pointerNode;
526-
}
527-
528-
if (node is BitFieldNode bitFieldNode)
529-
{
530-
var underlayingNode = bitFieldNode.GetUnderlayingNode();
531-
underlayingNode.CopyFromNode(node);
532-
return underlayingNode;
533-
}
534-
535-
if (node is BaseHexNode hexNode)
509+
switch (node)
536510
{
537-
var arrayNode = new ArrayNode { Count = hexNode.MemorySize };
538-
arrayNode.CopyFromNode(node);
539-
arrayNode.ChangeInnerNode(new Utf8CharacterNode());
540-
return arrayNode;
511+
case BaseTextNode textNode:
512+
{
513+
var arrayNode = new ArrayNode { Count = textNode.Length };
514+
arrayNode.CopyFromNode(node);
515+
arrayNode.ChangeInnerNode(GetCharacterNodeForEncoding(textNode.Encoding));
516+
return arrayNode;
517+
}
518+
case BaseTextPtrNode textPtrNode:
519+
{
520+
var pointerNode = new PointerNode();
521+
pointerNode.CopyFromNode(node);
522+
pointerNode.ChangeInnerNode(GetCharacterNodeForEncoding(textPtrNode.Encoding));
523+
return pointerNode;
524+
}
525+
case BitFieldNode bitFieldNode:
526+
{
527+
var underlayingNode = bitFieldNode.GetUnderlayingNode();
528+
underlayingNode.CopyFromNode(node);
529+
return underlayingNode;
530+
}
531+
case BaseHexNode hexNode:
532+
{
533+
var arrayNode = new ArrayNode { Count = hexNode.MemorySize };
534+
arrayNode.CopyFromNode(node);
535+
arrayNode.ChangeInnerNode(new Utf8CharacterNode());
536+
return arrayNode;
537+
}
541538
}
542539

543540
return node;
@@ -564,13 +561,12 @@ private string GetTypeDefinition(BaseNode node, ILogger logger)
564561
return type;
565562
}
566563

567-
if (node is ClassInstanceNode classInstanceNode)
568-
{
569-
return $"class {classInstanceNode.InnerNode.Name}";
570-
}
571-
if (node is EnumNode enumNode)
564+
switch (node)
572565
{
573-
return enumNode.Enum.Name;
566+
case ClassInstanceNode classInstanceNode:
567+
return $"class {classInstanceNode.InnerNode.Name}";
568+
case EnumNode enumNode:
569+
return enumNode.Enum.Name;
574570
}
575571

576572
return null;

ReClass.NET/DataExchange/ReClass/ReClassClipboard.cs

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@ public static void Copy(IEnumerable<BaseNode> nodes, ILogger logger)
2525
Contract.Requires(nodes != null);
2626
Contract.Requires(logger != null);
2727

28-
using (var ms = new MemoryStream())
29-
{
30-
ReClassNetFile.SerializeNodesToStream(ms, nodes, logger);
28+
using var ms = new MemoryStream();
3129

32-
Clipboard.SetData(ClipboardFormat, ms.ToArray());
33-
}
30+
ReClassNetFile.SerializeNodesToStream(ms, nodes, logger);
31+
32+
Clipboard.SetData(ClipboardFormat, ms.ToArray());
3433
}
3534

3635
/// <summary>Pastes nodes from the clipboard.</summary>
@@ -43,23 +42,14 @@ public static Tuple<List<ClassNode>, List<BaseNode>> Paste(ReClassNetProject tem
4342
Contract.Requires(logger != null);
4443
Contract.Ensures(Contract.Result<Tuple<List<ClassNode>, List<BaseNode>>>() != null);
4544

46-
var classes = new List<ClassNode>();
47-
var nodes = new List<BaseNode>();
48-
49-
if (ContainsNodes)
45+
if (ContainsNodes && Clipboard.GetData(ClipboardFormat) is byte[] data)
5046
{
51-
if (Clipboard.GetData(ClipboardFormat) is byte[] data)
52-
{
53-
using (var ms = new MemoryStream(data))
54-
{
55-
var result = ReClassNetFile.DeserializeNodesFromStream(ms, templateProject, logger);
56-
classes.AddRange(result.Item1);
57-
nodes.AddRange(result.Item2);
58-
}
59-
}
47+
using var ms = new MemoryStream(data);
48+
49+
return ReClassNetFile.DeserializeNodesFromStream(ms, templateProject, logger);
6050
}
6151

62-
return Tuple.Create(classes, nodes);
52+
return Tuple.Create(new List<ClassNode>(), new List<BaseNode>());
6353
}
6454
}
6555
}

0 commit comments

Comments
 (0)