@@ -59,13 +59,15 @@ public override void Initialize(AnalysisContext context)
5959 private sealed class NestedAnalyzer (
6060 Analyzer caller ,
6161 INamedTypeSymbol cancellationTokenType ,
62- INamedTypeSymbol [ ] knownTaskTypes )
62+ INamedTypeSymbol [ ] fixedTaskTypes ,
63+ INamedTypeSymbol [ ] genericTaskTypes )
6364 {
6465 #region Private Data Members
6566
6667 private readonly Analyzer callingAnalyzer = caller ;
6768 private readonly INamedTypeSymbol cancellationTokenType = cancellationTokenType ;
68- private readonly INamedTypeSymbol [ ] knownTaskTypes = knownTaskTypes ;
69+ private readonly INamedTypeSymbol [ ] fixedTaskTypes = fixedTaskTypes ;
70+ private readonly INamedTypeSymbol [ ] genericTaskTypes = genericTaskTypes ;
6971
7072 #endregion
7173
@@ -80,7 +82,7 @@ private sealed class NestedAnalyzer(
8082 INamedTypeSymbol ? valueTask1Type = compilation . GetTypeByMetadataName ( typeof ( ValueTask < > ) . FullName ) ;
8183
8284 NestedAnalyzer ? result = cancellationTokenType != null && taskType != null && task1Type != null && valueTaskType != null && valueTask1Type != null
83- ? new ( caller , cancellationTokenType , [ taskType , task1Type , valueTaskType , valueTask1Type ] )
85+ ? new ( caller , cancellationTokenType , [ taskType , valueTaskType ] , [ task1Type , valueTask1Type ] )
8486 : null ;
8587 return result ;
8688 }
@@ -160,7 +162,9 @@ private bool IsAwaitable(ITypeSymbol type)
160162 {
161163 bool result = false ;
162164
163- if ( this . knownTaskTypes . Contains ( type , SymbolEqualityComparer . Default ) )
165+ if ( this . fixedTaskTypes . Contains ( type , SymbolEqualityComparer . Default )
166+ || ( type is INamedTypeSymbol { IsGenericType : true } namedType
167+ && this . genericTaskTypes . Contains ( namedType . OriginalDefinition , SymbolEqualityComparer . Default ) ) )
164168 {
165169 result = true ;
166170 }
0 commit comments