Esempio n. 1
0
        private static Dictionary <string, List <PhpLibraryFunction.Overload> > /*!*/ GetLibraryFunctions(Type attr, Assembly /*!*/ assembly)
        {
            Dictionary <string, List <PhpLibraryFunction.Overload> > result =
                new Dictionary <string, List <PhpLibraryFunction.Overload> >(500);

            foreach (Type type in assembly.GetTypes())
            {
                if (PhpLibraryModule.IsLibraryType(type))
                {
                    foreach (MethodInfo method in type.GetMethods(BindingFlags.Public | BindingFlags.Static))
                    {
                        if (!method.IsGenericMethodDefinition)
                        {
                            ImplementsFunctionAttribute impl_func =
                                (attr == null)?
                                ImplementsFunctionAttribute.Reflect(method):
                                ImplementsFunctionAttribute.ReflectDynamic(attr, method);

                            if (impl_func != null)
                            {
                                List <PhpLibraryFunction.Overload> overloads;
                                if (!result.TryGetValue(impl_func.Name, out overloads))
                                {
                                    overloads = new List <PhpLibraryFunction.Overload>();
                                    result.Add(impl_func.Name, overloads);
                                }

                                if (PhpLibraryFunction.AddOverload(overloads, method, impl_func.Options) == DRoutine.InvalidOverloadIndex)
                                {
                                    throw new ReflectionException(CoreResources.GetString("invalid_class_library", assembly.CodeBase));
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }