@@ -21,30 +21,26 @@ internal static bool TryGetDisposedRootMember(InvocationExpressionSyntax dispose
2121 if ( MemberPath . TryFindRoot ( disposeCall , out var rootIdentifier ) &&
2222 ( disposedMember = rootIdentifier . Parent as IdentifierNameSyntax ) is { } )
2323 {
24- var property = semanticModel . GetSymbolSafe ( disposedMember , cancellationToken ) as IPropertySymbol ;
25- if ( property == null ||
26- property . IsAutoProperty ( ) )
24+ switch ( semanticModel . GetSymbolSafe ( disposedMember , cancellationToken ) )
2725 {
28- return true ;
29- }
26+ case IPropertySymbol { GetMethod : null } :
27+ return false ;
28+ case IPropertySymbol { GetMethod : { DeclaringSyntaxReferences : { Length : 1 } } getMethod }
29+ when getMethod . TrySingleDeclaration ( cancellationToken , out SyntaxNode ? getterOrExpressionBody ) :
30+ {
31+ using var pooled = ReturnValueWalker . Borrow ( getterOrExpressionBody , ReturnValueSearch . TopLevel , semanticModel , cancellationToken ) ;
32+ if ( pooled . Count == 0 )
33+ {
34+ return true ;
35+ }
3036
31- if ( property . GetMethod == null )
32- {
33- return false ;
34- }
37+ return pooled . TrySingle ( out var expression ) &&
38+ MemberPath . TryFindRoot ( expression , out rootIdentifier ) &&
39+ ( disposedMember = rootIdentifier . Parent as IdentifierNameSyntax ) is { } ;
40+ }
3541
36- foreach ( var reference in property . GetMethod . DeclaringSyntaxReferences )
37- {
38- var node = reference . GetSyntax ( cancellationToken ) ;
39- using var pooled = ReturnValueWalker . Borrow ( node , ReturnValueSearch . TopLevel , semanticModel , cancellationToken ) ;
40- if ( pooled . Count == 0 )
41- {
42+ default :
4243 return true ;
43- }
44-
45- return pooled . TrySingle ( out var expression ) &&
46- MemberPath . TryFindRoot ( expression , out rootIdentifier ) &&
47- ( disposedMember = rootIdentifier . Parent as IdentifierNameSyntax ) is { } ;
4844 }
4945 }
5046
0 commit comments