Partial revert "Move a few more files to shared CoreLib partition" (dotnet/coreclr...
authorJan Kotas <jkotas@microsoft.com>
Tue, 2 May 2017 03:10:26 +0000 (20:10 -0700)
committerDan Moseley <danmose@microsoft.com>
Tue, 2 May 2017 03:10:26 +0000 (20:10 -0700)
Revert change from Hashtable to Dictionary

Commit migrated from https://github.com/dotnet/coreclr/commit/9501a3b59923bf9c1fea780dc97a342692a8c2ea

src/coreclr/src/mscorlib/System.Private.CoreLib.csproj
src/coreclr/src/mscorlib/shared/System.Private.CoreLib.Shared.projitems
src/coreclr/src/mscorlib/src/System/Resources/ResourceSet.cs [moved from src/coreclr/src/mscorlib/shared/System/Resources/ResourceSet.cs with 82% similarity]

index a7fb42b..161134d 100644 (file)
     <Compile Include="$(BclSourcesRoot)\System\Resources\ManifestBasedResourceGroveler.cs" />
     <Compile Include="$(BclSourcesRoot)\System\Resources\ResourceManager.cs" />
     <Compile Include="$(BclSourcesRoot)\System\Resources\ResourceReader.cs" />
+    <Compile Include="$(BclSourcesRoot)\System\Resources\ResourceSet.cs" />
   </ItemGroup>
   <ItemGroup>
     <Compile Include="$(BclSourcesRoot)\System\Nullable.cs" />
index 00d0796..df66f1b 100644 (file)
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\MissingSatelliteAssemblyException.cs"/>
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\NeutralResourcesLanguageAttribute.cs"/>
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\ResourceFallbackManager.cs"/>
-    <Compile Include="$(MSBuildThisFileDirectory)System\Resources\ResourceSet.cs"/>
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\ResourceTypeCode.cs"/>
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\RuntimeResourceSet.cs"/>
     <Compile Include="$(MSBuildThisFileDirectory)System\Resources\SatelliteContractVersionAttribute.cs"/>
@@ -35,11 +35,10 @@ namespace System.Resources
     [Serializable]
     public class ResourceSet : IDisposable, IEnumerable
     {
-        [NonSerialized]
-        protected IResourceReader Reader;
+        [NonSerialized] protected IResourceReader Reader;
+        internal Hashtable Table;
 
-        private Dictionary<object, object> _table;
-        private Dictionary<object, object> _caseInsensitiveTable;  // For case-insensitive lookups.
+        private Hashtable _caseInsensitiveTable;  // For case-insensitive lookups.
 
         protected ResourceSet()
         {
@@ -88,7 +87,7 @@ namespace System.Resources
 
         private void CommonInit()
         {
-            _table = new Dictionary<object, object>();
+            Table = new Hashtable();
         }
 
         // Closes and releases any resources used by this ResourceSet, if any.
@@ -112,7 +111,7 @@ namespace System.Resources
             }
             Reader = null;
             _caseInsensitiveTable = null;
-            _table = null;
+            Table = null;
         }
 
         public void Dispose()
@@ -149,7 +148,7 @@ namespace System.Resources
 
         private IDictionaryEnumerator GetEnumeratorHelper()
         {
-            Dictionary<object, object> copyOfTable = _table;  // Avoid a race with Dispose
+            Hashtable copyOfTable = Table;  // Avoid a race with Dispose
             if (copyOfTable == null)
                 throw new ObjectDisposedException(null, SR.ObjectDisposed_ResourceSet);
             return copyOfTable.GetEnumerator();
@@ -227,7 +226,7 @@ namespace System.Resources
             while (en.MoveNext())
             {
                 Object value = en.Value;
-                _table.Add(en.Key, value);
+                Table.Add(en.Key, value);
             }
             // While technically possible to close the Reader here, don't close it
             // to help with some WinRes lifetime issues.
@@ -236,10 +235,10 @@ namespace System.Resources
         private Object GetObjectInternal(String name)
         {
             if (name == null)
-                throw new ArgumentNullException("name");
+                throw new ArgumentNullException(nameof(name));
             Contract.EndContractBlock();
 
-            Dictionary<object, object> copyOfTable = _table;  // Avoid a race with Dispose
+            Hashtable copyOfTable = Table;  // Avoid a race with Dispose
 
             if (copyOfTable == null)
                 throw new ObjectDisposedException(null, SR.ObjectDisposed_ResourceSet);
@@ -249,15 +248,15 @@ namespace System.Resources
 
         private Object GetCaseInsensitiveObjectInternal(String name)
         {
-            Dictionary<object, object> copyOfTable = _table;  // Avoid a race with Dispose
+            Hashtable copyOfTable = Table;  // Avoid a race with Dispose
 
             if (copyOfTable == null)
                 throw new ObjectDisposedException(null, SR.ObjectDisposed_ResourceSet);
 
-            Dictionary<object, object> caseTable = _caseInsensitiveTable;  // Avoid a race condition with Close
+            Hashtable caseTable = _caseInsensitiveTable;  // Avoid a race condition with Close
             if (caseTable == null)
             {
-                caseTable = new Dictionary<object, object>(CaseInsensitiveStringObjectComparer.Instance);
+                caseTable = new Hashtable(StringComparer.OrdinalIgnoreCase);
 
                 IDictionaryEnumerator en = copyOfTable.GetEnumerator();
                 while (en.MoveNext())
@@ -269,25 +268,5 @@ namespace System.Resources
 
             return caseTable[name];
         }
-
-        /// <summary>
-        /// Adapter for StringComparer.OrdinalIgnoreCase to allow it to be used with Dictionary
-        /// </summary>
-        private class CaseInsensitiveStringObjectComparer : IEqualityComparer<object>
-        {
-            public static CaseInsensitiveStringObjectComparer Instance { get; } = new CaseInsensitiveStringObjectComparer();
-
-            private CaseInsensitiveStringObjectComparer() { }
-
-            public new bool Equals(object x, object y)
-            {
-                return ((IEqualityComparer)StringComparer.OrdinalIgnoreCase).Equals(x, y);
-            }
-
-            public int GetHashCode(object obj)
-            {
-                return ((IEqualityComparer)StringComparer.OrdinalIgnoreCase).GetHashCode(obj);
-            }
-        }
     }
 }