Skip to content

Commit d8e999a

Browse files
committed
Match known task types more efficiently
1 parent 5521f90 commit d8e999a

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/Menees.Analyzers/Men019SupportAsyncCancellationToken.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)