private static void Handle(SyntaxNodeAnalysisContext context) { if (context.IsExcludedFromAnalysis()) { return; } if (context.Node is InvocationExpressionSyntax invocation && context.ContainingSymbol.IsStatic) { if (invocation.TryGetArgumentAtIndex(2, out var argument) && (DependencyProperty.TryGetRegisterCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterReadOnlyCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedReadOnlyCall(invocation, context.SemanticModel, context.CancellationToken, out _))) { HandleArgument(context, argument); } else if (invocation.TryGetArgumentAtIndex(0, out argument)) { if (DependencyProperty.TryGetAddOwnerCall(invocation, context.SemanticModel, context.CancellationToken, out _)) { HandleArgument(context, argument); } else if (DependencyProperty.TryGetOverrideMetadataCall(invocation, context.SemanticModel, context.CancellationToken, out _) && invocation.Expression is MemberAccessExpressionSyntax memberAccess && BackingFieldOrProperty.TryCreateForDependencyProperty(context.SemanticModel.GetSymbolSafe(memberAccess.Expression, context.CancellationToken), out var fieldOrProperty) && context.ContainingSymbol.ContainingType.IsAssignableTo(fieldOrProperty.ContainingType, context.Compilation)) { HandleArgument(context, argument); } } } }
internal static bool TryGetDependencyProperty(ObjectCreationExpressionSyntax objectCreation, SemanticModel semanticModel, CancellationToken cancellationToken, out BackingFieldOrProperty fieldOrProperty) { fieldOrProperty = default; var invocation = objectCreation.FirstAncestorOrSelf <InvocationExpressionSyntax>(); if (invocation == null) { return(false); } if (DependencyProperty.TryGetRegisterCall(invocation, semanticModel, cancellationToken, out _) || DependencyProperty.TryGetRegisterReadOnlyCall(invocation, semanticModel, cancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedCall(invocation, semanticModel, cancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedReadOnlyCall(invocation, semanticModel, cancellationToken, out _)) { if (objectCreation.TryFirstAncestor <FieldDeclarationSyntax>(out var fieldDeclaration) && semanticModel.TryGetSymbol(fieldDeclaration, cancellationToken, out var field)) { return(BackingFieldOrProperty.TryCreateForDependencyProperty(field, out fieldOrProperty)); } if (objectCreation.TryFirstAncestor <PropertyDeclarationSyntax>(out var propertyDeclaration) && semanticModel.TryGetSymbol(propertyDeclaration, cancellationToken, out var property)) { return(BackingFieldOrProperty.TryCreateForDependencyProperty(property, out fieldOrProperty)); } return(false); } if (invocation.Expression is MemberAccessExpressionSyntax memberAccess && (DependencyProperty.TryGetAddOwnerCall(invocation, semanticModel, cancellationToken, out _) || DependencyProperty.TryGetOverrideMetadataCall(invocation, semanticModel, cancellationToken, out _)) && semanticModel.TryGetSymbol(memberAccess.Expression, cancellationToken, out ISymbol? candidate)) { return(BackingFieldOrProperty.TryCreateForDependencyProperty(candidate, out fieldOrProperty)); } return(false); }
private static void Handle(SyntaxNodeAnalysisContext context) { if (context.IsExcludedFromAnalysis()) { return; } if (context.Node is InvocationExpressionSyntax invocation) { if ((DependencyProperty.TryGetOverrideMetadataCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetAddOwnerCall(invocation, context.SemanticModel, context.CancellationToken, out _)) && invocation.TryGetArgumentAtIndex(0, out var argument)) { HandleArgument(context, argument); } if ((DependencyProperty.TryGetRegisterCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterReadOnlyCall(invocation, context.SemanticModel, context.CancellationToken, out _)) && invocation.TryGetArgumentAtIndex(2, out argument)) { HandleArgument(context, argument); } } }
private static void Handle(SyntaxNodeAnalysisContext context) { if (!context.IsExcludedFromAnalysis() && context.Node is InvocationExpressionSyntax invocation && context.ContainingSymbol.IsStatic) { if (invocation.TryGetArgumentAtIndex(2, out var argument) && (DependencyProperty.TryGetRegisterCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterReadOnlyCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedCall(invocation, context.SemanticModel, context.CancellationToken, out _) || DependencyProperty.TryGetRegisterAttachedReadOnlyCall(invocation, context.SemanticModel, context.CancellationToken, out _))) { HandleArgument(context, argument); } else if (invocation.TryGetArgumentAtIndex(0, out argument)) { if (DependencyProperty.TryGetAddOwnerCall(invocation, context.SemanticModel, context.CancellationToken, out _)) { HandleArgument(context, argument); } else if (DependencyProperty.TryGetOverrideMetadataCall(invocation, context.SemanticModel, context.CancellationToken, out _) && invocation.Expression is MemberAccessExpressionSyntax { Expression : { } expression } &&