private static void AnalyzeNode()

in src/Analyzers/ExpressionTypeUsed.Analyzer.cs [213:248]


    private static void AnalyzeNode(SyntaxNodeAnalysisContext context)
    {
        var node = context.Node;

        var underUnderExpressionMethod = node.IsPartOfPolicyExpressionMethod(context.SemanticModel);
        var underUnderExpressionLambda = node.IsPartOfPolicyExpressionDelegate(context.SemanticModel);

        if (!underUnderExpressionMethod && !underUnderExpressionLambda)
        {
            return;
        }

        var nodeSymbol = context.SemanticModel.GetSymbolInfo(node).Symbol;
        if (nodeSymbol == null)
        {
            return;
        }

        var symbol = nodeSymbol.ContainingType;
        var typeName = (symbol.IsGenericType ? symbol.OriginalDefinition : symbol)?.ToFullyQualifiedString() ?? "";
        if (AllowedTypes.Contains(typeName))
        {
            if (AllowedInTypes.TryGetValue(typeName, out var allowed) && !allowed.Contains(nodeSymbol.Name))
            {
                context.ReportDiagnostic(Diagnostic.Create(Rules.TypeUsed.DisallowedMember, node.GetLocation(), nodeSymbol.Name));
            }
            else if (DisallowedInTypes.TryGetValue(typeName, out var disallowed) && disallowed.Contains(nodeSymbol.Name))
            {
                context.ReportDiagnostic(Diagnostic.Create(Rules.TypeUsed.DisallowedMember, node.GetLocation(), nodeSymbol.Name));
            }
        }
        else
        {
            context.ReportDiagnostic(Diagnostic.Create(Rules.TypeUsed.DisallowedType, node.GetLocation(), typeName));
        }
    }