@@ -37,6 +37,8 @@ public PropertyAndEventBackingFieldLookup(MetadataReader metadata)
3737
3838 var nameToFieldMap = new MultiDictionary < string , FieldDefinitionHandle > ( ) ;
3939
40+ HashSet < string > eventNames = new ( ) ;
41+
4042 foreach ( var tdh in metadata . TypeDefinitions )
4143 {
4244 var type = metadata . GetTypeDefinition ( tdh ) ;
@@ -72,6 +74,16 @@ public PropertyAndEventBackingFieldLookup(MetadataReader metadata)
7274 }
7375 }
7476
77+ // first get all names of events defined, so that we can make sure we don't accidentally
78+ // associate the wrong backing field with the event, in case there is an event called "Something"
79+ // without a backing field (i.e., custom event) as well as an auto/field event called "SomethingEvent"
80+ // declared in the same type.
81+ foreach ( var edh in type . GetEvents ( ) )
82+ {
83+ var ev = metadata . GetEventDefinition ( edh ) ;
84+ eventNames . Add ( metadata . GetString ( ev . Name ) ) ;
85+ }
86+
7587 foreach ( var edh in type . GetEvents ( ) )
7688 {
7789 var ev = metadata . GetEventDefinition ( edh ) ;
@@ -83,15 +95,20 @@ public PropertyAndEventBackingFieldLookup(MetadataReader metadata)
8395 eventLookup [ fieldHandle ] = edh ;
8496 }
8597 }
86- else if ( nameToFieldMap . TryGetValues ( $ " { name } Event" , out fieldHandles ) )
98+ else
8799 {
88- foreach ( var fieldHandle in fieldHandles )
100+ var nameWithSuffix = $ "{ name } Event";
101+ if ( ! eventNames . Contains ( nameWithSuffix ) && nameToFieldMap . TryGetValues ( nameWithSuffix , out fieldHandles ) )
89102 {
90- eventLookup [ fieldHandle ] = edh ;
103+ foreach ( var fieldHandle in fieldHandles )
104+ {
105+ eventLookup [ fieldHandle ] = edh ;
106+ }
91107 }
92108 }
93109 }
94110
111+ eventNames . Clear ( ) ;
95112 nameToFieldMap . Clear ( ) ;
96113 }
97114 }
0 commit comments