public IEnumerable <SuggestItem> Suggest()
        {
            if (_targetElement == null || _lastAttribute == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            if (_lastAttribute.NamespacePrefix == "ux" && _parentElement != null)
            {
                return(new StandardAttributesSuggestion(_dataTypes, _targetElement, _parentElement,
                                                        _lastAttribute.FullName, _codeReader, _namespaceDeclarations).Suggest());
            }

            var dataType = _targetElement.ToDataType(_dataTypes.AccessibleUxTypes, _namespaceDeclarations);

            if (dataType == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            var properties            = PropertyHelper.GetAllWriteableProperties(dataType);
            var lastAttributeProperty = properties.FirstOrDefault(p => _lastAttribute.Name == p.Name);

            if (lastAttributeProperty == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            return(SuggestValuesForProperty(lastAttributeProperty));
        }
        public IEnumerable <SuggestItem> Suggest()
        {
            if (_elementContext == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            var suggestItems = PossibleStandardAttribs();

            var dataType = _elementContext.ToDataType(_dataTypes.AccessibleUxTypes, _namespaceDeclarations);

            if (dataType == null)
            {
                return(suggestItems);
            }

            var possibleArguments  = Task.Run(() => PossibleArguments(dataType));
            var possibleProperties = Task.Run(() => PossibleProperties(dataType));
            var possibleEvents     = Task.Run(() => PossibleEvents(dataType));

            return(suggestItems
                   .Concat(possibleArguments.Result)
                   .Concat(possibleProperties.Result)
                   .Concat(possibleEvents.Result));
        }
        IEnumerable <SuggestItem> SuggestBindingValues()
        {
            var dataType = _parentElement.ToDataType(_dataTypes.AccessibleUxTypes, _namespaces);

            if (dataType == null)
            {
                return(null);
            }

            var properties = PropertyHelper.GetAllWriteableProperties(dataType);

            return(properties.Select(p => SuggestionHelper.Suggest(SuggestItemType.Property, p, p.Name)));
        }
        IEnumerable <SuggestItem> SuggestReferenceValue()
        {
            var nameAttributes   = FindUXNameAttributes(_codeReader);
            var namesToDataTypes = ResolveNamesAndTypes(_dataTypes, nameAttributes, _namespaces);

            var elementDataType = _targetElement.ToDataType(_dataTypes.AccessibleUxTypes, _namespaces);

            if (elementDataType == null)
            {
                return(null);
            }

            return(namesToDataTypes.Where(d => d.Value == elementDataType).Select(n => SuggestionHelper.Suggest(SuggestItemType.Variable, n.Value, n.Key)));
        }
예제 #5
0
        public IEnumerable <SuggestItem> Suggest()
        {
            if (_parentElement == null)
            {
                var dataTypes = DataTypeHelper.GetDataTypesForElement(_targetElement, _dataTypes, _namespaceDeclarations);
                return(ConvertNamescopesToSuggestions(dataTypes));
            }

            var allTypes      = _dataTypes.AccessibleUxTypes;
            var concreteTypes = allTypes.Where(dataType => !dataType.Modifiers.HasFlag(Modifiers.Abstract))
                                .ToArray();

            var parentDataType = _parentElement.ToDataType(_parentElement.Name == "App" ? allTypes : concreteTypes, _namespaceDeclarations);

            if (parentDataType == null)
            {
                return(Enumerable.Empty <SuggestItem>());
            }

            var parentPublicProperties = Task.Run(() => PropertyHelper.GetAllComponentPrimaryOrContentProperties(parentDataType));

            var hasPrefix = HasTargetNamespacePrefix();

            if (hasPrefix)
            {
                return(HandleNamespacePrefix(concreteTypes, parentPublicProperties));
            }

            var ns    = DataTypeHelper.GetQualifiedNamespaceForElement(_targetElement);
            var types = HandleNonNamespacePrefix(DataTypeHelper.GetDataTypesForElement(_targetElement, _dataTypes, _namespaceDeclarations).ToArray(), parentPublicProperties);

            if (ns != null)
            {
                return(types.Concat(ConvertNamescopesToSuggestions(GetNamespacesInNamespace(ns))));
            }
            else
            {
                return(types
                       .Concat(ConvertNamescopesToSuggestions(GetNamespacesInRoot()))
                       .Concat(_namespaceDeclarations.Values.Where(nss => nss != "")
                               .Select(nss => SuggestionHelper.Suggest(SuggestItemType.Namespace, null, nss + ":"))));
            }
        }