@@ -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