Kipunji.Models.TypeModel.FindMembers C# (CSharp) Method

FindMembers() public method

public FindMembers ( string signature ) : List
signature string
return List
        public List<BaseDocModel> FindMembers(string signature)
        {
            List<BaseDocModel> results = new List<BaseDocModel> ();

            signature = signature.Trim ();

            // If it's just a member name, take the easy path
            if (!signature.Contains ('(')) {
                results.AddRange (Members.Where (p => string.Compare (p.Name.TrimStart ('.'), signature, true) == 0).Cast<BaseDocModel> ());
                return results;
            }

            string member_name = signature.Substring (0, signature.IndexOf ('(')).Trim ();
            string parameters = signature.Substring (signature.IndexOf ('(')).Trim ('(', ')', ' ');

            // Empty parameter list, another short circuit path
            if (parameters.Length == 0) {
                results.AddRange (Members.Where (p => string.Compare (p.Name.TrimStart ('.'), member_name, true) == 0 && p.Parameters.Count == 0).Cast<BaseDocModel> ());
                return results;
            }

            // The hard path, we have to check the types of each of the parameters
            string[] paras = parameters.Split (',');

            foreach (var member in Members.Where (p => string.Compare (p.Name.TrimStart ('.'), member_name, true) == 0 && p.Parameters.Count == paras.Length)) {
                bool match = true;

                for (int i = 0; i < paras.Length; i++) {
                    string req_param = Formatter.FormatType (paras[i].Trim ());
                    string member_param = Formatter.FormatType (member.Parameters[i].Type.Trim ());

                    if (string.Compare (req_param, member_param, true) != 0) {
                        match = false;
                        break;
                    }
                }

                // We assume there cannot be more than one match
                if (match) {
                    results.Add (member);
                    return results;
                }

            }

            return results;
        }