Skip to content

Commit 8cee86f

Browse files
committed
Use C# 8 features.
1 parent 5446b0f commit 8cee86f

File tree

1 file changed

+106
-116
lines changed

1 file changed

+106
-116
lines changed

ReClass.NET/DataExchange/ReClass/ReClassNetFile.Read.cs

Lines changed: 106 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -17,123 +17,119 @@ public partial class ReClassNetFile
1717
{
1818
public void Load(string filePath, ILogger logger)
1919
{
20-
using (var fs = new FileStream(filePath, FileMode.Open))
21-
{
22-
Load(fs, logger);
23-
}
20+
using var fs = new FileStream(filePath, FileMode.Open);
21+
22+
Load(fs, logger);
2423
}
2524

2625
public void Load(Stream input, ILogger logger)
2726
{
2827
Contract.Requires(input != null);
2928
Contract.Requires(logger != null);
3029

31-
using (var archive = new ZipArchive(input, ZipArchiveMode.Read))
30+
using var archive = new ZipArchive(input, ZipArchiveMode.Read);
31+
var dataEntry = archive.GetEntry(DataFileName);
32+
if (dataEntry == null)
3233
{
33-
var dataEntry = archive.GetEntry(DataFileName);
34-
if (dataEntry == null)
35-
{
36-
throw new FormatException();
37-
}
38-
using (var entryStream = dataEntry.Open())
39-
{
40-
var document = XDocument.Load(entryStream);
41-
if (document.Root?.Element(XmlClassesElement) == null)
42-
{
43-
throw new FormatException("The data has not the correct format.");
44-
}
34+
throw new FormatException();
35+
}
4536

46-
uint.TryParse(document.Root.Attribute(XmlVersionAttribute)?.Value, out var fileVersion);
47-
if ((fileVersion & FileVersionCriticalMask) > (FileVersion & FileVersionCriticalMask))
48-
{
49-
throw new FormatException($"The file version is unsupported. A newer {Constants.ApplicationName} version is required to read it.");
50-
}
37+
using var entryStream = dataEntry.Open();
38+
var document = XDocument.Load(entryStream);
39+
if (document.Root?.Element(XmlClassesElement) == null)
40+
{
41+
throw new FormatException("The data has not the correct format.");
42+
}
5143

52-
var platform = document.Root.Attribute(XmlPlatformAttribute)?.Value;
53-
if (platform != Constants.Platform)
54-
{
55-
logger.Log(LogLevel.Warning, $"The platform of the file ({platform}) doesn't match the program platform ({Constants.Platform}).");
56-
}
44+
uint.TryParse(document.Root.Attribute(XmlVersionAttribute)?.Value, out var fileVersion);
45+
if ((fileVersion & FileVersionCriticalMask) > (FileVersion & FileVersionCriticalMask))
46+
{
47+
throw new FormatException($"The file version is unsupported. A newer {Constants.ApplicationName} version is required to read it.");
48+
}
5749

58-
var customDataElement = document.Root.Element(XmlCustomDataElement);
59-
if (customDataElement != null)
60-
{
61-
project.CustomData.Deserialize(customDataElement);
62-
}
50+
var platform = document.Root.Attribute(XmlPlatformAttribute)?.Value;
51+
if (platform != Constants.Platform)
52+
{
53+
logger.Log(LogLevel.Warning, $"The platform of the file ({platform}) doesn't match the program platform ({Constants.Platform}).");
54+
}
55+
56+
var customDataElement = document.Root.Element(XmlCustomDataElement);
57+
if (customDataElement != null)
58+
{
59+
project.CustomData.Deserialize(customDataElement);
60+
}
6361

64-
var typeMappingElement = document.Root.Element(XmlTypeMappingElement);
65-
if (typeMappingElement != null)
62+
var typeMappingElement = document.Root.Element(XmlTypeMappingElement);
63+
if (typeMappingElement != null)
64+
{
65+
project.TypeMapping.Deserialize(typeMappingElement);
66+
}
67+
68+
var enumsElement = document.Root.Element(XmlEnumsElement);
69+
if (enumsElement != null)
70+
{
71+
foreach (var enumElement in enumsElement.Elements(XmlEnumElement))
72+
{
73+
var name = enumElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
74+
var useFlagsMode = (bool?)enumElement.Attribute(XmlFlagsAttribute) ?? false;
75+
var size = enumElement.Attribute(XmlSizeAttribute).GetEnumValue<EnumDescription.UnderlyingTypeSize>();
76+
77+
var values = new Dictionary<string, long>();
78+
foreach (var itemElement in enumElement.Elements(XmlItemElement))
6679
{
67-
project.TypeMapping.Deserialize(typeMappingElement);
80+
var itemName = itemElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
81+
var itemValue = (long?)itemElement.Attribute(XmlValueAttribute) ?? 0L;
82+
83+
values.Add(itemName, itemValue);
6884
}
6985

70-
var enumsElement = document.Root.Element(XmlEnumsElement);
71-
if (enumsElement != null)
86+
var @enum = new EnumDescription
7287
{
73-
foreach (var enumElement in enumsElement.Elements(XmlEnumElement))
74-
{
75-
var name = enumElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
76-
var useFlagsMode = (bool?)enumElement.Attribute(XmlFlagsAttribute) ?? false;
77-
var size = enumElement.Attribute(XmlSizeAttribute).GetEnumValue<EnumDescription.UnderlyingTypeSize>();
78-
79-
var values = new Dictionary<string, long>();
80-
foreach (var itemElement in enumElement.Elements(XmlItemElement))
81-
{
82-
var itemName = itemElement.Attribute(XmlNameAttribute)?.Value ?? string.Empty;
83-
var itemValue = (long?)itemElement.Attribute(XmlValueAttribute) ?? 0L;
84-
85-
values.Add(itemName, itemValue);
86-
}
87-
88-
var @enum = new EnumDescription
89-
{
90-
Name = name
91-
};
92-
@enum.SetData(useFlagsMode, size, values);
93-
94-
project.AddEnum(@enum);
95-
}
96-
}
88+
Name = name
89+
};
90+
@enum.SetData(useFlagsMode, size, values);
91+
92+
project.AddEnum(@enum);
93+
}
94+
}
9795

98-
var classes = new List<Tuple<XElement, ClassNode>>();
96+
var classes = new List<Tuple<XElement, ClassNode>>();
9997

100-
var classesElement = document.Root.Element(XmlClassesElement);
101-
if (classesElement != null)
98+
var classesElement = document.Root.Element(XmlClassesElement);
99+
if (classesElement != null)
100+
{
101+
foreach (var element in classesElement
102+
.Elements(XmlClassElement)
103+
.DistinctBy(e => e.Attribute(XmlUuidAttribute)?.Value))
104+
{
105+
var node = new ClassNode(false)
102106
{
103-
foreach (var element in classesElement
104-
.Elements(XmlClassElement)
105-
.DistinctBy(e => e.Attribute(XmlUuidAttribute)?.Value))
106-
{
107-
var node = new ClassNode(false)
108-
{
109-
Uuid = NodeUuid.FromBase64String(element.Attribute(XmlUuidAttribute)?.Value, true),
110-
Name = element.Attribute(XmlNameAttribute)?.Value ?? string.Empty,
111-
Comment = element.Attribute(XmlCommentAttribute)?.Value ?? string.Empty,
112-
AddressFormula = element.Attribute(XmlAddressAttribute)?.Value ?? string.Empty
113-
};
114-
115-
if (!project.ContainsClass(node.Uuid))
116-
{
117-
project.AddClass(node);
118-
119-
classes.Add(Tuple.Create(element, node));
120-
}
121-
}
122-
}
107+
Uuid = NodeUuid.FromBase64String(element.Attribute(XmlUuidAttribute)?.Value, true),
108+
Name = element.Attribute(XmlNameAttribute)?.Value ?? string.Empty,
109+
Comment = element.Attribute(XmlCommentAttribute)?.Value ?? string.Empty,
110+
AddressFormula = element.Attribute(XmlAddressAttribute)?.Value ?? string.Empty
111+
};
123112

124-
foreach (var t in classes)
113+
if (!project.ContainsClass(node.Uuid))
125114
{
126-
var nodes = t.Item1.Elements(XmlNodeElement)
127-
.Select(e => CreateNodeFromElement(e, t.Item2, logger))
128-
.Where(n => n != null);
115+
project.AddClass(node);
129116

130-
foreach (var node in nodes)
131-
{
132-
t.Item2.AddNode(node);
133-
}
117+
classes.Add(Tuple.Create(element, node));
134118
}
135119
}
136120
}
121+
122+
foreach (var t in classes)
123+
{
124+
var nodes = t.Item1.Elements(XmlNodeElement)
125+
.Select(e => CreateNodeFromElement(e, t.Item2, logger))
126+
.Where(n => n != null);
127+
128+
foreach (var node in nodes)
129+
{
130+
t.Item2.AddNode(node);
131+
}
132+
}
137133
}
138134

