Example #1
0
        private MemberInfo GetOrAddPropertyInfo(PropertyHandle handle)
        {
            if (this.properties == null)
            {
                properties = new Dictionary <PropertyHandle, MemberInfo>();
            }

            MemberInfo result = null;

            if (!properties.TryGetValue(handle, out result))
            {
                var          property = metadataReader.GetProperty(handle);
                var          propertyMethodHandles = property.GetAssociatedMethods();
                TypeHandle   declaringTypeHandle;
                MethodHandle accessorMethod = propertyMethodHandles.Getter;
                if (accessorMethod.IsNil)
                {
                    accessorMethod = propertyMethodHandles.Setter;
                }

                declaringTypeHandle = metadataReader.GetDeclaringType(accessorMethod);
                result       = new MemberInfo(MemberKind.Property);
                result.Token = this.metadataReader.GetToken(handle);
                result.DeclaringTypeHandle = declaringTypeHandle;
                result.Handle = handle;
                properties.Add(handle, result);
            }

            return(result);
        }
Example #2
0
        public static Handle GetAttributeTypeHandle(this MetadataReader metadataReader, CustomAttribute customAttribute)
        {
            Handle attributeTypeHandle;
            var    ctor = customAttribute.Constructor;

            if (ctor.HandleType == HandleType.MemberReference)
            {
                var memberReferenceHandle = (MemberReferenceHandle)ctor;
                var memberReference       = metadataReader.GetMemberReference(memberReferenceHandle);
                attributeTypeHandle = memberReference.Parent;
            }
            else
            {
                MethodHandle methodHandle = (MethodHandle)ctor;
                var          method       = metadataReader.GetMethod(methodHandle);
                attributeTypeHandle = metadataReader.GetDeclaringType(methodHandle);
            }

            return(attributeTypeHandle);
        }