private static void Handle(SyntaxNodeAnalysisContext context) { if (!context.IsExcludedFromAnalysis() && context.Node is InvocationExpressionSyntax invocation && TryGetArgs(context, out var target, out var propertyArg, out var valueArg) && context.SemanticModel.TryGetSymbol(propertyArg.Expression, context.CancellationToken, out var symbol) && BackingFieldOrProperty.Match(symbol) is { } backing) { if (IsWrongType(backing, valueArg, context) is { } registeredType) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0014SetValueMustUseRegisteredType, valueArg.GetLocation(), target.Name, registeredType)); } if (backing.Type == KnownSymbols.DependencyProperty && backing.FindKey(context.SemanticModel, context.CancellationToken) is { } keyField) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0040SetUsingDependencyPropertyKey, propertyArg.GetLocation(), properties: ImmutableDictionary <string, string?> .Empty.Add(nameof(DependencyPropertyKeyType), keyField.Name), propertyArg, keyField.CreateArgument(context.SemanticModel, propertyArg.SpanStart))); } if (target == KnownSymbols.DependencyObject.SetCurrentValue && backing.Symbol is IFieldSymbol setField && (setField == KnownSymbols.FrameworkElement.DataContextProperty || setField.Name == "StyleProperty")) { context.ReportDiagnostic( Diagnostic.Create( Descriptors.WPF0043DoNotUseSetCurrentValue, invocation.GetLocation(), setField.Name, invocation.ArgumentList.Arguments[1])); } } }