Merge pull request #1135 from kitsilanosoftware/rpm-spec-dead-entries
[mono.git] / mcs / class / corlib / System.Collections.ObjectModel / ReadOnlyCollection.cs
index 699b1c401df61b1a489ede694a96b7e2c3ca5a8e..7b0510ec9954fb937d1cf1a08351f2befddf3cce 100644 (file)
@@ -2,9 +2,10 @@
 //
 // System.Collections.ObjectModel.ReadOnlyCollection
 //
-// Author:
+// Authors:
 //    Zoltan Varga (vargaz@gmail.com)
 //    David Waite (mass@akuma.org)
+//    Marek Safar (marek.safar@gmail.com)
 //
 // (C) 2005 Novell, Inc.
 // (C) 2005 David Waite
@@ -13,6 +14,7 @@
 //
 // Copyright (C) 2005 Novell, Inc (http://www.novell.com)
 // Copyright (C) 2005 David Waite
+// Copyright (C) 2011 Xamarin, Inc (http://www.xamarin.com)
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_2_0
 using System;
 using System.Collections.Generic;
 using System.Runtime.InteropServices;
+using System.Diagnostics;
 
 namespace System.Collections.ObjectModel
 {
        [ComVisible (false)]
        [Serializable]
-       public class ReadOnlyCollection <T> : IList <T>, ICollection <T>, IEnumerable <T>, IList, ICollection, IEnumerable
+       [DebuggerDisplay ("Count={Count}")]
+       [DebuggerTypeProxy (typeof (CollectionDebuggerView<>))]
+       public class ReadOnlyCollection<T> : IList<T>, IList
+#if NET_4_5
+               , IReadOnlyList<T>
+#endif
        {
                IList <T> list;
-               object syncRoot;
                
                public ReadOnlyCollection (IList <T> list)
                {
                        if (list == null)
                                throw new ArgumentNullException ("list");
                        this.list = list;
-                       ICollection c = list as ICollection;
-                       syncRoot = (c != null) ? c.SyncRoot : new object ();
                }
 
                void ICollection<T>.Add (T item)
@@ -67,9 +71,9 @@ namespace System.Collections.ObjectModel
                        throw new NotSupportedException ();
                }
 
-               public bool Contains (T item)
+               public bool Contains (T value)
                {
-                       return list.Contains (item);
+                       return list.Contains (value);
                }
 
                public void CopyTo (T [] array, int index)
@@ -82,9 +86,9 @@ namespace System.Collections.ObjectModel
                        return list.GetEnumerator ();
                }
 
-               public int IndexOf (T item)
+               public int IndexOf (T value)
                {
-                       return list.IndexOf (item);
+                       return list.IndexOf (value);
                }
 
                void IList<T>.Insert (int index, T item)
@@ -124,12 +128,9 @@ namespace System.Collections.ObjectModel
                }
 
 #region Not generic interface implementations
-               void ICollection.CopyTo (Array array, int arrayIndex)
+               void ICollection.CopyTo (Array array, int index)
                {
-                       T [] target = array as T [];
-                       if (target == null)
-                               throw new ArgumentException ("array");
-                       list.CopyTo (target, arrayIndex);
+                       ((ICollection)list).CopyTo (array, index);
                }
                                
                IEnumerator IEnumerable.GetEnumerator ()
@@ -137,7 +138,7 @@ namespace System.Collections.ObjectModel
                        return ((IEnumerable) list).GetEnumerator ();
                }
                
-               int IList.Add (object item)
+               int IList.Add (object value)
                {
                        throw new NotSupportedException ();
                }
@@ -147,26 +148,26 @@ namespace System.Collections.ObjectModel
                        throw new NotSupportedException ();
                }
 
-               bool IList.Contains (object item)
+               bool IList.Contains (object value)
                {
-                       if (Collection <T>.IsValidItem (item))
-                               return list.Contains ((T) item);
+                       if (CollectionHelpers.IsValidItem<T> (value))
+                               return list.Contains ((T) value);
                        return false;
                }
                
-               int IList.IndexOf (object item)
+               int IList.IndexOf (object value)
                {
-                       if (Collection <T>.IsValidItem (item))
-                               return list.IndexOf ((T) item);
+                       if (CollectionHelpers.IsValidItem<T> (value))
+                               return list.IndexOf ((T) value);
                        return -1;
                }
                
-               void IList.Insert (int index, object item)
+               void IList.Insert (int index, object value)
                {
                        throw new NotSupportedException ();
                }
                
-               void IList.Remove (object item)
+               void IList.Remove (object value)
                {
                        throw new NotSupportedException ();
                }
@@ -177,15 +178,15 @@ namespace System.Collections.ObjectModel
                }
 
                bool ICollection.IsSynchronized {
-                       get { return Collection <T>.IsSynchronized (list); }
+                       get { return false; }
                }
                
                object ICollection.SyncRoot {
-                       get { return syncRoot; }
+                       get { return this; }
                }
 
                bool IList.IsFixedSize {
-                       get { return Collection <T>.IsFixedSize (list); }
+                       get { return true; }
                }
                
                bool IList.IsReadOnly {
@@ -199,4 +200,3 @@ namespace System.Collections.ObjectModel
 #endregion
        }
 }
-#endif