private static IDictionary<string, QiMethod> GetMethods(QiObject qiObj)
{
//観察事実としてmObjは4要素タプルであり、第0要素にメソッド一覧が入ってる
var mObj = qiObj.MetaObject;
if (mObj.Count == 0)
{
throw new InvalidOperationException("meta object does not contains info");
}
var qKeys = mObj[0].GetKeys();
var methodInfos = Enumerable
.Range(0, qKeys.Count)
.Select(i => qKeys[i])
.Select(k => new QiMethodInfo(mObj[0][k]));
var methodOverloads = new Dictionary<string, List<QiMethodInfo>>();
foreach (var mi in methodInfos)
{
if (methodOverloads.ContainsKey(mi.Name))
{
methodOverloads[mi.Name].Add(mi);
}
else
{
methodOverloads[mi.Name] = new List<QiMethodInfo>() { mi };
}
}
return methodOverloads.ToDictionary(
p => p.Key,
p => new QiMethod(qiObj, p.Value)
);
}