/// <summary>
        /// 指定の<see cref="DiagnosticAnalyzer"/>でドキュメントを診断した結果を取得します。
        /// </summary>
        /// <param name="analyzer">テスト対象の<see cref="DiagnosticAnalyzer"/></param>
        /// <param name="documents">解析対象のドキュメント一覧</param>
        /// <returns>ソースコードの位置でソートされた診断結果の一覧</returns>
        protected static Diagnostic[] GetSortedDiagnosticsFromDocuments(DiagnosticAnalyzer analyzer, Document[] documents)
        {
            return documents
                .Select(document => document.Project)
                .Distinct()
                .SelectMany(project => project.GetCompilationAsync().Result.WithAnalyzers(ImmutableArray.Create(analyzer)).GetAnalyzerDiagnosticsAsync().Result)
                .Where(diag =>
                {
                    if (diag.Location == Location.None || diag.Location.IsInMetadata)
                    {
                        return true;
                    }

                    return documents
                        .Select(document => document.GetSyntaxTreeAsync().Result)
                        .Any(tree => tree == diag.Location.SourceTree);
                })
                .OrderBy(diag => diag.Location.SourceSpan.Start)
                .ToArray();
        }