Fix Type.GetTypeFromHandle nullable annotation (#58901)
authorJan Kotas <jkotas@microsoft.com>
Fri, 10 Sep 2021 13:37:19 +0000 (06:37 -0700)
committerGitHub <noreply@github.com>
Fri, 10 Sep 2021 13:37:19 +0000 (09:37 -0400)
* Fix Type.GetTypeFromHandle nullable annotation

* Fix build warnings

* Fix warnings in System.Private.DataContractSerialization

15 files changed:
src/coreclr/System.Private.CoreLib/src/Internal/Runtime/InteropServices/ComActivator.cs
src/coreclr/System.Private.CoreLib/src/System/Type.CoreCLR.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/DataContract.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/Json/JsonXmlDataContract.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerReadContextComplex.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContext.cs
src/libraries/System.Private.DataContractSerialization/src/System/Runtime/Serialization/XmlObjectSerializerWriteContextComplex.cs
src/libraries/System.Runtime/ref/System.Runtime.cs
src/mono/System.Private.CoreLib/src/Mono/RuntimeHandles.cs
src/mono/System.Private.CoreLib/src/System/Reflection/Emit/DynamicILInfo.cs
src/mono/System.Private.CoreLib/src/System/Reflection/RuntimeModule.cs
src/mono/System.Private.CoreLib/src/System/RuntimeType.Mono.cs
src/mono/System.Private.CoreLib/src/System/RuntimeTypeHandle.cs
src/mono/System.Private.CoreLib/src/System/Type.Mono.cs

index 6fdf4b2..a00ecd1 100644 (file)
@@ -775,7 +775,7 @@ $@"{nameof(UnregisterClassForTypeInternal)} arguments:
         // See usage in native RCW code
         public void GetCurrentContextInfo(RuntimeTypeHandle rth, out bool isDesignTime, out IntPtr bstrKey)
         {
-            Type targetRcwTypeMaybe = Type.GetTypeFromHandle(rth);
+            Type targetRcwTypeMaybe = Type.GetTypeFromHandle(rth)!;
 
             // Types are as follows:
             // Type, out bool, out string -> LicenseContext
index 7a39e6e..cce1bcf 100644 (file)
@@ -92,7 +92,7 @@ namespace System
 
         [Intrinsic]
         [MethodImpl(MethodImplOptions.InternalCall)]
-        public static extern Type GetTypeFromHandle(RuntimeTypeHandle handle);
+        public static extern Type? GetTypeFromHandle(RuntimeTypeHandle handle);
 
         [Intrinsic]
         [MethodImpl(MethodImplOptions.InternalCall)]
index df131bf..1f0b078 100644 (file)
@@ -486,7 +486,7 @@ namespace System.Runtime.Serialization
                         if (dataContract == null)
                         {
                             if (type == null)
-                                type = Type.GetTypeFromHandle(typeHandle);
+                                type = Type.GetTypeFromHandle(typeHandle)!;
 
                             type = UnwrapNullableType(type);
 
@@ -570,7 +570,7 @@ namespace System.Runtime.Serialization
                     if (dataContract == null)
                     {
                         if (type == null)
-                            type = Type.GetTypeFromHandle(typeHandle);
+                            type = Type.GetTypeFromHandle(typeHandle)!;
                         type = UnwrapNullableType(type);
                         type = GetDataContractAdapterType(type);
                         if (!CollectionDataContract.TryCreateGetOnlyCollectionDataContract(type, out dataContract))
index cf5bf09..ecf6148 100644 (file)
@@ -46,7 +46,7 @@ namespace System.Runtime.Serialization.Json
         [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)]
         public override void WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson? context, RuntimeTypeHandle declaredTypeHandle)
         {
-            DataContractSerializer dataContractSerializer = new DataContractSerializer(Type.GetTypeFromHandle(declaredTypeHandle),
+            DataContractSerializer dataContractSerializer = new DataContractSerializer(Type.GetTypeFromHandle(declaredTypeHandle)!,
                 GetKnownTypesFromContext(context, (context == null) ? null : context.SerializerKnownTypeList), 1, false, false); //  maxItemsInObjectGraph //  ignoreExtensionDataObject //  preserveObjectReferences
 
             MemoryStream memoryStream = new MemoryStream();
index 0fa085b..dff884d 100644 (file)
@@ -94,7 +94,7 @@ namespace System.Runtime.Serialization
         internal virtual object? InternalDeserialize(XmlReaderDelegator xmlReader, int id, RuntimeTypeHandle declaredTypeHandle, string name, string ns)
         {
             DataContract dataContract = GetDataContract(id, declaredTypeHandle);
-            return InternalDeserialize(xmlReader, name, ns, Type.GetTypeFromHandle(declaredTypeHandle), ref dataContract);
+            return InternalDeserialize(xmlReader, name, ns, Type.GetTypeFromHandle(declaredTypeHandle)!, ref dataContract);
         }
 
         [RequiresUnreferencedCode(DataContract.SerializerTrimmerWarning)]
index 65d6c14..e8b0132 100644 (file)
@@ -39,11 +39,11 @@ namespace System.Runtime.Serialization
                 if (_serializationSurrogateProvider == null)
                     return base.InternalDeserialize(xmlReader, declaredTypeID, declaredTypeHandle, name, ns);
                 else
-                    return InternalDeserializeWithSurrogate(xmlReader, Type.GetTypeFromHandle(declaredTypeHandle), null /*surrogateDataContract*/, name, ns);
+                    return InternalDeserializeWithSurrogate(xmlReader, Type.GetTypeFromHandle(declaredTypeHandle)!, null /*surrogateDataContract*/, name, ns);
             }
             else
             {
-                return InternalDeserializeInSharedTypeMode(xmlReader, declaredTypeID, Type.GetTypeFromHandle(declaredTypeHandle), name, ns);
+                return InternalDeserializeInSharedTypeMode(xmlReader, declaredTypeID, Type.GetTypeFromHandle(declaredTypeHandle)!, name, ns);
             }
         }
 
index 967e304..5c333f6 100644 (file)
@@ -120,7 +120,7 @@ namespace System.Runtime.Serialization
                 }
                 else
                 {
-                    SerializeWithXsiType(xmlWriter, obj, objTypeHandle, null /*type*/, declaredTypeID, declaredTypeHandle, Type.GetTypeFromHandle(declaredTypeHandle));
+                    SerializeWithXsiType(xmlWriter, obj, objTypeHandle, null /*type*/, declaredTypeID, declaredTypeHandle, Type.GetTypeFromHandle(declaredTypeHandle)!);
                 }
             }
         }
