private void AnalyzedInterfaceDeclaration(SyntaxNodeAnalysisContext context)
        {
            if (context.IsAutomaticallyGeneratedCode())
            {
                return;
            }

            var declaration = Cast <InterfaceDeclarationSyntax>(context.Node);

            if (!(IsExternallyVisible(declaration.Modifiers) || declaration.Modifiers.Any(SyntaxKind.PrivateKeyword)))
            {
                DiagnosticsManager.CreateExplicitAccessDiagnostic(context, declaration.Identifier.Text, declaration.GetLocation(), Rule);
            }
        }
        private void AnalyzedClassDeclaration(SyntaxNodeAnalysisContext context)
        {
            if (context.IsAutomaticallyGeneratedCode())
            {
                return;
            }

            var declaration = Cast <ClassDeclarationSyntax>(context.Node);

            if (!ModifierContains(declaration.Modifiers, new List <SyntaxKind> {
                SyntaxKind.PublicKeyword, SyntaxKind.InternalKeyword, SyntaxKind.ProtectedKeyword, SyntaxKind.PrivateKeyword
            }))
            {
                DiagnosticsManager.CreateExplicitAccessDiagnostic(context, declaration.Identifier.Text, declaration.Identifier.GetLocation(), Rule);
            }
        }
        private void AnalyzedPropertyDeclaration(SyntaxNodeAnalysisContext context)
        {
            if (context.IsAutomaticallyGeneratedCode())
            {
                return;
            }

            var declaration = Cast <PropertyDeclarationSyntax>(context.Node);

            // if this property is within an interface then we do not need to process with access qualifier check
            var interfaceDeclaration = declaration.Parent as InterfaceDeclarationSyntax;

            if (interfaceDeclaration == null && !ModifierContains(declaration.Modifiers, new List <SyntaxKind> {
                SyntaxKind.PublicKeyword, SyntaxKind.InternalKeyword, SyntaxKind.ProtectedKeyword, SyntaxKind.PrivateKeyword
            }))
            {
                DiagnosticsManager.CreateExplicitAccessDiagnostic(context, declaration.Identifier.Text, declaration.Identifier.GetLocation(), Rule);
            }
        }
        private void AnalyzedConstructorDeclaration(SyntaxNodeAnalysisContext context)
        {
            if (context.IsAutomaticallyGeneratedCode())
            {
                return;
            }

            var declaration = Cast <ConstructorDeclarationSyntax>(context.Node);

            if (!declaration.Modifiers.Any(SyntaxKind.StaticKeyword))
            {
                if (!(IsExternallyVisible(declaration.Modifiers) || ModifierContains(declaration.Modifiers, new List <SyntaxKind> {
                    SyntaxKind.PrivateKeyword
                })))
                {
                    DiagnosticsManager.CreateExplicitAccessDiagnostic(context, $"Constructor {declaration.Identifier.Text}", declaration.Identifier.GetLocation(), Rule);
                }
            }
        }