public static MethodBase MirrorApi(this MethodBase m) { if (m == null) { return(null); } else { return(_mmapiCache.GetOrCreate(m, () => { m = m.Api(); if (m == null) { return null; } else { var t = m.DeclaringType; var iface = t.IsInterface; var n_mirror = iface ? t.Name.Substring(1) : "I" + t.Namespace; var asm = MethodBase.GetCurrentMethod().DeclaringType.Assembly; var t_mirror = asm.GetType(t.Namespace + "." + n_mirror, true); var m_mirror = t_mirror.GetMethods(BF.All).AssertSingle(mm => m.Name == mm.Name && Seq.Equal(m.Params(), mm.Params()) && m.Ret() == mm.Ret()); (m.IsStatic() ^ m_mirror.IsStatic()).AssertTrue(); return m_mirror; } })); } }
public static bool IsMainApi(this MethodBase m) { return(m.Api() != null); }