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