@@ -26,19 +26,9 @@ public override void Initialize(AnalysisContext context)
2626 private static void AnalyzeSyntax ( SyntaxNodeAnalysisContext context )
2727 {
2828 var objectCreationExpressionSyntax = ( ObjectCreationExpressionSyntax ) context . Node ;
29- var genericNameSyntax = objectCreationExpressionSyntax . Type as GenericNameSyntax ;
30- if ( genericNameSyntax == null )
31- {
32- var qualifiedNameSyntax = objectCreationExpressionSyntax . Type as QualifiedNameSyntax ;
33- if ( qualifiedNameSyntax == null )
34- return ;
3529
36- genericNameSyntax = qualifiedNameSyntax . Right as GenericNameSyntax ;
37- if ( genericNameSyntax == null )
38- return ;
39- }
40-
41- if ( string . Equals ( genericNameSyntax . Identifier . Text , TaskCompletionSourceName ) == false )
30+ if ( IsGenericTaskCompletionSourceCreation ( objectCreationExpressionSyntax ) == false &&
31+ IsNonGenericTaskCompletionSourceCreation ( objectCreationExpressionSyntax ) == false )
4232 return ;
4333
4434 var arguments = objectCreationExpressionSyntax . ArgumentList ;
@@ -51,6 +41,31 @@ private static void AnalyzeSyntax(SyntaxNodeAnalysisContext context)
5141 ReportDiagnostic ( context , objectCreationExpressionSyntax ) ;
5242 }
5343
44+ private static bool IsGenericTaskCompletionSourceCreation ( ObjectCreationExpressionSyntax objectCreationExpressionSyntax ) =>
45+ IsTaskCompletionSource < GenericNameSyntax > ( objectCreationExpressionSyntax ) ;
46+
47+ private static bool IsNonGenericTaskCompletionSourceCreation ( ObjectCreationExpressionSyntax objectCreationExpressionSyntax ) =>
48+ IsTaskCompletionSource < IdentifierNameSyntax > ( objectCreationExpressionSyntax ) ;
49+
50+ private static bool IsTaskCompletionSource < TNameSyntax > ( ObjectCreationExpressionSyntax objectCreationExpressionSyntax )
51+ where TNameSyntax : SimpleNameSyntax
52+ {
53+ var nameSyntax = objectCreationExpressionSyntax . Type as TNameSyntax ;
54+
55+ if ( nameSyntax == null )
56+ {
57+ var qualifiedNameSyntax = objectCreationExpressionSyntax . Type as QualifiedNameSyntax ;
58+ if ( qualifiedNameSyntax == null )
59+ return false ;
60+
61+ nameSyntax = qualifiedNameSyntax . Right as TNameSyntax ;
62+ if ( nameSyntax == null )
63+ return false ;
64+ }
65+
66+ return string . Equals ( nameSyntax . Identifier . Text , TaskCompletionSourceName ) ;
67+ }
68+
5469 private static bool IsRunContinuationsAsynchronously ( ExpressionSyntax expression )
5570 {
5671 var memberAccessExpressionSyntax = expression as MemberAccessExpressionSyntax ;
0 commit comments