1919using System . Collections . Generic ;
2020using System . Reflection . Metadata ;
2121
22+ using ICSharpCode . Decompiler . Util ;
23+
2224namespace ICSharpCode . Decompiler . Metadata
2325{
2426 class PropertyAndEventBackingFieldLookup
@@ -33,7 +35,7 @@ public PropertyAndEventBackingFieldLookup(MetadataReader metadata)
3335 {
3436 this . metadata = metadata ;
3537
36- var nameToFieldMap = new Dictionary < string , FieldDefinitionHandle > ( ) ;
38+ var nameToFieldMap = new MultiDictionary < string , FieldDefinitionHandle > ( ) ;
3739
3840 foreach ( var tdh in metadata . TypeDefinitions )
3941 {
@@ -51,28 +53,42 @@ public PropertyAndEventBackingFieldLookup(MetadataReader metadata)
5153 var property = metadata . GetPropertyDefinition ( pdh ) ;
5254 var name = metadata . GetString ( property . Name ) ;
5355 // default C# property backing field name is "<PropertyName>k__BackingField"
54- if ( nameToFieldMap . TryGetValue ( $ "<{ name } >k__BackingField", out var fieldHandle ) )
56+ if ( nameToFieldMap . TryGetValues ( $ "<{ name } >k__BackingField", out var fieldHandles ) )
5557 {
56- propertyLookup [ fieldHandle ] = pdh ;
58+ foreach ( var fieldHandle in fieldHandles )
59+ {
60+ propertyLookup [ fieldHandle ] = pdh ;
61+ }
5762 }
58- else if ( nameToFieldMap . TryGetValue ( $ "_{ name } ", out fieldHandle )
59- && fieldHandle . IsCompilerGenerated ( metadata ) )
63+ else if ( nameToFieldMap . TryGetValues ( $ "_{ name } ", out fieldHandles ) )
6064 {
61- propertyLookup [ fieldHandle ] = pdh ;
65+ foreach ( var fieldHandle in fieldHandles )
66+ {
67+ if ( fieldHandle . IsCompilerGenerated ( metadata ) )
68+ {
69+ propertyLookup [ fieldHandle ] = pdh ;
70+ }
71+ }
6272 }
6373 }
6474
6575 foreach ( var edh in type . GetEvents ( ) )
6676 {
6777 var ev = metadata . GetEventDefinition ( edh ) ;
6878 var name = metadata . GetString ( ev . Name ) ;
69- if ( nameToFieldMap . TryGetValue ( name , out var fieldHandle ) )
79+ if ( nameToFieldMap . TryGetValues ( name , out var fieldHandles ) )
7080 {
71- eventLookup [ fieldHandle ] = edh ;
81+ foreach ( var fieldHandle in fieldHandles )
82+ {
83+ eventLookup [ fieldHandle ] = edh ;
84+ }
7285 }
73- else if ( nameToFieldMap . TryGetValue ( $ "{ name } Event", out fieldHandle ) )
86+ else if ( nameToFieldMap . TryGetValues ( $ "{ name } Event", out fieldHandles ) )
7487 {
75- eventLookup [ fieldHandle ] = edh ;
88+ foreach ( var fieldHandle in fieldHandles )
89+ {
90+ eventLookup [ fieldHandle ] = edh ;
91+ }
7692 }
7793 }
7894
0 commit comments