Skip to content

Commit 4c2b7e8

Browse files
committed
Simplify.
1 parent 5ea507c commit 4c2b7e8

3 files changed

Lines changed: 20 additions & 11 deletions

File tree

IDisposableAnalyzers/Analyzers/FieldAndPropertyDeclarationAnalyzer.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,24 @@ private static void HandleFieldOrProperty(SyntaxNodeAnalysisContext context, Fie
5858
{
5959
context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP008DoNotMixInjectedAndCreatedForMember, context.Node.GetLocation()));
6060
}
61-
else if (DisposableMember.IsDisposed(member, context.SemanticModel, context.CancellationToken).IsEither(Result.No, Result.AssumeNo) &&
62-
!TestFixture.IsAssignedInInitializeAndDisposedInCleanup(member, context.SemanticModel, context.CancellationToken))
61+
else if (TestFixture.IsAssignedInInitialize(member, context.SemanticModel, context.CancellationToken, out _, out var setupAttribute))
62+
{
63+
if (!DisposedInTearDown())
64+
{
65+
context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP002DisposeMember, context.Node.GetLocation()));
66+
}
67+
68+
bool DisposedInTearDown()
69+
{
70+
return TestFixture.FindTearDown(setupAttribute!, context.SemanticModel, context.CancellationToken) is { } tearDown &&
71+
DisposableMember.IsDisposed(member.FieldOrProperty, tearDown, context.SemanticModel, context.CancellationToken);
72+
}
73+
}
74+
else if (DisposableMember.IsDisposed(member, context.SemanticModel, context.CancellationToken).IsEither(Result.No, Result.AssumeNo))
6375
{
6476
context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP002DisposeMember, context.Node.GetLocation()));
6577

66-
if (!TestFixture.IsAssignedInInitialize(member, context.SemanticModel, context.CancellationToken, out _, out _) &&
67-
DisposeMethod.FindFirst(member.FieldOrProperty.ContainingType, context.Compilation, Search.TopLevel) is null)
78+
if (DisposeMethod.FindFirst(member.FieldOrProperty.ContainingType, context.Compilation, Search.TopLevel) is null)
6879
{
6980
context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP006ImplementIDisposable, member.Declaration.GetLocation()));
7081
}

IDisposableAnalyzers/CodeFixes/DisposeInTearDownFix.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected override async Task RegisterCodeFixesAsync(DocumentEditorCodeFixContex
4141
TestFixture.IsAssignedInInitialize(fieldOrProperty, classDeclaration, semanticModel, context.CancellationToken, out var assignment, out var setupAttribute) &&
4242
assignment is { Left: { } left })
4343
{
44-
if (TestFixture.TryGetTearDownMethod(setupAttribute, semanticModel, context.CancellationToken, out var tearDown))
44+
if (TestFixture.FindTearDown(setupAttribute, semanticModel, context.CancellationToken) is { } tearDown)
4545
{
4646
switch (tearDown)
4747
{

IDisposableAnalyzers/Helpers/TestFixture.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,12 @@ internal static bool IsAssignedInInitialize(FieldOrProperty fieldOrProperty, Typ
6363
return false;
6464
}
6565

66-
internal static bool TryGetTearDownMethod(AttributeSyntax setupAttribute, SemanticModel semanticModel, CancellationToken cancellationToken, [NotNullWhen(true)] out MethodDeclarationSyntax? result)
66+
internal static MethodDeclarationSyntax? FindTearDown(AttributeSyntax setupAttribute, SemanticModel semanticModel, CancellationToken cancellationToken)
6767
{
68-
result = null;
6968
var typeDeclarationSyntax = setupAttribute.FirstAncestor<TypeDeclarationSyntax>();
7069
if (typeDeclarationSyntax is null)
7170
{
72-
return false;
71+
return null;
7372
}
7473

7574
if (TearDown(semanticModel.GetTypeInfoSafe(setupAttribute, cancellationToken).Type) is { } tearDownAttributeType)
@@ -80,14 +79,13 @@ internal static bool TryGetTearDownMethod(AttributeSyntax setupAttribute, Semant
8079
{
8180
if (Attribute.TryFind(methodDeclaration, tearDownAttributeType, semanticModel, cancellationToken, out _))
8281
{
83-
result = methodDeclaration;
84-
return true;
82+
return methodDeclaration;
8583
}
8684
}
8785
}
8886
}
8987

90-
return false;
88+
return null;
9189

9290
static QualifiedType? TearDown(ITypeSymbol? initialize)
9391
{

0 commit comments

Comments
 (0)