public static void Analyze(SyntaxNodeAnalysisContext context, CompilationUnitSyntax compilationUnit)
        {
            SyntaxList <MemberDeclarationSyntax> members = compilationUnit.Members;

            if (!ContainsSingleNamespaceWithSingleNonNamespaceMember(members))
            {
                using (IEnumerator <MemberDeclarationSyntax> en = ExtractTypeDeclarationToNewDocumentRefactoring.GetNonNestedTypeDeclarations(members).GetEnumerator())
                {
                    if (en.MoveNext())
                    {
                        MemberDeclarationSyntax firstMember = en.Current;

                        if (en.MoveNext())
                        {
                            ReportDiagnostic(context, firstMember);

                            do
                            {
                                ReportDiagnostic(context, en.Current);
                            } while (en.MoveNext());
                        }
                    }
                }
            }
        }
        private static void ReportDiagnostic(SyntaxNodeAnalysisContext context, MemberDeclarationSyntax member)
        {
            SyntaxToken token = ExtractTypeDeclarationToNewDocumentRefactoring.GetIdentifier(member);

            if (!token.IsKind(SyntaxKind.None))
            {
                context.ReportDiagnostic(
                    DiagnosticDescriptors.DeclareEachTypeInSeparateFile,
                    token);
            }
        }
 private static void ComputeRefactorings(RefactoringContext context, MemberDeclarationSyntax memberDeclaration, SyntaxToken identifier)
 {
     if (identifier.Span.Contains(context.Span) &&
         memberDeclaration.IsParentKind(SyntaxKind.NamespaceDeclaration, SyntaxKind.CompilationUnit) &&
         context.IsRootCompilationUnit &&
         ExtractTypeDeclarationToNewDocumentRefactoring.GetNonNestedTypeDeclarations((CompilationUnitSyntax)context.Root).Skip(1).Any())
     {
         context.RegisterRefactoring(
             ExtractTypeDeclarationToNewDocumentRefactoring.GetTitle(identifier.ValueText),
             cancellationToken => ExtractTypeDeclarationToNewDocumentRefactoring.RefactorAsync(context.Document, memberDeclaration, cancellationToken));
     }
 }