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); } } } }