Tweak nullable attribute per API review (#25443)
authorStephen Toub <stoub@microsoft.com>
Thu, 27 Jun 2019 01:02:19 +0000 (21:02 -0400)
committerGitHub <noreply@github.com>
Thu, 27 Jun 2019 01:02:19 +0000 (21:02 -0400)
src/System.Private.CoreLib/shared/System/Collections/Generic/Dictionary.cs
src/System.Private.CoreLib/shared/System/Collections/IDictionary.cs
src/System.Private.CoreLib/shared/System/Convert.cs
src/System.Private.CoreLib/src/System/Runtime/InteropServices/Marshal.CoreCLR.cs
src/System.Private.CoreLib/src/System/Threading/Interlocked.cs

index fc4d875..181e2d2 100644 (file)
@@ -1065,7 +1065,6 @@ namespace System.Collections.Generic
 
         ICollection IDictionary.Values => (ICollection)Values;
 
-        [DisallowNull]
         object? IDictionary.this[object key]
         {
             get
index 5512500..be6b933 100644 (file)
@@ -15,7 +15,6 @@ namespace System.Collections
         // Interfaces are not serializable
         // The Item property provides methods to read and edit entries 
         // in the Dictionary.
-        [DisallowNull]
         object? this[object key]
         {
             get;
index 412528c..d7bde83 100644 (file)
@@ -188,11 +188,13 @@ namespace System
         // object already has the given type code, in which case the object is
         // simply returned. Otherwise, the appropriate ToXXX() is invoked on the
         // object's implementation of IConvertible.
+        [return: NotNullIfNotNull("value")]
         public static object? ChangeType(object? value, TypeCode typeCode)
         {
             return ChangeType(value, typeCode, CultureInfo.CurrentCulture);
         }
 
+        [return: NotNullIfNotNull("value")]
         public static object? ChangeType(object? value, TypeCode typeCode, IFormatProvider? provider)
         {
             if (value == null && (typeCode == TypeCode.Empty || typeCode == TypeCode.String || typeCode == TypeCode.Object))
@@ -307,6 +309,7 @@ namespace System
             throw new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, value.GetType().FullName, targetType.FullName));
         }
 
+        [return: NotNullIfNotNull("value")]
         public static object? ChangeType(object? value, Type conversionType)
         {
             return ChangeType(value, conversionType, CultureInfo.CurrentCulture);
index edaa9d7..6d2fc51 100644 (file)
@@ -583,6 +583,7 @@ namespace System.Runtime.InteropServices
         /// This method takes the given COM object and wraps it in an object
         /// of the specified type. The type must be derived from __ComObject.
         /// </summary>
+        [return: NotNullIfNotNull("o")]
         public static object? CreateWrapperOfType(object? o, Type t)
         {
             if (t is null)
index f23942e..fe19296 100644 (file)
@@ -60,7 +60,7 @@ namespace System.Threading
         public static extern double Exchange(ref double location1, double value);
 
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
-        [return: NotNullIfNotNull("value")]
+        [return: NotNullIfNotNull("location1")]
         public static extern object? Exchange([NotNullIfNotNull("value")] ref object? location1, object? value);
 
         [MethodImplAttribute(MethodImplOptions.InternalCall)]
@@ -69,7 +69,7 @@ namespace System.Threading
         // This whole method reduces to a single call to Exchange(ref object, object) but
         // the JIT thinks that it will generate more native code than it actually does.
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
-        [return: NotNullIfNotNull("value")]
+        [return: NotNullIfNotNull("location1")]
         public static T Exchange<T>([NotNullIfNotNull("value")] ref T location1, T value) where T : class?
         {
             return Unsafe.As<T>(Exchange(ref Unsafe.As<T, object?>(ref location1), value));