Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }