public static void DisposedInExplicitImplementation() { var syntaxTree = CSharpSyntaxTree.ParseText(@" namespace N { using System; using System.IO; sealed class C : IDisposable { private readonly IDisposable stream = File.OpenRead(string.Empty); void IDisposable.Dispose() { this.stream.Dispose(); } } }"); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes()); var semanticModel = compilation.GetSemanticModel(syntaxTree); var declaration = syntaxTree.FindFieldDeclaration("stream"); var symbol = semanticModel.GetDeclaredSymbolSafe(declaration, CancellationToken.None); var field = new FieldOrPropertyAndDeclaration(symbol, declaration); Assert.AreEqual(Result.Yes, DisposableMember.IsDisposed(field, semanticModel, CancellationToken.None)); }
internal static bool IsAssignedInInitializeAndDisposedInCleanup(FieldOrPropertyAndDeclaration fieldOrProperty, SemanticModel semanticModel, CancellationToken cancellationToken) { return(IsAssignedInInitializeAndDisposedInCleanup(fieldOrProperty.FieldOrProperty, (TypeDeclarationSyntax)fieldOrProperty.Declaration.Parent, semanticModel, cancellationToken)); }
internal static Result IsDisposed(FieldOrPropertyAndDeclaration member, SemanticModel semanticModel, CancellationToken cancellationToken) { return(IsDisposed(member.FieldOrProperty, member.FieldOrProperty.ContainingType, semanticModel, cancellationToken)); }