summaryrefslogtreecommitdiff
path: root/src/mscorlib/Common
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2017-03-21 16:24:52 -0700
committerJan Kotas <jkotas@microsoft.com>2017-03-21 16:24:52 -0700
commit6d32a5152ef43752c72ff8dbbe9fbc635a55df13 (patch)
tree24cebdb25cc9c798d280881e208f044ea15d3148 /src/mscorlib/Common
parent68012bf209f37ab5b5b11a02b203f2949d1ef8dc (diff)
downloadcoreclr-6d32a5152ef43752c72ff8dbbe9fbc635a55df13.tar.gz
coreclr-6d32a5152ef43752c72ff8dbbe9fbc635a55df13.tar.bz2
coreclr-6d32a5152ef43752c72ff8dbbe9fbc635a55df13.zip
Revert "Switch coreclr corelib to use resx (#10268)"
This reverts commit 12ef04c22b07f1e4ec5a63009298e4537a2c8e1a.
Diffstat (limited to 'src/mscorlib/Common')
-rw-r--r--src/mscorlib/Common/System/SR.cs197
1 files changed, 0 insertions, 197 deletions
diff --git a/src/mscorlib/Common/System/SR.cs b/src/mscorlib/Common/System/SR.cs
deleted file mode 100644
index 29f3970633..0000000000
--- a/src/mscorlib/Common/System/SR.cs
+++ /dev/null
@@ -1,197 +0,0 @@
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for more information.
-
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Resources;
-using System.Runtime.CompilerServices;
-using System.Threading;
-
-namespace System
-{
- internal static partial class SR
- {
- private static ResourceManager ResourceManager
- {
- get;
- set;
- }
-
- // This method is used to decide if we need to append the exception message parameters to the message when calling SR.Format.
- // by default it returns false.
- [MethodImpl(MethodImplOptions.NoInlining)]
- private static bool UsingResourceKeys()
- {
- return false;
- }
-
- // Needed for debugger integration
- internal static string GetResourceString(string resourceKey)
- {
- return GetResourceString(resourceKey, String.Empty);
- }
-
- internal static string GetResourceString(string resourceKey, string defaultString)
- {
- string resourceString = null;
- try { resourceString = InternalGetResourceString(resourceKey); }
- catch (MissingManifestResourceException) { }
-
- if (defaultString != null && resourceKey.Equals(resourceString, StringComparison.Ordinal))
- {
- return defaultString;
- }
-
- return resourceString;
- }
-
- private static object _lock = new object();
- private static List<string> _currentlyLoading;
- private static int _infinitelyRecursingCount;
- private static bool _resourceManagerInited = false;
-
- private static string InternalGetResourceString(string key)
- {
- if (key == null || key.Length == 0)
- {
- Debug.Assert(false, "SR::GetResourceString with null or empty key. Bug in caller, or weird recursive loading problem?");
- return key;
- }
-
- // We have a somewhat common potential for infinite
- // loops with mscorlib's ResourceManager. If "potentially dangerous"
- // code throws an exception, we will get into an infinite loop
- // inside the ResourceManager and this "potentially dangerous" code.
- // Potentially dangerous code includes the IO package, CultureInfo,
- // parts of the loader, some parts of Reflection, Security (including
- // custom user-written permissions that may parse an XML file at
- // class load time), assembly load event handlers, etc. Essentially,
- // this is not a bounded set of code, and we need to fix the problem.
- // Fortunately, this is limited to mscorlib's error lookups and is NOT
- // a general problem for all user code using the ResourceManager.
-
- // The solution is to make sure only one thread at a time can call
- // GetResourceString. Also, since resource lookups can be
- // reentrant, if the same thread comes into GetResourceString
- // twice looking for the exact same resource name before
- // returning, we're going into an infinite loop and we should
- // return a bogus string.
-
- bool lockTaken = false;
- try
- {
- Monitor.Enter(_lock, ref lockTaken);
-
- // Are we recursively looking up the same resource? Note - our backout code will set
- // the ResourceHelper's currentlyLoading stack to null if an exception occurs.
- if (_currentlyLoading != null && _currentlyLoading.Count > 0 && _currentlyLoading.LastIndexOf(key) != -1)
- {
- // We can start infinitely recursing for one resource lookup,
- // then during our failure reporting, start infinitely recursing again.
- // avoid that.
- if (_infinitelyRecursingCount > 0)
- {
- return key;
- }
- _infinitelyRecursingCount++;
-
- // Note: our infrastructure for reporting this exception will again cause resource lookup.
- // This is the most direct way of dealing with that problem.
- string message = $"Infinite recursion during resource lookup within {System.CoreLib.Name}. This may be a bug in {System.CoreLib.Name}, or potentially in certain extensibility points such as assembly resolve events or CultureInfo names. Resource name: {key}";
- Assert.Fail("[Recursive resource lookup bug]", message, Assert.COR_E_FAILFAST, System.Diagnostics.StackTrace.TraceFormat.NoResourceLookup);
- Environment.FailFast(message);
- }
- if (_currentlyLoading == null)
- _currentlyLoading = new List<string>();
-
- // Call class constructors preemptively, so that we cannot get into an infinite
- // loop constructing a TypeInitializationException. If this were omitted,
- // we could get the Infinite recursion assert above by failing type initialization
- // between the Push and Pop calls below.
- if (!_resourceManagerInited)
- {
- RuntimeHelpers.RunClassConstructor(typeof(ResourceManager).TypeHandle);
- RuntimeHelpers.RunClassConstructor(typeof(ResourceReader).TypeHandle);
- RuntimeHelpers.RunClassConstructor(typeof(RuntimeResourceSet).TypeHandle);
- RuntimeHelpers.RunClassConstructor(typeof(BinaryReader).TypeHandle);
- _resourceManagerInited = true;
- }
-
- _currentlyLoading.Add(key); // Push
-
- if (ResourceManager == null)
- {
- ResourceManager = new ResourceManager(SR.ResourceType);
- }
- string s = ResourceManager.GetString(key, null);
- _currentlyLoading.RemoveAt(_currentlyLoading.Count - 1); // Pop
-
- Debug.Assert(s != null, "Managed resource string lookup failed. Was your resource name misspelled? Did you rebuild mscorlib after adding a resource to resources.txt? Debug this w/ cordbg and bug whoever owns the code that called SR.GetResourceString. Resource name was: \"" + key + "\"");
- return s ?? key;
- }
- catch
- {
- if (lockTaken)
- {
- // Backout code - throw away potentially corrupt state
- ResourceManager = null;
- _currentlyLoading = null;
- }
- throw;
- }
- finally
- {
- if (lockTaken)
- {
- Monitor.Exit(_lock);
- }
- }
- }
-
- internal static string Format(string resourceFormat, params object[] args)
- {
- if (args != null)
- {
- if (UsingResourceKeys())
- {
- return resourceFormat + String.Join(", ", args);
- }
-
- return String.Format(resourceFormat, args);
- }
-
- return resourceFormat;
- }
-
- internal static string Format(string resourceFormat, object p1)
- {
- if (UsingResourceKeys())
- {
- return String.Join(", ", resourceFormat, p1);
- }
-
- return String.Format(resourceFormat, p1);
- }
-
- internal static string Format(string resourceFormat, object p1, object p2)
- {
- if (UsingResourceKeys())
- {
- return String.Join(", ", resourceFormat, p1, p2);
- }
-
- return String.Format(resourceFormat, p1, p2);
- }
-
- internal static string Format(string resourceFormat, object p1, object p2, object p3)
- {
- if (UsingResourceKeys())
- {
- return String.Join(", ", resourceFormat, p1, p2, p3);
- }
- return String.Format(resourceFormat, p1, p2, p3);
- }
- }
-}