Avoid random failure in CountdownEvent unit test
[mono.git] / mcs / class / corlib / System.Reflection.Emit / PropertyBuilder.cs
index 8f7c2a4bb49faac3464fe1401819f0d56569f779..6bbfff10e6d631db9f6c66d44a74632da5683ff0 100644 (file)
@@ -39,12 +39,13 @@ using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 
 namespace System.Reflection.Emit {
-#if NET_2_0
        [ComVisible (true)]
        [ComDefaultInterface (typeof (_PropertyBuilder))]
-#endif
        [ClassInterface (ClassInterfaceType.None)]
        public sealed class PropertyBuilder : PropertyInfo, _PropertyBuilder {
+
+// Managed version of MonoReflectionPropertyBuilder
+#pragma warning disable 169, 414
                private PropertyAttributes attrs;
                private string name;
                private Type type;
@@ -59,10 +60,14 @@ namespace System.Reflection.Emit {
                private Type[] returnModOpt;
                private Type[][] paramModReq;
                private Type[][] paramModOpt;
+               CallingConventions callingConvention;           
+#pragma warning restore 169, 414
                
-               internal PropertyBuilder (TypeBuilder tb, string name, PropertyAttributes attributes, Type returnType, Type[] returnModReq, Type[] returnModOpt, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt) {
+               internal PropertyBuilder (TypeBuilder tb, string name, PropertyAttributes attributes, CallingConventions callingConvention, Type returnType, Type[] returnModReq, Type[] returnModOpt, Type[] parameterTypes, Type[][] paramModReq, Type[][] paramModOpt)
+               {
                        this.name = name;
                        this.attrs = attributes;
+                       this.callingConvention = callingConvention;
                        this.type = returnType;
                        this.returnModReq = returnModReq;
                        this.returnModOpt = returnModOpt;
@@ -106,16 +111,16 @@ namespace System.Reflection.Emit {
                        return null;
                }
                public override object[] GetCustomAttributes(bool inherit) {
-                       return null;
+                       throw not_supported ();
                }
                public override object[] GetCustomAttributes(Type attributeType, bool inherit) {
-                       return null;
+                       throw not_supported ();
                }
                public override MethodInfo GetGetMethod( bool nonPublic) {
                        return get_method;
                }
                public override ParameterInfo[] GetIndexParameters() {
-                       return null;
+                       throw not_supported ();
                }
                public override MethodInfo GetSetMethod( bool nonPublic) {
                        return set_method;
@@ -124,15 +129,21 @@ namespace System.Reflection.Emit {
                        return null;
                }
                public override object GetValue( object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) {
-                       return null;
+                       throw not_supported ();
                }
                public override bool IsDefined( Type attributeType, bool inherit) {
-                       return false;
+                       throw not_supported ();
                }
                public void SetConstant( object defaultValue) {
                        def_value = defaultValue;
                }
                public void SetCustomAttribute( CustomAttributeBuilder customBuilder) {
+                       string attrname = customBuilder.Ctor.ReflectedType.FullName;
+                       if (attrname == "System.Runtime.CompilerServices.SpecialNameAttribute") {
+                               attrs |= PropertyAttributes.SpecialName;
+                               return;
+                       }
+
                        if (cattrs != null) {
                                CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
                                cattrs.CopyTo (new_array, 0);
@@ -144,9 +155,7 @@ namespace System.Reflection.Emit {
                        }
                }
 
-#if NET_2_0
                [ComVisible (true)]
-#endif
                public void SetCustomAttribute( ConstructorInfo con, byte[] binaryAttribute) {
                        SetCustomAttribute (new CustomAttributeBuilder (con, binaryAttribute));
                }
@@ -161,13 +170,11 @@ namespace System.Reflection.Emit {
                public override void SetValue( object obj, object value, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) {
                }
 
-#if NET_2_0
                public override Module Module {
                        get {
                                return base.Module;
                        }
                }
-#endif
 
                 void _PropertyBuilder.GetIDsOfNames([In] ref Guid riid, IntPtr rgszNames, uint cNames, uint lcid, IntPtr rgDispId)
                 {
@@ -188,6 +195,11 @@ namespace System.Reflection.Emit {
                 {
                         throw new NotImplementedException ();
                 }
+
+               private Exception not_supported ()
+               {
+                       return new NotSupportedException ("The invoked member is not supported in a dynamic module.");
+               }
        }
 }