Skip to content

Commit abd92df

Browse files
committed
BUGFIX IDISP003 handle null forgiving operator.
Fix #211
1 parent 2dd5ad0 commit abd92df

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

IDisposableAnalyzers.NetCoreTests/IDISP003DisposeBeforeReassigningTests/Valid.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,29 @@ public async ValueTask DisposeAsync()
3636
await _timer.DisposeAsync();
3737
}
3838
}
39+
}";
40+
RoslynAssert.Valid(Analyzer, code);
41+
}
42+
43+
[Test]
44+
public static void NullableAnnotated()
45+
{
46+
var code = @"
47+
namespace N
48+
{
49+
using System;
50+
using System.IO;
51+
52+
class C
53+
{
54+
private IDisposable? _disposable;
55+
56+
void M()
57+
{
58+
_disposable!.Dispose();
59+
_disposable = File.OpenRead(string.Empty);
60+
}
61+
}
3962
}";
4063
RoslynAssert.Valid(Analyzer, code);
4164
}

IDisposableAnalyzers/IDisposableAnalyzers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747

4848
<ItemGroup>
4949
<PackageReference Include="Gu.Analyzers" Version="1.6.7-dev" PrivateAssets="all" />
50-
<PackageReference Include="Gu.Roslyn.Extensions" Version="0.12.6-dev" />
50+
<PackageReference Include="Gu.Roslyn.Extensions" Version="0.12.7-dev" />
5151
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.3.1" />
5252
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers" Version="2.9.8" PrivateAssets="all" />
5353
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.164" PrivateAssets="all" />

ValidCode.NetCore/Annotated.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
namespace ValidCode.NetCore
2+
{
3+
using System;
4+
5+
sealed class Annotated : IDisposable
6+
{
7+
private IDisposable? _foo;
8+
private bool _disposed;
9+
10+
public void Dispose()
11+
{
12+
if (this._disposed)
13+
{
14+
return;
15+
}
16+
17+
this._disposed = true;
18+
_foo?.Dispose();
19+
}
20+
21+
void Reassign()
22+
{
23+
_foo!.Dispose();
24+
_foo = new Disposable();
25+
}
26+
}
27+
}

ValidCode.NetCore/Disposable.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace ValidCode.NetCore
2+
{
3+
using System;
4+
5+
public sealed class Disposable : IDisposable
6+
{
7+
public void Dispose()
8+
{
9+
}
10+
}
11+
}

0 commit comments

Comments
 (0)