private void AnalyzeEnumDeclaration(SyntaxNodeAnalysisContext context)
        {
            var enumDeclaration = (EnumDeclarationSyntax)context.Node;

            if (!enumDeclaration.AttributeLists.Any())
            {
                return;
            }

            EnumFlagValueStyle style = context.GetEnumFlagValueStyle();

            if (style == EnumFlagValueStyle.None)
            {
                return;
            }

            if (context.SemanticModel.GetDeclaredSymbol(enumDeclaration, context.CancellationToken) is not INamedTypeSymbol typeSymbol)
            {
                return;
            }

            if (typeSymbol.TypeKind != TypeKind.Enum)
            {
                return;
            }

            if (!typeSymbol.HasAttribute(MetadataNames.System_FlagsAttribute))
            {
                return;
            }

            foreach (EnumMemberDeclarationSyntax member in enumDeclaration.Members)
            {
                ExpressionSyntax value = member.EqualsValue?.Value.WalkDownParentheses();

                if (value != null)
                {
                    if (value.IsKind(SyntaxKind.NumericLiteralExpression))
                    {
                        var    literalExpression = (LiteralExpressionSyntax)value;
                        string text = literalExpression.Token.Text;

                        if (style == EnumFlagValueStyle.DecimalNumber)
                        {
                            if (text.StartsWith("0b", StringComparison.OrdinalIgnoreCase) ||
                                text.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
                            {
                                Analyze(context, member, value, style);
                            }
                        }
                        else if (style == EnumFlagValueStyle.ShiftOperator)
                        {
                            Analyze(context, member, value, style);
                        }
                    }
                    else if (value.IsKind(SyntaxKind.LeftShiftExpression) &&
                             style == EnumFlagValueStyle.DecimalNumber)
                    {
                        Analyze(context, member, value, style);
                    }
                }
            }
        }