Esempio n. 1
0
        private void AddFunction(string providerName, IMetaFunction function)
        {
            string compositeName = function.CompositeName();

            _functionByNameDictionary.Add(compositeName, function);


            List <string> functionNamesByProviderNameList;

            if (_functionNamesByProviderName.TryGetValue(providerName, out functionNamesByProviderNameList) == false)
            {
                functionNamesByProviderNameList = new List <string>();
                _functionNamesByProviderName.Add(providerName, functionNamesByProviderNameList);
            }

            functionNamesByProviderNameList.Add(compositeName);


            List <string> functionNamesByType;

            if (_functionNamesByTypeDictionary.TryGetValue(function.ReturnType, out functionNamesByType) == false)
            {
                functionNamesByType = new List <string>();
                _functionNamesByTypeDictionary.Add(function.ReturnType, functionNamesByType);
            }

            functionNamesByType.Add(compositeName);

            if (function is IDowncastableFunction && ((IDowncastableFunction)function).ReturnValueIsDowncastable)
            {
                List <string> downcastableFunctionNamesByType;
                if (_downcastableFunctionNamesByTypeDictionary.TryGetValue(function.ReturnType, out downcastableFunctionNamesByType) == false)
                {
                    downcastableFunctionNamesByType = new List <string>();
                    _downcastableFunctionNamesByTypeDictionary.Add(function.ReturnType, downcastableFunctionNamesByType);
                }
                downcastableFunctionNamesByType.Add(compositeName);
            }
        }
        protected override IEnumerable <IFunctionTreeBuilderLeafInfo> OnGetFunctionInfos(SearchToken searchToken)
        {
            var castedSearchToken = (AllFunctionsElementProviderSearchToken)searchToken;

            string loweredKeyword = null;

            if (searchToken != null)
            {
                loweredKeyword = (searchToken.Keyword ?? string.Empty).ToLowerInvariant();
            }

            foreach (string metaFunctionName in this.MetaFunctionNames.OrderBy(f => f))
            {
                IMetaFunction metaFunction = this.GetMetaFunction(metaFunctionName);

                if (castedSearchToken == null)
                {
                    yield return
                        (new AllFunctionsTreeBuilderLeafInfo
                    {
                        Name = metaFunction.Name,
                        Namespace = metaFunction.Namespace,
                        EntityToken = metaFunction.EntityToken
                    });

                    continue;
                }

                if (!string.IsNullOrEmpty(loweredKeyword))
                {
                    if (!metaFunction.CompositeName().ToLowerInvariant().Contains(loweredKeyword))
                    {
                        continue;
                    }
                }

                bool shouldBeIncluded = true;

                if (!string.IsNullOrEmpty(castedSearchToken.AcceptableTypes) &&
                    castedSearchToken.AcceptableTypes != "__None__")
                {
                    shouldBeIncluded = false;

                    foreach (string typeKey in castedSearchToken.AcceptableTypes.Split(';'))
                    {
                        Type type = TypeManager.GetType(typeKey);

                        // MAW: Negate that string is an IEnumerable - thats just plain stupid.
                        if (type == typeof(IEnumerable) && metaFunction.ReturnType == typeof(String))
                        {
                            continue;
                        }

                        if (type.IsAssignableFrom(metaFunction.ReturnType) ||
                            (metaFunction is IDowncastableFunction &&
                             (metaFunction as IDowncastableFunction).ReturnValueIsDowncastable &&
                             metaFunction.ReturnType.IsAssignableFrom(type)))
                        {
                            shouldBeIncluded = true;
                            break;
                        }


                        if (metaFunction is IWidgetFunction &&
                            metaFunction.ReturnType.IsAssignableFrom(type))
                        {
                            shouldBeIncluded = true;
                            break;
                        }
                    }
                }

                if (shouldBeIncluded)
                {
                    yield return
                        (new AllFunctionsTreeBuilderLeafInfo
                    {
                        Name = metaFunction.Name,
                        Namespace = metaFunction.Namespace,
                        EntityToken = metaFunction.EntityToken
                    });
                }
            }
        }
Esempio n. 3
0
        private void AddFunction(string providerName, IMetaFunction function)
        {
            string compositeName = function.CompositeName();

            _functionByNameDictionary.Add(compositeName, function);

            List<string> functionNamesByProviderNameList;
            if (_functionNamesByProviderName.TryGetValue(providerName, out functionNamesByProviderNameList) == false)
            {
                functionNamesByProviderNameList = new List<string>();
                _functionNamesByProviderName.Add(providerName, functionNamesByProviderNameList);
            }

            functionNamesByProviderNameList.Add(compositeName);

            List<string> functionNamesByType;
            if (_functionNamesByTypeDictionary.TryGetValue(function.ReturnType, out functionNamesByType) == false)
            {
                functionNamesByType = new List<string>();
                _functionNamesByTypeDictionary.Add(function.ReturnType, functionNamesByType);
            }

            functionNamesByType.Add(compositeName);

            if (function is IDowncastableFunction && ((IDowncastableFunction)function).ReturnValueIsDowncastable)
            {
                List<string> downcastableFunctionNamesByType;
                if (_downcastableFunctionNamesByTypeDictionary.TryGetValue(function.ReturnType, out downcastableFunctionNamesByType) == false)
                {
                    downcastableFunctionNamesByType = new List<string>();
                    _downcastableFunctionNamesByTypeDictionary.Add(function.ReturnType, downcastableFunctionNamesByType);
                }
                downcastableFunctionNamesByType.Add(compositeName);
            }
        }