@@ -40,22 +40,28 @@ public override void Initialize(AnalysisContext context)
4040
4141 context . RegisterCompilationStartAction ( context =>
4242 {
43- if ( context . Compilation . TryGetOrCreateTypeByMetadataName ( WellKnownTypeNames . SystemIDisposable , out INamedTypeSymbol ? idisposableSymbol ) )
43+ if ( context . Compilation . TryGetOrCreateTypeByMetadataName ( WellKnownTypeNames . SystemIDisposable , out INamedTypeSymbol ? idisposableSymbol ) &&
44+ context . Compilation . TryGetOrCreateTypeByMetadataName ( WellKnownTypeNames . MicrosoftVisualStudioTestToolsUnitTestingTestClassAttribute , out INamedTypeSymbol ? testClassAttributeSymbol ) )
4445 {
4546 INamedTypeSymbol ? iasyncDisposableSymbol = context . Compilation . GetOrCreateTypeByMetadataName ( WellKnownTypeNames . SystemIAsyncDisposable ) ;
4647 INamedTypeSymbol ? valueTaskSymbol = context . Compilation . GetOrCreateTypeByMetadataName ( WellKnownTypeNames . SystemThreadingTasksValueTask ) ;
47- context . RegisterSymbolAction ( context => AnalyzeSymbol ( context , idisposableSymbol , iasyncDisposableSymbol , valueTaskSymbol ) , SymbolKind . Method ) ;
48+ context . RegisterSymbolAction ( context => AnalyzeSymbol ( context , testClassAttributeSymbol , idisposableSymbol , iasyncDisposableSymbol , valueTaskSymbol ) , SymbolKind . Method ) ;
4849 }
4950 } ) ;
5051 }
5152
52- private static void AnalyzeSymbol ( SymbolAnalysisContext context , INamedTypeSymbol idisposableSymbol , INamedTypeSymbol ? iasyncDisposableSymbol ,
53+ private static void AnalyzeSymbol (
54+ SymbolAnalysisContext context ,
55+ INamedTypeSymbol testClassAttributeSymbol ,
56+ INamedTypeSymbol idisposableSymbol ,
57+ INamedTypeSymbol ? iasyncDisposableSymbol ,
5358 INamedTypeSymbol ? valueTaskSymbol )
5459 {
5560 var methodSymbol = ( IMethodSymbol ) context . Symbol ;
5661
57- if ( methodSymbol . IsAsyncDisposeImplementation ( iasyncDisposableSymbol , valueTaskSymbol )
58- || methodSymbol . IsDisposeImplementation ( idisposableSymbol ) )
62+ if ( methodSymbol . ContainingType . GetAttributes ( ) . Any ( x => x . AttributeClass . Inherits ( testClassAttributeSymbol ) ) &&
63+ ( methodSymbol . IsAsyncDisposeImplementation ( iasyncDisposableSymbol , valueTaskSymbol )
64+ || methodSymbol . IsDisposeImplementation ( idisposableSymbol ) ) )
5965 {
6066 context . ReportDiagnostic ( methodSymbol . CreateDiagnostic ( Rule ) ) ;
6167 }
0 commit comments