internal static bool TryGetRegisteredName(BackingFieldOrProperty backing, SemanticModel semanticModel, CancellationToken cancellationToken, out ArgumentSyntax nameArg, out string result) { nameArg = null; result = null; if (TryGetRegisterInvocationRecursive(backing, semanticModel, cancellationToken, out var invocation, out var method)) { return(method.TryFindParameter("name", out var parameter) && invocation.TryFindArgument(parameter, out nameArg) && nameArg.TryGetStringValue(semanticModel, cancellationToken, out result)); } if (TryGetDependencyAddOwnerSourceField(backing, semanticModel, cancellationToken, out var source) && !source.Symbol.Equals(backing.Symbol)) { return(TryGetRegisteredName(source, semanticModel, cancellationToken, out nameArg, out result)); } if (backing.Symbol.Locations.All(x => !x.IsInSource) && TryGetPropertyByName(backing, out var property)) { result = property.Name; return(true); } return(false); }
private static bool IsCreatePropertyChangedEventArgsFor(this ExpressionSyntax newPropertyChangedEventArgs, IPropertySymbol property, SemanticModel semanticModel, CancellationToken cancellationToken) { var objectCreation = newPropertyChangedEventArgs as ObjectCreationExpressionSyntax; if (objectCreation == null) { return(false); } ArgumentSyntax nameArg = null; if (objectCreation.ArgumentList?.Arguments.TryGetSingle(out nameArg) == true) { string name; if (nameArg.TryGetStringValue(semanticModel, cancellationToken, out name)) { // raising with null or empty means that all properties notifies // this is how a wpf binding sees it. if (string.IsNullOrEmpty(name) || name == property.Name) { return(true); } } } return(false); }
internal static bool TryGetRegisteredName(InvocationExpressionSyntax invocation, SemanticModel semanticModel, CancellationToken cancellationToken, out ArgumentSyntax nameArg, out string registeredName) { nameArg = null; registeredName = null; if (invocation == null) { return(false); } if (TryGetRegisterCall(invocation, semanticModel, cancellationToken, out var method) || TryGetRegisterReadOnlyCall(invocation, semanticModel, cancellationToken, out method) || TryGetRegisterAttachedCall(invocation, semanticModel, cancellationToken, out method) || TryGetRegisterAttachedReadOnlyCall(invocation, semanticModel, cancellationToken, out method)) { return(method.TryFindParameter("name", out var parameter) && invocation.TryFindArgument(parameter, out nameArg) && nameArg.TryGetStringValue(semanticModel, cancellationToken, out registeredName)); } if (invocation.Expression is MemberAccessExpressionSyntax memberAccess && (TryGetAddOwnerCall(invocation, semanticModel, cancellationToken, out _) || TryGetOverrideMetadataCall(invocation, semanticModel, cancellationToken, out _))) { if (semanticModel.TryGetSymbol(memberAccess.Expression, cancellationToken, out var symbol) && BackingFieldOrProperty.TryCreateForDependencyProperty(symbol, out var fieldOrProperty)) { return(TryGetRegisteredName(fieldOrProperty, semanticModel, cancellationToken, out nameArg, out registeredName)); } return(false); } return(false); }
internal static bool TryGetRegisteredName(FieldOrProperty fieldOrProperty, SemanticModel semanticModel, CancellationToken cancellationToken, out ArgumentSyntax nameArg, out string result) { nameArg = null; result = null; if (fieldOrProperty.TryGetAssignedValue(cancellationToken, out var value) && value is InvocationExpressionSyntax invocation) { if (TryGetRegisterCall(invocation, semanticModel, cancellationToken, out _) && invocation.TryGetArgumentAtIndex(0, out nameArg)) { return(nameArg.TryGetStringValue(semanticModel, cancellationToken, out result)); } } return(false); }