Skip to content

Commit 70ad845

Browse files
committed
Update dependencies.
1 parent 5d95978 commit 70ad845

5 files changed

Lines changed: 32 additions & 14 deletions

File tree

IDisposableAnalyzers/Analyzers/ReturnValueAnalyzer.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ private static void HandleReturnValue(SyntaxNodeAnalysisContext context, Express
8787
}
8888
}
8989
}
90-
else if (returnValue is InvocationExpressionSyntax { ArgumentList: { Arguments: { } arguments } } invocation)
90+
else if (returnValue is InvocationExpressionSyntax { ArgumentList: { Arguments: { } arguments } } invocation &&
91+
context.ContainingSymbol is { ContainingType: { } containingType })
9192
{
9293
foreach (var argument in arguments)
9394
{
@@ -98,7 +99,7 @@ private static void HandleReturnValue(SyntaxNodeAnalysisContext context, Express
9899
if (IsInUsing(argumentSymbol, context.CancellationToken) ||
99100
Disposable.IsDisposedBefore(argumentSymbol, expression, context.SemanticModel, context.CancellationToken))
100101
{
101-
if (IsLazyEnumerable(invocation, context.SemanticModel, context.CancellationToken))
102+
if (IsLazyEnumerable(invocation, containingType, context.SemanticModel, context.CancellationToken))
102103
{
103104
context.ReportDiagnostic(Diagnostic.Create(Descriptors.IDISP011DontReturnDisposed, argument.GetLocation()));
104105
}
@@ -144,9 +145,9 @@ InvocationExpressionSyntax invocation
144145
};
145146
}
146147

147-
private static bool IsLazyEnumerable(InvocationExpressionSyntax invocation, SemanticModel semanticModel, CancellationToken cancellationToken)
148+
private static bool IsLazyEnumerable(InvocationExpressionSyntax invocation, INamedTypeSymbol containingType, SemanticModel semanticModel, CancellationToken cancellationToken)
148149
{
149-
using var recursion = Recursion.Borrow(invocation, semanticModel, cancellationToken);
150+
using var recursion = Recursion.Borrow(containingType, semanticModel, cancellationToken);
150151
return IsLazyEnumerable(invocation, recursion);
151152
}
152153

IDisposableAnalyzers/Helpers/Walkers/DisposableWalker.Assigns.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ internal sealed partial class DisposableWalker
99
{
1010
internal static bool Assigns(LocalOrParameter localOrParameter, SemanticModel semanticModel, CancellationToken cancellationToken, out FieldOrProperty first)
1111
{
12-
if (localOrParameter.TryGetScope(cancellationToken, out var scope))
12+
if (localOrParameter.TryGetScope(cancellationToken, out var scope) &&
13+
localOrParameter is { ContainingSymbol: { ContainingType: { } containingType } })
1314
{
14-
using var recursion = Recursion.Borrow(scope, semanticModel, cancellationToken);
15+
using var recursion = Recursion.Borrow(containingType, semanticModel, cancellationToken);
1516
return Assigns(new Target<SyntaxNode, ISymbol, SyntaxNode>(null!, localOrParameter.Symbol, scope), recursion, out first);
1617
}
1718

@@ -20,8 +21,14 @@ internal static bool Assigns(LocalOrParameter localOrParameter, SemanticModel se
2021

2122
internal static bool Assigns(ExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken, out FieldOrProperty first)
2223
{
23-
using var recursion = Recursion.Borrow(candidate, semanticModel, cancellationToken);
24-
return Assigns(candidate, recursion, out first);
24+
if (candidate.TryFirstAncestor(out TypeDeclarationSyntax? containingTypeDeclaration) &&
25+
semanticModel.TryGetNamedType(containingTypeDeclaration, cancellationToken, out var containingType))
26+
{
27+
using var recursion = Recursion.Borrow(containingType, semanticModel, cancellationToken);
28+
return Assigns(candidate, recursion, out first);
29+
}
30+
31+
return false;
2532
}
2633

2734
private static bool Assigns<TSource, TSymbol, TNode>(Target<TSource, TSymbol, TNode> target, Recursion recursion, out FieldOrProperty fieldOrProperty)

IDisposableAnalyzers/Helpers/Walkers/DisposableWalker.DisposedByReturnValue.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@ internal sealed partial class DisposableWalker
1111
{
1212
internal static bool DisposedByReturnValue(ArgumentSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken, [NotNullWhen(true)] out ExpressionSyntax? creation)
1313
{
14-
using var recursion = Recursion.Borrow(candidate, semanticModel, cancellationToken);
15-
if (recursion.Target(candidate) is { } target)
14+
if (candidate.TryFirstAncestor(out TypeDeclarationSyntax? containingTypeDeclaration) &&
15+
semanticModel.TryGetNamedType(containingTypeDeclaration, cancellationToken, out var containingType))
1616
{
17-
return DisposedByReturnValue(target, recursion, out creation);
17+
using var recursion = Recursion.Borrow(containingType, semanticModel, cancellationToken);
18+
if (recursion.Target(candidate) is { } target)
19+
{
20+
return DisposedByReturnValue(target, recursion, out creation);
21+
}
1822
}
1923

2024
creation = null;

IDisposableAnalyzers/Helpers/Walkers/DisposableWalker.Ignores.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,14 @@ internal sealed partial class DisposableWalker
1111
{
1212
internal static bool Ignores(ExpressionSyntax candidate, SemanticModel semanticModel, CancellationToken cancellationToken)
1313
{
14-
using var recursion = Recursion.Borrow(candidate, semanticModel, cancellationToken);
15-
return Ignores(candidate, recursion);
14+
if (candidate.TryFirstAncestor(out TypeDeclarationSyntax? containingTypeDeclaration) &&
15+
semanticModel.TryGetNamedType(containingTypeDeclaration, cancellationToken, out var containingType))
16+
{
17+
using var recursion = Recursion.Borrow(containingType, semanticModel, cancellationToken);
18+
return Ignores(candidate, recursion);
19+
}
20+
21+
return false;
1622
}
1723

1824
private static bool Ignores(ExpressionSyntax candidate, Recursion recursion)

IDisposableAnalyzers/IDisposableAnalyzers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ BUGFIX IDISP025 seal disposable.</Description>
4444

4545
<ItemGroup>
4646
<PackageReference Include="Gu.Analyzers" Version="1.6.6.6-dev" PrivateAssets="all" />
47-
<PackageReference Include="Gu.Roslyn.Extensions" Version="0.12.1-dev" />
47+
<PackageReference Include="Gu.Roslyn.Extensions" Version="0.12.2-dev" />
4848
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.3.1" />
4949
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="all" />
5050
<PackageDownload Include="Microsoft.NETCore.App.Ref" Version="[$(AnnotatedReferenceAssemblyVersion)]" />

0 commit comments

Comments
 (0)