@@ -179,7 +179,7 @@ namespace System.Runtime.Serialization
                 {
                     if (objectType == null)
                     {
-                        objectType = Type.GetTypeFromHandle(objectTypeHandle);
+                        objectType = Type.GetTypeFromHandle(objectTypeHandle)!;
                     }
                     WriteResolvedTypeInfo(xmlWriter, objectType, declaredType);
                 }
index dfa8221..b1abf32 100644 (file)
@@ -221,8 +221,8 @@ namespace System.Runtime.Serialization
             RuntimeTypeHandle objTypeHandle = isDeclaredType ? declaredTypeHandle : obj.GetType().TypeHandle;
             object oldObj = obj;
             int objOldId = 0;
-            Type objType = Type.GetTypeFromHandle(objTypeHandle);
-            Type declaredType = GetSurrogatedType(Type.GetTypeFromHandle(declaredTypeHandle));
+            Type objType = Type.GetTypeFromHandle(objTypeHandle)!;
+            Type declaredType = GetSurrogatedType(Type.GetTypeFromHandle(declaredTypeHandle)!);
 
             declaredTypeHandle = declaredType.TypeHandle;
 
index b617e4d..6177676 100644 (file)
@@ -6858,7 +6858,7 @@ namespace System
         public static System.Type? GetTypeFromCLSID(System.Guid clsid, string? server) { throw null; }
         [System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
         public static System.Type? GetTypeFromCLSID(System.Guid clsid, string? server, bool throwOnError) { throw null; }
-        public static System.Type GetTypeFromHandle(System.RuntimeTypeHandle handle) { throw null; }
+        public static System.Type? GetTypeFromHandle(System.RuntimeTypeHandle handle) { throw null; }
         [System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
         public static System.Type? GetTypeFromProgID(string progID) { throw null; }
         [System.Runtime.Versioning.SupportedOSPlatformAttribute("windows")]
index 7e655ad..c62dde6 100644 (file)
@@ -107,7 +107,7 @@ namespace Mono
             for (int i = 0; i < n; i++)
             {
                 RuntimeClassHandle c = new RuntimeClassHandle(value->constraints[i]);
-                a[i] = Type.GetTypeFromHandle(c.GetTypeHandle());
+                a[i] = Type.GetTypeFromHandle(c.GetTypeHandle())!;
             }
 
             return a;
index e01a058..fc2db54 100644 (file)
@@ -82,7 +82,7 @@ namespace System.Reflection.Emit
 
         public int GetTokenFor(RuntimeTypeHandle type)
         {
-            Type t = Type.GetTypeFromHandle(type);
+            Type t = Type.GetTypeFromHandle(type)!;
             return this.method.GetILGenerator().TokenGenerator.GetToken(t, false);
         }
 
index 9b92b12..11605dc 100644 (file)
@@ -312,7 +312,7 @@ namespace System.Reflection
             if (handle == IntPtr.Zero)
                 throw resolve_token_exception(module, metadataToken, error, "Type");
             else
-                return Type.GetTypeFromHandle(new RuntimeTypeHandle(handle));
+                return Type.GetTypeFromHandle(new RuntimeTypeHandle(handle))!;
         }
 
         [RequiresUnreferencedCode("Trimming changes metadata tokens")]
index f6d349d..151ad2f 100644 (file)
@@ -2165,7 +2165,7 @@ namespace System
                 for (int i = 0; i < n; i++)
                 {
                     var th = new RuntimeTypeHandle(h[i]);
-                    a[i] = (RuntimeType)GetTypeFromHandle(th);
+                    a[i] = (RuntimeType)GetTypeFromHandle(th)!;
                 }
                 return a;
             }
index 1954d42..34f47d6 100644 (file)
@@ -121,7 +121,7 @@ namespace System
             if (value == IntPtr.Zero)
                 throw new InvalidOperationException("Object fields may not be properly initialized");
 
-            return Type.GetTypeFromHandle(this).Module.ModuleHandle;
+            return Type.GetTypeFromHandle(this)!.Module.ModuleHandle;
         }
 
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
index 7dc0d31..3317db0 100644 (file)
@@ -89,10 +89,10 @@ namespace System
             return TypeNameParser.GetType(typeName, assemblyResolver, typeResolver, throwOnError, ignoreCase, ref stackMark);
         }
 
-        public static Type GetTypeFromHandle(RuntimeTypeHandle handle)
+        public static Type? GetTypeFromHandle(RuntimeTypeHandle handle)
         {
             if (handle.Value == IntPtr.Zero)
-                return null!; // FIXME: shouldn't return null
+                return null;
 
             return internal_from_handle(handle.Value);
         }