private void finishMethod(MethodInfo m, bool staticOnly)
{
m_finishing = m.Name;
string name = FanUtil.toFanMethodName(m.Name);
Slot s = slot(name, false);
if (s == null)
{
return;
}
if (s.parent() != this)
{
return;
}
if (staticOnly && !s.isStatic())
{
return;
}
if (s is Method)
{
Method method = (Method)s;
// alloc System.Reflection.MethodInfo[] array big enough
// to handle all the versions with default parameters
if (method.m_reflect == null)
{
int n = 1;
for (int j = method.@params().sz() - 1; j >= 0; j--)
{
if (((Param)method.@params().get(j)).hasDefault())
{
n++;
}
else
{
break;
}
}
method.m_reflect = new MethodInfo[n];
}
// get parameters, if sys we need to skip the
// methods that use non-Fantom signatures
ParameterInfo[] pars = m.GetParameters();
int numParams = pars.Length;
if (m_pod == Sys.m_sysPod)
{
if (!checkAllFan(pars))
{
return;
}
if (m_dotnetRepr)
{
bool dotnetStatic = m.IsStatic;
if (!dotnetStatic)
{
return;
}
if (!method.isStatic() && !method.isCtor())
{
--numParams;
}
}
}
// zero index is full signature up to using max defaults
method.m_reflect[method.@params().sz() - numParams] = m;
}
else
{
Field field = (Field)s;
if (m.ReturnType.ToString() == "System.Void")
{
field.m_setter.m_reflect = new MethodInfo[] { m }
}
;
else
{
field.m_getter.m_reflect = new MethodInfo[] { m }
};
}
}
bool checkAllFan(ParameterInfo[] pars)
{
for (int i = 0; i < pars.Length; i++)
{
System.Type p = pars[i].ParameterType;
if (!p.FullName.StartsWith("Fan.") && FanUtil.toFanType(p, false) == null)
{
return(false);
}
}
return(true);
}