Exemple #1
0
        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());
        }
Exemple #3
0
        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());
        }
Exemple #4
0
        /// <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;
            }
        }
Exemple #5
0
 public override void Dispose() => DisposeMethod?.Invoke(Object, Array.Empty <object>());
Exemple #6
0
 /// <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;
     }
 }