コード例 #1
0
        public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
        {
            ArrayList al    = new ArrayList();
            IntPtr    hEnum = new IntPtr();

            int methodToken;

            try
            {
                while (true)
                {
                    int size;
                    m_importer.EnumMethods(ref hEnum, (int)m_typeToken, out methodToken, 1, out size);
                    if (size == 0)
                    {
                        break;
                    }
                    // [Xamarin] Expression evaluator.
                    var met = new MetadataMethodInfo(m_importer, methodToken);
                    if (MetadataExtensions.TypeFlagsMatch(met.IsPublic, met.IsStatic, bindingAttr))
                    {
                        al.Add(met);
                    }
                }
            }
            finally
            {
                m_importer.CloseEnum(hEnum);
            }
            return((MethodInfo[])al.ToArray(typeof(MethodInfo)));
        }
コード例 #2
0
 public override MethodInfo GetSetMethod(bool nonPublic)
 {
     if (m_setter == null)
     {
         if (m_pmdSetter != 0)
         {
             m_setter = new MetadataMethodInfo(m_importer, m_pmdSetter);
         }
     }
     return(m_setter);
 }
コード例 #3
0
        public override MethodInfo GetSetMethod(bool nonPublic)
        {
            if (m_pmdSetter == 0)
            {
                return(null);
            }

            if (m_setter == null)
            {
                m_setter = new MetadataMethodInfo(m_importer, m_pmdSetter, Instantiation.Empty);
            }

            if (nonPublic || m_setter.IsPublic)
            {
                return(m_setter);
            }
            return(null);
        }
コード例 #4
0
        public override MethodInfo GetGetMethod(bool nonPublic)
        {
            if (m_pmdGetter == 0)
            {
                return(null);
            }

            if (m_getter == null)
            {
                m_getter = new MetadataMethodInfo(m_importer, m_pmdGetter);
            }

            if (nonPublic || m_getter.IsPublic)
            {
                return(m_getter);
            }
            return(null);
        }
コード例 #5
0
        public override MethodInfo GetSetMethod(bool nonPublic)
        {
            if (m_pmdSetter == 0)
            {
                return(null);
            }

            if (m_setter == null)
            {
                m_setter = new MetadataMethodInfo(m_importer, m_pmdSetter, Instantiation.Create(m_declaringType.GenericTypeArguments));
            }

            if (nonPublic || m_setter.IsPublic)
            {
                return(m_setter);
            }
            return(null);
        }
コード例 #6
0
		public override MethodInfo GetSetMethod (bool nonPublic)
		{
			if (m_pmdSetter == 0)
				return null;

			if (m_setter == null)
				m_setter = new MetadataMethodInfo (m_importer, m_pmdSetter);

			if (nonPublic || m_setter.IsPublic)
				return m_setter;
			return null;
		}
コード例 #7
0
		public override MethodInfo GetSetMethod (bool nonPublic)
		{
			if (m_setter == null) {
				if (m_pmdSetter != 0)
					m_setter = new MetadataMethodInfo (m_importer, m_pmdSetter);
			}
			return m_setter;
		}
コード例 #8
0
        internal MetadataPropertyInfo(IMetadataImport importer, int fieldToken, MetadataType declaringType)
        {
            m_importer      = importer;
            m_fieldToken    = fieldToken;
            m_declaringType = declaringType;

            // Initialize
            int    mdTypeDef;
            int    pchProp, pcbSigBlob, pdwCPlusTypeFlab, pcchValue, pdwAttr, pmdSetter, pmdGetter;
            IntPtr ppvSigBlob;
            IntPtr ppvRawValue;

            int rmdOtherMethod;
            int pcOtherMethod;

            m_importer.GetPropertyProps(m_fieldToken,
                                        out mdTypeDef,
                                        null,
                                        0,
                                        out pchProp,
                                        out pdwAttr,
                                        out ppvSigBlob,
                                        out pcbSigBlob,
                                        out pdwCPlusTypeFlab,
                                        out ppvRawValue,
                                        out pcchValue,
                                        out pmdSetter,
                                        out pmdGetter,
                                        out rmdOtherMethod,
                                        0,
                                        out pcOtherMethod
                                        );

            StringBuilder szField = new StringBuilder(pchProp);

            m_importer.GetPropertyProps(m_fieldToken,
                                        out mdTypeDef,
                                        szField,
                                        szField.Capacity,
                                        out pchProp,
                                        out pdwAttr,
                                        out ppvSigBlob,
                                        out pcbSigBlob,
                                        out pdwCPlusTypeFlab,
                                        out ppvRawValue,
                                        out pcchValue,
                                        out pmdSetter,
                                        out pmdGetter,
                                        out rmdOtherMethod,
                                        0,
                                        out pcOtherMethod
                                        );

            if (m_importer.IsValidToken((uint)pmdGetter))
            {
                getterInfo = new MetadataMethodInfo(m_importer, pmdGetter);
                if (ContainsAttribute(getterInfo.Attributes, MethodAttributes.Static))
                {
                    IsStatic = true;
                }
                if (ContainsAttribute(getterInfo.Attributes, MethodAttributes.Public))
                {
                    IsPublic = true;
                }
                if (ContainsAttribute(getterInfo.Attributes, MethodAttributes.Public) && !ContainsAttribute(getterInfo.Attributes, MethodAttributes.Abstract))
                {
                    canRead = true;
                }
            }

            if (m_importer.IsValidToken((uint)pmdSetter))
            {
                setterInfo = new MetadataMethodInfo(m_importer, pmdSetter);
                if (getterInfo == null && (setterInfo.Attributes & MethodAttributes.Static) == MethodAttributes.Static)
                {
                    IsStatic = true;
                }

                if (ContainsAttribute(setterInfo.Attributes, MethodAttributes.Public) && !ContainsAttribute(setterInfo.Attributes, MethodAttributes.Abstract))
                {
                    canWrite = true;
                }
            }

            m_propertyAttributes = (PropertyAttributes)pdwAttr;

            m_name = szField.ToString();
        }