internal void WriteCombinedBody(IndentedTextWriter2 writer, ShortTypeNameGenerator sng) { if (PredicateMethod != null) { PredicateMethod.Write(writer, sng); } FactoryObjectMethod.Write(writer, sng); FuncMethod.Write(writer, sng); if (DisposeMethod != null) { DisposeMethod.Write(writer, sng); } }
public void TryFindVirtualDispose(Search search) { var testCode = @" namespace RoslynSandbox { using System; internal class Foo : IDisposable { private bool disposed; public void Dispose() { this.Dispose(true); } protected virtual void Dispose(bool disposing) { if (this.disposed) { return; } this.disposed = true; if (disposing) { } } protected virtual void ThrowIfDisposed() { if (this.disposed) { throw new ObjectDisposedException(this.GetType().FullName); } } } }"; var syntaxTree = CSharpSyntaxTree.ParseText(testCode); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes()); var semanticModel = compilation.GetSemanticModel(syntaxTree); var method = semanticModel.GetDeclaredSymbol(syntaxTree.FindClassDeclaration("Foo")); Assert.AreEqual(true, DisposeMethod.TryFindVirtualDispose(method, compilation, search, out var match)); Assert.AreEqual("RoslynSandbox.Foo.Dispose(bool)", match.ToString()); }
public static void FindFirst(Search search) { var code = @" namespace N { using System; internal class C : IDisposable { private bool disposed; public void Dispose() { this.Dispose(true); } protected virtual void Dispose(bool disposing) { if (this.disposed) { return; } this.disposed = true; if (disposing) { } } protected virtual void ThrowIfDisposed() { if (this.disposed) { throw new ObjectDisposedException(this.GetType().FullName); } } } }"; var syntaxTree = CSharpSyntaxTree.ParseText(code); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes()); var semanticModel = compilation.GetSemanticModel(syntaxTree); var method = semanticModel.GetDeclaredSymbol(syntaxTree.FindClassDeclaration("C")); Assert.AreEqual("N.C.Dispose()", DisposeMethod.FindFirst(method, compilation, search).ToString()); }
/// <summary> /// Free up resources. Has the option to kill the external process. /// </summary> /// <param name="disposeMethod">A value indicating whether the external process should be exited politely (via a signal) or killed.</param> public void Dispose(DisposeMethod disposeMethod) { if (!disposed) { switch (disposeMethod) { case DisposeMethod.PoliteDispose: //send terminate signal. messageSender.SendMessage(new ExitMessage()); //memory cleanup pipeIn.Close(); pipeOut.Close(); break; case DisposeMethod.KillDispose: pipeIn.Close(); pipeOut.Close(); clientProcess.Kill(); break; } disposed = true; } }
public override void Dispose() => DisposeMethod?.Invoke(Object, Array.Empty <object>());