@@ -200,40 +200,48 @@ private async Task<IEnumerable<MemberDeclarationSyntax>> ConvertMembersAsync(VBS
200200 var methodsWithHandles = MethodsWithHandles . Create ( GetMethodWithHandles ( parentType ) ) ;
201201
202202 if ( methodsWithHandles . Any ( ) ) _extraUsingDirectives . Add ( "System.Runtime.CompilerServices" ) ; //For MethodImplOptions.Synchronized
203+
204+ _typeContext . Push ( methodsWithHandles , additionalInitializers ) ;
205+ try {
206+ var convertedMembers = ( await members . SelectManyAsync ( async member =>
207+ ( await ConvertMemberAsync ( member ) ) . Yield ( ) . Concat ( GetAdditionalDeclarations ( member ) ) )
208+ ) ;
203209
204- IEnumerable < MemberDeclarationSyntax > directlyConvertedMembers = await GetDirectlyConvertedMembers ( additionalInitializers , methodsWithHandles ) ;
205-
206- var requiresInitializeComponent = namedTypeSymbol . IsDesignerGeneratedTypeWithInitializeComponent ( _vbCompilation ) ;
207-
208- if ( shouldAddTypeWideInitToThisPart ) {
209- var otherPartsOfType = GetAllPartsOfType ( parentType , namedTypeSymbol ) . ToArray ( ) ;
210- var constructorFieldInitializersFromOtherParts = otherPartsOfType
211- . Where ( t => ( ! Equals ( t . Type . SyntaxTree . FilePath , _semanticModel . SyntaxTree . FilePath ) || ! t . Type . Span . Equals ( parentType . Span ) ) )
212- . SelectMany ( r => GetFieldsIdentifiersWithInitializer ( r . Type , r . SemanticModel ) ) ;
213- additionalInitializers . AdditionalInstanceInitializers . AddRange ( constructorFieldInitializersFromOtherParts ) ;
214- if ( requiresInitializeComponent ) {
215- // Constructor event handlers not required since they'll be inside InitializeComponent - see other use of IsDesignerGeneratedTypeWithInitializeComponent
216- directlyConvertedMembers = directlyConvertedMembers
217- . Concat ( methodsWithHandles . CreateDelegatingMethodsRequiredByInitializeComponent ( ) ) ;
218- additionalInitializers . AdditionalInstanceInitializers
219- . AddRange ( CommonConversions . WinformsConversions . GetNameAssignments ( methodsWithHandles , otherPartsOfType ) ) ;
220- } else {
221- additionalInitializers . AdditionalInstanceInitializers . AddRange ( methodsWithHandles . GetConstructorEventHandlers ( ) ) ;
222- }
210+ return WithAdditionalMembers ( convertedMembers ) . ToArray ( ) ; //Ensure evaluated before popping type context
211+ } finally {
212+ _typeContext . Pop ( ) ;
223213 }
224214
225- return additionalInitializers . WithAdditionalInitializers ( namedTypeSymbol , directlyConvertedMembers . ToList ( ) , CommonConversions . ConvertIdentifier ( parentType . BlockStatement . Identifier ) , requiresInitializeComponent ) ;
226-
227- async Task < MemberDeclarationSyntax [ ] > GetDirectlyConvertedMembers ( AdditionalInitializers additionalInitializers , MethodsWithHandles methodsWithHandles )
215+ IEnumerable < MemberDeclarationSyntax > WithAdditionalMembers ( IEnumerable < MemberDeclarationSyntax > convertedMembers )
228216 {
229- _typeContext . Push ( methodsWithHandles , additionalInitializers ) ;
230- try {
231- var convertedMembers = await members . SelectManyAsync ( async member =>
232- new [ ] { await ConvertMemberAsync ( member ) } . Concat ( GetAdditionalDeclarations ( member ) ) ) ;
233- return convertedMembers . ToArray ( ) ;
234- } finally {
235- _typeContext . Pop ( ) ;
217+ var requiresInitializeComponent = namedTypeSymbol . IsDesignerGeneratedTypeWithInitializeComponent ( _vbCompilation ) ;
218+
219+ if ( shouldAddTypeWideInitToThisPart )
220+ {
221+ var otherPartsOfType = GetAllPartsOfType ( parentType , namedTypeSymbol ) . ToArray ( ) ;
222+ var constructorFieldInitializersFromOtherParts = otherPartsOfType
223+ . Where ( t => ( ! Equals ( t . Type . SyntaxTree . FilePath , _semanticModel . SyntaxTree . FilePath ) ||
224+ ! t . Type . Span . Equals ( parentType . Span ) ) )
225+ . SelectMany ( r => GetFieldsIdentifiersWithInitializer ( r . Type , r . SemanticModel ) ) ;
226+ additionalInitializers . AdditionalInstanceInitializers . AddRange ( constructorFieldInitializersFromOtherParts ) ;
227+ if ( requiresInitializeComponent )
228+ {
229+ // Constructor event handlers not required since they'll be inside InitializeComponent - see other use of IsDesignerGeneratedTypeWithInitializeComponent
230+ convertedMembers = convertedMembers
231+ . Concat ( methodsWithHandles . CreateDelegatingMethodsRequiredByInitializeComponent ( ) ) ;
232+ additionalInitializers . AdditionalInstanceInitializers
233+ . AddRange (
234+ CommonConversions . WinformsConversions . GetNameAssignments ( otherPartsOfType ) ) ;
235+ }
236+ else
237+ {
238+ additionalInitializers . AdditionalInstanceInitializers . AddRange ( methodsWithHandles
239+ . GetConstructorEventHandlers ( ) ) ;
240+ }
236241 }
242+
243+ return additionalInitializers . WithAdditionalInitializers ( namedTypeSymbol , convertedMembers . ToList ( ) ,
244+ CommonConversions . ConvertIdentifier ( parentType . BlockStatement . Identifier ) , requiresInitializeComponent ) ;
237245 }
238246 }
239247
0 commit comments