@@ -688,29 +688,15 @@ private static QualifiedNameSyntax Qualify(string qualification, ExpressionSynta
688688
689689 private static bool IsSubPartOfConditionalAccess ( VBasic . Syntax . MemberAccessExpressionSyntax node )
690690 {
691- SyntaxNode child = node ;
692- SyntaxNode parent = node . Parent ;
693-
694- while ( parent != null )
695- {
696- // On right hand side of a ?. conditional access
697- if ( parent is VBSyntax . ConditionalAccessExpressionSyntax cae && cae . WhenNotNull == child )
698- {
699- return true ;
700- }
701-
702- // Recurse outwards through chained accesses
703- if ( parent . IsKind ( VBasic . SyntaxKind . InvocationExpression ,
704- VBasic . SyntaxKind . SimpleMemberAccessExpression ,
705- VBasic . SyntaxKind . ParenthesizedExpression ,
706- VBasic . SyntaxKind . ConditionalAccessExpression ) )
707- {
708- child = parent ;
709- parent = parent . Parent ;
710- }
711- else
712- {
713- break ;
691+ static bool IsMemberAccessChain ( SyntaxNode exp ) =>
692+ exp ? . IsKind ( VBasic . SyntaxKind . InvocationExpression ,
693+ VBasic . SyntaxKind . SimpleMemberAccessExpression ,
694+ VBasic . SyntaxKind . ParenthesizedExpression ,
695+ VBasic . SyntaxKind . ConditionalAccessExpression ) == true ;
696+
697+ for ( SyntaxNode child = node , parent = node . Parent ; IsMemberAccessChain ( parent ) ; child = parent , parent = parent . Parent ) {
698+ if ( parent is VBSyntax . ConditionalAccessExpressionSyntax cae && cae . WhenNotNull == child ) {
699+ return true ; // On right hand side of a ?. conditional access
714700 }
715701 }
716702
0 commit comments