139135
private BaseNode CreateNodeFromElement(XElement element, BaseNode parent, ILogger logger)
@@ -199,15 +195,11 @@ ClassNode GetClassNodeFromElementReference()
199195
return null;
200196
}
201197

202-
switch (node)
198+
node = node switch
203199
{
204-
case BaseClassArrayNode classArrayNode:
205-
node = classArrayNode.GetEquivalentNode(0, innerClass);
206-
break;
207-
case ClassPointerNode classPointerNode:
208-
node = classPointerNode.GetEquivalentNode(innerClass);
209-
break;
210-
}
200+
BaseClassArrayNode classArrayNode => classArrayNode.GetEquivalentNode(0, innerClass),
201+
ClassPointerNode classPointerNode => classPointerNode.GetEquivalentNode(innerClass)
202+
};
211203
}
212204
else
213205
{
@@ -321,26 +313,24 @@ public static Tuple<List<ClassNode>, List<BaseNode>> DeserializeNodesFromStream(
321313
Contract.Requires(logger != null);
322314
Contract.Ensures(Contract.Result<Tuple<List<ClassNode>, List<BaseNode>>>() != null);
323315

324-
using (var project = new ReClassNetProject())
325-
{
326-
templateProject?.Classes.ForEach(project.AddClass);
316+
using var project = new ReClassNetProject();
317+
templateProject?.Classes.ForEach(project.AddClass);
327318

328-
var file = new ReClassNetFile(project);
329-
file.Load(input, logger);
319+
var file = new ReClassNetFile(project);
320+
file.Load(input, logger);
330321

331-
var classes = project.Classes
332-
.Where(c => c.Name != SerializationClassName);
333-
if (templateProject != null)
334-
{
335-
classes = classes.Where(c => !templateProject.ContainsClass(c.Uuid));
336-
}
322+
var classes = project.Classes
323+
.Where(c => c.Name != SerializationClassName);
324+
if (templateProject != null)
325+
{
326+
classes = classes.Where(c => !templateProject.ContainsClass(c.Uuid));
327+
}
337328

338-
var nodes = project.Classes
339-
.Where(c => c.Name == SerializationClassName)
340-
.SelectMany(c => c.Nodes);
329+
var nodes = project.Classes
330+
.Where(c => c.Name == SerializationClassName)
331+
.SelectMany(c => c.Nodes);
341332

342-
return Tuple.Create(classes.ToList(), nodes.ToList());
343-
}
333+
return Tuple.Create(classes.ToList(), nodes.ToList());
344334
}
345335
}
346336
}

0 commit comments

Comments
 (0)