예제 #1
0
        RuntimeEventInfo[] GetEvents_internal(string name, BindingFlags bindingAttr, MemberListType listType, RuntimeType reflectedType)
        {
            var refh = new RuntimeTypeHandle(reflectedType);

            using (var namePtr = new Mono.SafeStringMarshal(name))
                using (var h = new Mono.SafeGPtrArrayHandle(GetEvents_native(namePtr.Value, listType))) {
                    int n = h.Length;
                    var a = new RuntimeEventInfo[n];
                    for (int i = 0; i < n; i++)
                    {
                        var eh = new Mono.RuntimeEventHandle(h[i]);
                        a[i] = (RuntimeEventInfo)EventInfo.GetEventFromHandle(eh, refh);
                    }
                    return(a);
                }
        }
예제 #2
0
        internal IEnumerable <EventInfo> CoreGetDeclaredEvents(NameFilter optionalNameFilter, RuntimeTypeInfo reflectedType)
        {
            RuntimeNamedTypeInfo definingType = AnchoringTypeDefinitionForDeclaredMembers;

            if (definingType != null)
            {
                MetadataReader reader = definingType.Reader;
                foreach (EventHandle eventHandle in definingType.DeclaredEventHandles)
                {
                    if (optionalNameFilter == null || optionalNameFilter.Matches(eventHandle.GetEvent(reader).Name, reader))
                    {
                        yield return(RuntimeEventInfo.GetRuntimeEventInfo(eventHandle, definingType, this, reflectedType));
                    }
                }
            }
        }
예제 #3
0
        //
        // Return all declared events whose name matches "optionalNameFilter". If optionalNameFilter is null, return them all.
        //
        internal IEnumerable <RuntimeEventInfo> GetDeclaredEventsInternal(RuntimeNamedTypeInfo definingType, String optionalNameFilter)
        {
            if (definingType != null)
            {
                // We require the caller to pass a value that we could calculate ourselves because we're an iterator and we
                // don't want any MissingMetadataException that AnchoringType throws to be deferred.
                Debug.Assert(definingType.Equals(this.AnchoringTypeDefinitionForDeclaredMembers));

                MetadataReader reader = definingType.Reader;
                foreach (EventHandle eventHandle in definingType.DeclaredEventHandles)
                {
                    if (optionalNameFilter == null || eventHandle.GetEvent(reader).Name.StringEquals(optionalNameFilter, reader))
                    {
                        yield return(RuntimeEventInfo.GetRuntimeEventInfo(eventHandle, definingType, this));
                    }
                }
            }
        }
 private unsafe void PopulateEvents(RuntimeType.RuntimeTypeCache.Filter filter, RuntimeTypeHandle declaringTypeHandle, MetadataImport scope, int *tkAssociates, int cAssociates, Hashtable csEventInfos, List <RuntimeEventInfo> list)
 {
     //Require tkAssociates.AllocatedUntil >= cAssociates
     for (int i = 0; i < cAssociates; i++)
     {
         int        mdToken = tkAssociates[i];
         Utf8String name    = scope.GetName(mdToken);
         if (filter.Match(name))
         {
             bool             flag;
             RuntimeEventInfo item = new RuntimeEventInfo(mdToken, declaringTypeHandle.GetRuntimeType(), this.m_runtimeTypeCache, out flag);
             if ((declaringTypeHandle.Equals(this.m_runtimeTypeCache.RuntimeTypeHandle) || !flag) && (csEventInfos[item.Name] == null))
             {
                 csEventInfos[item.Name] = item;
                 list.Add(item);
             }
         }
     }
 }
 internal RemotingCachedData(RuntimeEventInfo ri)
 {
     this.RI = ri;
 }
예제 #6
0
        internal static RemotingCachedData GetReflectionCachedData(MemberInfo mi)
        {
            RemotingCachedData     data  = null;
            MethodBase             base2 = null;
            RuntimeType            type  = null;
            RuntimeFieldInfo       ri    = null;
            RuntimeEventInfo       info2 = null;
            RuntimePropertyInfo    info3 = null;
            SerializationFieldInfo info4 = null;

            base2 = mi as MethodBase;
            if (base2 != null)
            {
                return(GetReflectionCachedData(base2));
            }
            type = mi as RuntimeType;
            if (type != null)
            {
                return(GetReflectionCachedData(type));
            }
            ri = mi as RuntimeFieldInfo;
            if (ri != null)
            {
                data = (RemotingCachedData)ri.RemotingCache[CacheObjType.RemotingData];
                if (data == null)
                {
                    ri.RemotingCache[CacheObjType.RemotingData] = data = new RemotingCachedData(ri);
                }
                return(data);
            }
            info2 = mi as RuntimeEventInfo;
            if (info2 != null)
            {
                data = (RemotingCachedData)info2.RemotingCache[CacheObjType.RemotingData];
                if (data == null)
                {
                    info2.RemotingCache[CacheObjType.RemotingData] = data = new RemotingCachedData(info2);
                }
                return(data);
            }
            info3 = mi as RuntimePropertyInfo;
            if (info3 != null)
            {
                data = (RemotingCachedData)info3.RemotingCache[CacheObjType.RemotingData];
                if (data == null)
                {
                    info3.RemotingCache[CacheObjType.RemotingData] = data = new RemotingCachedData(info3);
                }
                return(data);
            }
            info4 = mi as SerializationFieldInfo;
            if (info4 == null)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_MustBeRuntimeReflectionObject"));
            }
            data = (RemotingCachedData)info4.RemotingCache[CacheObjType.RemotingData];
            if (data == null)
            {
                info4.RemotingCache[CacheObjType.RemotingData] = data = new RemotingCachedData(info4);
            }
            return(data);
        }