public IEnumerable <MethodModification> GetDifferences(Analysis.DocumentInfo oldDocumentInfo, Analysis.DocumentInfo newDocumentInfo)
        {
            var oldDeclaredMethods = GetDeclaredMethodsAsync(oldDocumentInfo);
            var newDeclaredMethods = GetDeclaredMethodsAsync(newDocumentInfo);

            //// More async version
            //var oldDeclaredMethodsTask = GetDeclaredMethodsAsync(this.oldDocument, cancellationTokenSource.Token);
            //var newDeclaredMethodsTask = GetDeclaredMethodsAsync(this.newDocument, cancellationTokenSource.Token);

            //await Task.WhenAll(oldDeclaredMethodsTask, newDeclaredMethodsTask);
            //var oldDeclaredMethods = oldDeclaredMethodsTask.Result;
            //var newDeclaredMethods = newDeclaredMethodsTask.Result;

            return(this.GetDifferences(oldDeclaredMethods, newDeclaredMethods));
        }
        private static IEnumerable <MethodParserInfo> GetDeclaredMethodsAsync(Analysis.DocumentInfo documentInfo)
        {
            IEnumerable <MethodParserInfo> result;

            if (documentInfo == null)
            {
                result = new List <MethodParserInfo>();
            }
            else
            {
                var root          = documentInfo.SyntaxTreeRoot;
                var semanticModel = documentInfo.SemanticModel;
                var visitor       = new MethodFinder(semanticModel);

                visitor.Visit(root);
                result = visitor.DeclaredMethods.Values;
            }

            return(result);
        }