Fix #328490
[mono.git] / mcs / class / System / System.ComponentModel / ProvidePropertyAttribute.cs
index 001ddc612b97520f4d1d3bc97edb19119d9c08b1..da55abc11489b633252dc0f488740a866b435e00 100644 (file)
@@ -1,59 +1,84 @@
 //
-// System.ComponentModel.ProvidePropertyAttribute
+// System.ComponentModel.ProvidePropertyAttribute.cs
 //
 // Authors:
-//      Martin Willemoes Hansen (mwh@sysrq.dk)
+//  Martin Willemoes Hansen (mwh@sysrq.dk)
+//  Andreas Nahr (ClassDevelopment@A-SoftTech.com)
 //
 // (C) 2003 Martin Willemoes Hansen
+// (C) 2003 Andreas Nahr
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
 namespace System.ComponentModel
 {
-       [AttributeUsage(AttributeTargets.Class)]
-        public sealed class ProvidePropertyAttribute : Attribute
+       [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
+       public sealed class ProvidePropertyAttribute : Attribute
        {
-               [MonoTODO]
-               public ProvidePropertyAttribute (string propertyName,
-                                                string receiverTypeName)
+
+               private string Property;
+               private string Receiver;
+
+               public ProvidePropertyAttribute (string propertyName, string receiverTypeName)
                {
+                       Property = propertyName;
+                       Receiver = receiverTypeName;
                }
 
-               [MonoTODO]
-               public ProvidePropertyAttribute (string propertyName, 
-                                                Type receiverType)
+               public ProvidePropertyAttribute (string propertyName, Type receiverType)
                {
+                       Property = propertyName;
+                       Receiver = receiverType.AssemblyQualifiedName;
                }
 
                public string PropertyName {
-                       [MonoTODO]
-                       get { throw new NotImplementedException(); }
+                       get { return Property; }
                }
 
                public string ReceiverTypeName {
-                       [MonoTODO]
-                       get { throw new NotImplementedException(); }
+                       get { return Receiver; }
                }
 
                public override object TypeId {
-                       [MonoTODO]
-                       get { throw new NotImplementedException(); }
+                       get { 
+                               // seems to be MS implementation
+                               return base.TypeId + Property; 
+                       }
                }
 
-               [MonoTODO]
                public override bool Equals (object obj)
                {
-                       throw new NotImplementedException();
+                       if (!(obj is ProvidePropertyAttribute))
+                               return false;
+                       if (obj == this)
+                               return true;
+                       return (((ProvidePropertyAttribute) obj).PropertyName == Property) &&
+                               (((ProvidePropertyAttribute) obj).ReceiverTypeName == Receiver);
                }
 
-               [MonoTODO]
                public override int GetHashCode()
                {
-                       throw new NotImplementedException();
-               }
-
-               [MonoTODO]
-               ~ProvidePropertyAttribute()
-               {
+                       return (Property + Receiver).GetHashCode ();
                }
        }
 }