private void DeleteMethodsIfNeeded(
            IEnumerable <string> typeMethods,
            DeletionEvaluator deletionEvaluator,
            IDocument document,
            ref CompilationUnitSyntax newDocumentRoot,
            RoslynMethodLister methodLister,
            ref int methodsDeleted)
        {
            if (typeMethods == null || _options.Act == Act.DeleteWholeTypesOnly)
            {
                return;
            }

            foreach (var method in typeMethods)
            {
                bool needToDelete = deletionEvaluator.NeedToDeleteMethod(method);
                if (needToDelete)
                {
                    methodsDeleted++;
                    if (_options.Act == Act.Delete && !_options.DryRun)
                    {
                        // Transform the syntax tree of the document and get the root of the new tree
                        newDocumentRoot = DeleteMethod(newDocumentRoot ?? (CompilationUnitSyntax)document.GetSyntaxRoot(), methodLister, deletionEvaluator, method);
                    }
                }
                else if (!deletionEvaluator.MethodFoundInWeavedLibs(method) && _options.Verbose)
                {
                    _logger.Log(string.Format("not found in dlls, skipping {0}", method), displayTime: false);
                }
                if (needToDelete || _options.Verbose)
                {
                    _logger.Log(string.Format("{0} {1}", needToDelete ? "--" : "++", method), displayTime: false);
                }
            }
        }
        private static bool NeedToDeleteWholeProperty(RoslynMethodLister methooLister, DeletionEvaluator evaluator, SyntaxNodeWrapper currentMethodNodeFromNewRoot, MethodType methodType)
        {
            var prop = (PropertyDeclarationSyntax)currentMethodNodeFromNewRoot.Node;

            if (prop.HasGetter() && prop.HasSetter())
            {
                MethodType otherAccessorType = methodType == MethodType.PropertyGetter ? MethodType.PropertySetter : MethodType.PropertyGetter;
                var        otherAccessorStr  = methooLister.GetMethodDeclarationString(new SyntaxNodeWrapper {
                    MethodType = otherAccessorType, Node = currentMethodNodeFromNewRoot.Node
                });
                bool needToDelete = evaluator.NeedToDeleteMethod(otherAccessorStr);
                return(needToDelete);
            }
            return(true);
        }