@@ -35,24 +35,24 @@ public MethodWithHandles(SyntaxGenerator csSyntaxGenerator,
3535 public static IEnumerable < MemberDeclarationSyntax > GetDeclarationsForFieldBackedProperty (
3636 VariableDeclarationSyntax decl , SyntaxTokenList convertedModifiers ,
3737 SyntaxList < AttributeListSyntax > attributes ,
38- List < MethodWithHandles > methodsWithHandles )
38+ IReadOnlyCollection < MethodWithHandles > methodsWithHandles )
3939 {
4040 // It should be safe to use the underscore name since in VB the compiler generates a backing field with that name, and errors if you try to clash with it
41- var propertyToBackingFieldMapping = decl . Variables . Select ( v => v . Identifier . Text )
42- . ToDictionary ( n => n , n => SyntaxFactory . Identifier ( "_" + n ) ) ;
43- var fieldDecl = decl . WithVariables ( SyntaxFactory . SeparatedList ( decl . Variables . Select ( v =>
44- v . WithIdentifier ( propertyToBackingFieldMapping [ v . Identifier . Text ] )
45- ) ) ) ;
41+ var variablesToMap = decl . Variables
42+ . Select ( v => ( Variable : v , HasEvents : true , NewId : SyntaxFactory . Identifier ( "_" + v . Identifier . Text ) ) ) . ToArray ( ) ;
43+ var fieldDecl = decl . WithVariables ( SyntaxFactory . SeparatedList (
44+ variablesToMap . Select ( m => m . Variable . WithIdentifier ( m . NewId ) )
45+ ) ) ;
4646 var fieldModifiers = SyntaxFactory . TokenList ( new [ ] { SyntaxFactory . Token ( SyntaxKind . PrivateKeyword ) } . Concat ( convertedModifiers . Where ( m => ! m . IsCsVisibility ( false , false ) ) ) ) ;
4747 yield return SyntaxFactory . FieldDeclaration ( attributes , fieldModifiers , fieldDecl ) ;
48- foreach ( var variable in decl . Variables ) {
48+ foreach ( var mapping in variablesToMap ) {
4949 yield return GetDeclarationsForFieldBackedProperty ( methodsWithHandles , attributes , convertedModifiers ,
50- decl . Type , variable . Identifier ,
51- propertyToBackingFieldMapping [ variable . Identifier . Text ] ) ;
50+ decl . Type , mapping . Variable . Identifier ,
51+ mapping . NewId ) ;
5252 }
5353 }
5454
55- private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty ( List < MethodWithHandles > methods ,
55+ private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty ( IReadOnlyCollection < MethodWithHandles > methods ,
5656 SyntaxList < AttributeListSyntax > attributes , SyntaxTokenList convertedModifiers , TypeSyntax typeSyntax ,
5757 SyntaxToken propertyIdentifier , SyntaxToken fieldIdentifier )
5858 {
@@ -75,7 +75,7 @@ private static PropertyDeclarationSyntax GetDeclarationsForFieldBackedProperty(L
7575
7676 private static StatementSyntax [ ] CreateSetterBlockToUpdateHandles ( string propertyIdentifier ,
7777 IdentifierNameSyntax fieldIdSyntax ,
78- List < MethodWithHandles > methods )
78+ IReadOnlyCollection < MethodWithHandles > methods )
7979 {
8080 var assignBackingField = SyntaxFactory . ExpressionStatement ( SyntaxFactory . AssignmentExpression (
8181 SyntaxKind . SimpleAssignmentExpression , fieldIdSyntax ,
@@ -91,9 +91,9 @@ private static StatementSyntax[] CreateSetterBlockToUpdateHandles(string propert
9191 } ;
9292 }
9393
94- public static IEnumerable < StatementSyntax > CreateHandlesUpdaters ( string propertyIdentifier ,
94+ private static IEnumerable < StatementSyntax > CreateHandlesUpdaters ( string propertyIdentifier ,
9595 IdentifierNameSyntax fieldIdSyntax ,
96- List < MethodWithHandles > handlesSpecs ,
96+ IReadOnlyCollection < MethodWithHandles > handlesSpecs ,
9797 SyntaxKind assignmentExpressionKind )
9898 {
9999 return handlesSpecs . SelectMany ( hs => hs . CreateHandlesUpdater ( propertyIdentifier , fieldIdSyntax , assignmentExpressionKind ) ) ;
@@ -108,11 +108,16 @@ public IEnumerable<StatementSyntax> GetPostInitializationStatements(string prope
108108 private IEnumerable < StatementSyntax > CreateHandlesUpdater ( string propertyIdentifier ,
109109 IdentifierNameSyntax fieldIdSyntax , SyntaxKind assignmentExpressionKind , bool requiresNewDelegate = false )
110110 {
111- return HandledPropertyEventCSharpIds
112- . Where ( h => h . EventContainerName . Text == propertyIdentifier )
111+ return GetPropertyEvents ( propertyIdentifier )
113112 . Select ( e => CreateHandlesUpdater ( fieldIdSyntax , e , assignmentExpressionKind , requiresNewDelegate ) ) ;
114113 }
115114
115+ private IEnumerable < ( SyntaxToken EventContainerName , SyntaxToken EventSymbolName , IEventSymbol Event , int ParametersToDiscard ) > GetPropertyEvents ( string propertyIdentifier )
116+ {
117+ return HandledPropertyEventCSharpIds
118+ . Where ( h => h . EventContainerName . Text == propertyIdentifier ) ;
119+ }
120+
116121 /// <summary>Use instead of <see cref="GetConstructorEventHandlers"/> for DesignerGenerated classes: https://github.com/icsharpcode/CodeConverter/issues/550</summary>
117122 public IEnumerable < StatementSyntax > GetInitializeComponentClassEventHandlers ( )
118123 {
0 commit comments