@@ -67,26 +67,57 @@ public void Load(Stream input, ILogger logger)
6767 project . TypeMapping . Deserialize ( typeMappingElement ) ;
6868 }
6969
70- var classes = new List < Tuple < XElement , ClassNode > > ( ) ;
71-
72- foreach ( var element in document . Root
73- . Element ( XmlClassesElement )
74- . Elements ( XmlClassElement )
75- . DistinctBy ( e => e . Attribute ( XmlUuidAttribute ) ? . Value ) )
70+ var enumsElement = document . Root . Element ( XmlEnumsElement ) ;
71+ if ( enumsElement != null )
7672 {
77- var node = new ClassNode ( false )
73+ foreach ( var enumElement in enumsElement . Elements ( XmlEnumElement ) )
7874 {
79- Uuid = NodeUuid . FromBase64String ( element . Attribute ( XmlUuidAttribute ) ? . Value , true ) ,
80- Name = element . Attribute ( XmlNameAttribute ) ? . Value ?? string . Empty ,
81- Comment = element . Attribute ( XmlCommentAttribute ) ? . Value ?? string . Empty ,
82- AddressFormula = element . Attribute ( XmlAddressAttribute ) ? . Value ?? string . Empty
83- } ;
75+ var name = enumElement . Attribute ( XmlNameAttribute ) ? . Value ?? string . Empty ;
76+ var useFlagsMode = ( bool ? ) enumElement . Attribute ( XmlFlagsAttribute ) ?? false ;
77+ var size = enumElement . Attribute ( XmlSizeAttribute ) . GetEnumValue < EnumMetaData . UnderlyingTypeSize > ( ) ;
78+
79+ var values = new Dictionary < long , string > ( ) ;
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 ) ?? 0 ;
84+
85+ values . Add ( itemValue , itemName ) ;
86+ }
87+
88+ var @enum = new EnumMetaData
89+ {
90+ Name = name
91+ } ;
92+ @enum . SetData ( useFlagsMode , size , values ) ;
93+
94+ project . AddEnum ( @enum ) ;
95+ }
96+ }
8497
85- if ( ! project . ContainsClass ( node . Uuid ) )
86- {
87- project . AddClass ( node ) ;
98+ var classes = new List < Tuple < XElement , ClassNode > > ( ) ;
8899
89- classes . Add ( Tuple . Create ( element , node ) ) ;
100+ var classesElement = document . Root . Element ( XmlClassesElement ) ;
101+ if ( classesElement != null )
102+ {
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+ }
90121 }
91122 }
92123
0 commit comments