CookComputing.XmlRpc.XmlRpcServiceInfo.ExtractMethodInfo C# (CSharp) Method

ExtractMethodInfo() static private method

static private ExtractMethodInfo ( Hashtable methods, MethodInfo mi ) : void
methods System.Collections.Hashtable
mi System.Reflection.MethodInfo
return void
        static void ExtractMethodInfo(Hashtable methods, MethodInfo mi)
        {
            XmlRpcMethodAttribute attr = (XmlRpcMethodAttribute)
            Attribute.GetCustomAttribute(mi,
            typeof(XmlRpcMethodAttribute));
              if (attr == null)
            return;

              XmlRpcMethodInfo mthdInfo = (XmlRpcMethodInfo)methods[mi.Name];
              if (mthdInfo == null)
              {
            mthdInfo = new XmlRpcMethodInfo();
            methods.Add(mi.Name, mthdInfo);
              }

              mthdInfo.MethodInfo = mi;
              mthdInfo.XmlRpcName = GetXmlRpcMethodName(mi);
              mthdInfo.MiName = mi.Name;
              mthdInfo.Doc = attr.Description;
              mthdInfo.IsHidden = attr.IntrospectionMethod | attr.Hidden;
              // extract parameters information
              ArrayList parmList = new ArrayList();
              ParameterInfo[] parms = mi.GetParameters();
              foreach (ParameterInfo parm in parms)
              {
            XmlRpcParameterInfo parmInfo = new XmlRpcParameterInfo();
            parmInfo.Name = parm.Name;
            parmInfo.Type = parm.ParameterType;
            parmInfo.XmlRpcType = GetXmlRpcTypeString(parm.ParameterType);
            // retrieve optional attributed info
            parmInfo.Doc = "";
            XmlRpcParameterAttribute pattr = (XmlRpcParameterAttribute)
              Attribute.GetCustomAttribute(parm,
              typeof(XmlRpcParameterAttribute));
            if (pattr != null)
            {
              parmInfo.Doc = pattr.Description;
              parmInfo.XmlRpcName = pattr.Name;
            }
            parmInfo.IsParams = Attribute.IsDefined(parm,
              typeof(ParamArrayAttribute));
            parmList.Add(parmInfo);
              }
              mthdInfo.Parameters = (XmlRpcParameterInfo[])
            parmList.ToArray(typeof(XmlRpcParameterInfo));
              // extract return type information
              mthdInfo.ReturnType = mi.ReturnType;
              mthdInfo.ReturnXmlRpcType = GetXmlRpcTypeString(mi.ReturnType);
              object[] orattrs = mi.ReturnTypeCustomAttributes.GetCustomAttributes(
            typeof(XmlRpcReturnValueAttribute), false);
              if (orattrs.Length > 0)
              {
            mthdInfo.ReturnDoc = ((XmlRpcReturnValueAttribute)orattrs[0]).Description;
              }
        }