Beispiel #1
0
        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;
                    }
                }));
            }
        }
Beispiel #2
0
 public static bool IsMainApi(this MethodBase m)
 {
     return(m.Api() != null);
 }