summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/UnitySerializationHolder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/UnitySerializationHolder.cs')
-rw-r--r--src/mscorlib/src/System/UnitySerializationHolder.cs357
1 files changed, 0 insertions, 357 deletions
diff --git a/src/mscorlib/src/System/UnitySerializationHolder.cs b/src/mscorlib/src/System/UnitySerializationHolder.cs
deleted file mode 100644
index 712391a915..0000000000
--- a/src/mscorlib/src/System/UnitySerializationHolder.cs
+++ /dev/null
@@ -1,357 +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.Runtime.Remoting;
-using System.Runtime.Serialization;
-using System.Reflection;
-using System.Globalization;
-using System.Runtime.Versioning;
-using System.Collections.Generic;
-using System.Diagnostics.Contracts;
-
-namespace System {
-
- [Serializable]
- // Holds classes (Empty, Null, Missing) for which we guarantee that there is only ever one instance of.
- internal class UnitySerializationHolder : ISerializable, IObjectReference
- {
- #region Internal Constants
- internal const int EmptyUnity = 0x0001;
- internal const int NullUnity = 0x0002;
- internal const int MissingUnity = 0x0003;
- internal const int RuntimeTypeUnity = 0x0004;
- internal const int ModuleUnity = 0x0005;
- internal const int AssemblyUnity = 0x0006;
- internal const int GenericParameterTypeUnity = 0x0007;
- internal const int PartialInstantiationTypeUnity = 0x0008;
-
- internal const int Pointer = 0x0001;
- internal const int Array = 0x0002;
- internal const int SzArray = 0x0003;
- internal const int ByRef = 0x0004;
- #endregion
-
- #region Internal Static Members
- internal static void GetUnitySerializationInfo(SerializationInfo info, Missing missing)
- {
- info.SetType(typeof(UnitySerializationHolder));
- info.AddValue("UnityType", MissingUnity);
- }
-
- internal static RuntimeType AddElementTypes(SerializationInfo info, RuntimeType type)
- {
- List<int> elementTypes = new List<int>();
- while(type.HasElementType)
- {
- if (type.IsSzArray)
- {
- elementTypes.Add(SzArray);
- }
- else if (type.IsArray)
- {
- elementTypes.Add(type.GetArrayRank());
- elementTypes.Add(Array);
- }
- else if (type.IsPointer)
- {
- elementTypes.Add(Pointer);
- }
- else if (type.IsByRef)
- {
- elementTypes.Add(ByRef);
- }
-
- type = (RuntimeType)type.GetElementType();
- }
-
- info.AddValue("ElementTypes", elementTypes.ToArray(), typeof(int[]));
-
- return type;
- }
-
- internal Type MakeElementTypes(Type type)
- {
- for (int i = m_elementTypes.Length - 1; i >= 0; i --)
- {
- if (m_elementTypes[i] == SzArray)
- {
- type = type.MakeArrayType();
- }
- else if (m_elementTypes[i] == Array)
- {
- type = type.MakeArrayType(m_elementTypes[--i]);
- }
- else if ((m_elementTypes[i] == Pointer))
- {
- type = type.MakePointerType();
- }
- else if ((m_elementTypes[i] == ByRef))
- {
- type = type.MakeByRefType();
- }
- }
-
- return type;
- }
-
- internal static void GetUnitySerializationInfo(SerializationInfo info, RuntimeType type)
- {
- if (type.GetRootElementType().IsGenericParameter)
- {
- type = AddElementTypes(info, type);
- info.SetType(typeof(UnitySerializationHolder));
- info.AddValue("UnityType", GenericParameterTypeUnity);
- info.AddValue("GenericParameterPosition", type.GenericParameterPosition);
- info.AddValue("DeclaringMethod", type.DeclaringMethod, typeof(MethodBase));
- info.AddValue("DeclaringType", type.DeclaringType, typeof(Type));
-
- return;
- }
-
- int unityType = RuntimeTypeUnity;
-
- if (!type.IsGenericTypeDefinition && type.ContainsGenericParameters)
- {
- // Partial instantiation
- unityType = PartialInstantiationTypeUnity;
- type = AddElementTypes(info, type);
- info.AddValue("GenericArguments", type.GetGenericArguments(), typeof(Type[]));
- type = (RuntimeType)type.GetGenericTypeDefinition();
- }
-
- GetUnitySerializationInfo(info, unityType, type.FullName, type.GetRuntimeAssembly());
- }
-
- internal static void GetUnitySerializationInfo(
- SerializationInfo info, int unityType, String data, RuntimeAssembly assembly)
- {
- // A helper method that returns the SerializationInfo that a class utilizing
- // UnitySerializationHelper should return from a call to GetObjectData. It contains
- // the unityType (defined above) and any optional data (used only for the reflection
- // types.)
-
- info.SetType(typeof(UnitySerializationHolder));
- info.AddValue("Data", data, typeof(String));
- info.AddValue("UnityType", unityType);
-
- String assemName;
-
- if (assembly == null)
- {
- assemName = String.Empty;
- }
- else
- {
- assemName = assembly.FullName;
- }
-
- info.AddValue("AssemblyName", assemName);
- }
- #endregion
-
- #region Private Data Members
- private Type[] m_instantiation;
- private int[] m_elementTypes;
- private int m_genericParameterPosition;
- private Type m_declaringType;
- private MethodBase m_declaringMethod;
- private String m_data;
- private String m_assemblyName;
- private int m_unityType;
- #endregion
-
- #region Constructor
- internal UnitySerializationHolder(SerializationInfo info, StreamingContext context)
- {
- if (info == null)
- throw new ArgumentNullException(nameof(info));
- Contract.EndContractBlock();
-
- m_unityType = info.GetInt32("UnityType");
-
- if (m_unityType == MissingUnity)
- return;
-
- if (m_unityType == GenericParameterTypeUnity)
- {
- m_declaringMethod = info.GetValue("DeclaringMethod", typeof(MethodBase)) as MethodBase;
- m_declaringType = info.GetValue("DeclaringType", typeof(Type)) as Type;
- m_genericParameterPosition = info.GetInt32("GenericParameterPosition");
- m_elementTypes = info.GetValue("ElementTypes", typeof(int[])) as int[];
-
- return;
- }
-
- if (m_unityType == PartialInstantiationTypeUnity)
- {
- m_instantiation = info.GetValue("GenericArguments", typeof(Type[])) as Type[];
- m_elementTypes = info.GetValue("ElementTypes", typeof(int[])) as int[];
- }
-
- m_data = info.GetString("Data");
- m_assemblyName = info.GetString("AssemblyName");
- }
- #endregion
-
- #region Private Methods
- private void ThrowInsufficientInformation(string field)
- {
- throw new SerializationException(
- Environment.GetResourceString("Serialization_InsufficientDeserializationState", field));
- }
- #endregion
-
- #region ISerializable
- public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- throw new NotSupportedException(Environment.GetResourceString("NotSupported_UnitySerHolder"));
- }
- #endregion
-
- #region IObjectReference
- public virtual Object GetRealObject(StreamingContext context)
- {
- // GetRealObject uses the data we have in m_data and m_unityType to do a lookup on the correct
- // object to return. We have specific code here to handle the different types which we support.
- // The reflection types (Assembly, Module, and Type) have to be looked up through their static
- // accessors by name.
-
- Assembly assembly;
-
- switch (m_unityType)
- {
- case EmptyUnity:
- {
- return Empty.Value;
- }
-
- case NullUnity:
- {
- return DBNull.Value;
- }
-
- case MissingUnity:
- {
- return Missing.Value;
- }
-
- case PartialInstantiationTypeUnity:
- {
- m_unityType = RuntimeTypeUnity;
- Type definition = GetRealObject(context) as Type;
- m_unityType = PartialInstantiationTypeUnity;
-
- if (m_instantiation[0] == null)
- return null;
-
- return MakeElementTypes(definition.MakeGenericType(m_instantiation));
- }
-
- case GenericParameterTypeUnity:
- {
- if (m_declaringMethod == null && m_declaringType == null)
- ThrowInsufficientInformation("DeclaringMember");
-
- if (m_declaringMethod != null)
- return m_declaringMethod.GetGenericArguments()[m_genericParameterPosition];
-
- return MakeElementTypes(m_declaringType.GetGenericArguments()[m_genericParameterPosition]);
- }
-
- case RuntimeTypeUnity:
- {
- if (m_data == null || m_data.Length == 0)
- ThrowInsufficientInformation("Data");
-
- if (m_assemblyName == null)
- ThrowInsufficientInformation("AssemblyName");
-
- if (m_assemblyName.Length == 0)
- return Type.GetType(m_data, true, false);
-
- assembly = Assembly.Load(m_assemblyName);
-
- Type t = assembly.GetType(m_data, true, false);
-
- return t;
- }
-
- case ModuleUnity:
- {
- if (m_data == null || m_data.Length == 0)
- ThrowInsufficientInformation("Data");
-
- if (m_assemblyName == null)
- ThrowInsufficientInformation("AssemblyName");
-
- assembly = Assembly.Load(m_assemblyName);
-
- Module namedModule = assembly.GetModule(m_data);
-
- if (namedModule == null)
- throw new SerializationException(
- Environment.GetResourceString("Serialization_UnableToFindModule", m_data, m_assemblyName));
-
- return namedModule;
- }
-
- case AssemblyUnity:
- {
- if (m_data == null || m_data.Length == 0)
- ThrowInsufficientInformation("Data");
-
- if (m_assemblyName == null)
- ThrowInsufficientInformation("AssemblyName");
-
- assembly = Assembly.Load(m_assemblyName);
-
- return assembly;
- }
-
- default:
- throw new ArgumentException(Environment.GetResourceString("Argument_InvalidUnity"));
- }
- }
- #endregion
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-