diff --git a/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.cs b/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.cs index feef64fc2dde15..c9719bcdbbc920 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.cs @@ -15,23 +15,24 @@ public partial class ChainedConfigurationProvider : Microsoft.Extensions.Configu { public ChainedConfigurationProvider(Microsoft.Extensions.Configuration.ChainedConfigurationSource source) { } public void Dispose() { } - public System.Collections.Generic.IEnumerable GetChildKeys(System.Collections.Generic.IEnumerable earlierKeys, string parentPath) { throw null; } + public System.Collections.Generic.IEnumerable GetChildKeys(System.Collections.Generic.IEnumerable earlierKeys, string? parentPath) { throw null; } public Microsoft.Extensions.Primitives.IChangeToken GetReloadToken() { throw null; } public void Load() { } - public void Set(string key, string value) { } - public bool TryGet(string key, out string value) { throw null; } + public void Set(string key, string? value) { } + public bool TryGet(string key, out string? value) { throw null; } } public partial class ChainedConfigurationSource : Microsoft.Extensions.Configuration.IConfigurationSource { public ChainedConfigurationSource() { } - public Microsoft.Extensions.Configuration.IConfiguration Configuration { get { throw null; } set { } } + [System.Diagnostics.CodeAnalysis.DisallowNull] + public Microsoft.Extensions.Configuration.IConfiguration? Configuration { get { throw null; } set { } } public bool ShouldDisposeConfiguration { get { throw null; } set { } } public Microsoft.Extensions.Configuration.IConfigurationProvider Build(Microsoft.Extensions.Configuration.IConfigurationBuilder builder) { throw null; } } public sealed partial class ConfigurationManager : Microsoft.Extensions.Configuration.IConfigurationBuilder, Microsoft.Extensions.Configuration.IConfigurationRoot, System.IDisposable { public ConfigurationManager() { } - public string this[string key] { get { throw null; } set { throw null; } } + public string? this[string key] { get { throw null; } set { throw null; } } public IConfigurationSection GetSection(string key) { throw null; } public System.Collections.Generic.IEnumerable GetChildren() { throw null; } public void Dispose() { throw null; } @@ -55,19 +56,19 @@ public partial class ConfigurationKeyComparer : System.Collections.Generic.IComp { public ConfigurationKeyComparer() { } public static Microsoft.Extensions.Configuration.ConfigurationKeyComparer Instance { get { throw null; } } - public int Compare(string x, string y) { throw null; } + public int Compare(string? x, string? y) { throw null; } } public abstract partial class ConfigurationProvider : Microsoft.Extensions.Configuration.IConfigurationProvider { protected ConfigurationProvider() { } - protected System.Collections.Generic.IDictionary Data { get { throw null; } set { } } - public virtual System.Collections.Generic.IEnumerable GetChildKeys(System.Collections.Generic.IEnumerable earlierKeys, string parentPath) { throw null; } + protected System.Collections.Generic.IDictionary Data { get { throw null; } set { } } + public virtual System.Collections.Generic.IEnumerable GetChildKeys(System.Collections.Generic.IEnumerable earlierKeys, string? parentPath) { throw null; } public Microsoft.Extensions.Primitives.IChangeToken GetReloadToken() { throw null; } public virtual void Load() { } protected void OnReload() { } - public virtual void Set(string key, string value) { } + public virtual void Set(string key, string? value) { } public override string ToString() { throw null; } - public virtual bool TryGet(string key, out string value) { throw null; } + public virtual bool TryGet(string key, out string? value) { throw null; } } public partial class ConfigurationReloadToken : Microsoft.Extensions.Primitives.IChangeToken { @@ -75,12 +76,12 @@ public ConfigurationReloadToken() { } public bool ActiveChangeCallbacks { get { throw null; } } public bool HasChanged { get { throw null; } } public void OnReload() { } - public System.IDisposable RegisterChangeCallback(System.Action callback, object state) { throw null; } + public System.IDisposable RegisterChangeCallback(System.Action callback, object? state) { throw null; } } public partial class ConfigurationRoot : Microsoft.Extensions.Configuration.IConfiguration, Microsoft.Extensions.Configuration.IConfigurationRoot, System.IDisposable { public ConfigurationRoot(System.Collections.Generic.IList providers) { } - public string this[string key] { get { throw null; } set { } } + public string? this[string key] { get { throw null; } set { } } public System.Collections.Generic.IEnumerable Providers { get { throw null; } } public void Dispose() { } public System.Collections.Generic.IEnumerable GetChildren() { throw null; } @@ -91,10 +92,10 @@ public void Reload() { } public partial class ConfigurationSection : Microsoft.Extensions.Configuration.IConfiguration, Microsoft.Extensions.Configuration.IConfigurationSection { public ConfigurationSection(Microsoft.Extensions.Configuration.IConfigurationRoot root, string path) { } - public string this[string key] { get { throw null; } set { } } + public string? this[string key] { get { throw null; } set { } } public string Key { get { throw null; } } public string Path { get { throw null; } } - public string Value { get { throw null; } set { } } + public string? Value { get { throw null; } set { } } public System.Collections.Generic.IEnumerable GetChildren() { throw null; } public Microsoft.Extensions.Primitives.IChangeToken GetReloadToken() { throw null; } public Microsoft.Extensions.Configuration.IConfigurationSection GetSection(string key) { throw null; } @@ -102,7 +103,7 @@ public ConfigurationSection(Microsoft.Extensions.Configuration.IConfigurationRoo public static partial class MemoryConfigurationBuilderExtensions { public static Microsoft.Extensions.Configuration.IConfigurationBuilder AddInMemoryCollection(this Microsoft.Extensions.Configuration.IConfigurationBuilder configurationBuilder) { throw null; } - public static Microsoft.Extensions.Configuration.IConfigurationBuilder AddInMemoryCollection(this Microsoft.Extensions.Configuration.IConfigurationBuilder configurationBuilder, System.Collections.Generic.IEnumerable> initialData) { throw null; } + public static Microsoft.Extensions.Configuration.IConfigurationBuilder AddInMemoryCollection(this Microsoft.Extensions.Configuration.IConfigurationBuilder configurationBuilder, System.Collections.Generic.IEnumerable>? initialData) { throw null; } } public abstract partial class StreamConfigurationProvider : Microsoft.Extensions.Configuration.ConfigurationProvider { @@ -114,23 +115,24 @@ public override void Load() { } public abstract partial class StreamConfigurationSource : Microsoft.Extensions.Configuration.IConfigurationSource { protected StreamConfigurationSource() { } - public System.IO.Stream Stream { get { throw null; } set { } } + [System.Diagnostics.CodeAnalysis.DisallowNull] + public System.IO.Stream? Stream { get { throw null; } set { } } public abstract Microsoft.Extensions.Configuration.IConfigurationProvider Build(Microsoft.Extensions.Configuration.IConfigurationBuilder builder); } } namespace Microsoft.Extensions.Configuration.Memory { - public partial class MemoryConfigurationProvider : Microsoft.Extensions.Configuration.ConfigurationProvider, System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable + public partial class MemoryConfigurationProvider : Microsoft.Extensions.Configuration.ConfigurationProvider, System.Collections.Generic.IEnumerable>, System.Collections.IEnumerable { public MemoryConfigurationProvider(Microsoft.Extensions.Configuration.Memory.MemoryConfigurationSource source) { } - public void Add(string key, string value) { } - public System.Collections.Generic.IEnumerator> GetEnumerator() { throw null; } + public void Add(string key, string? value) { } + public System.Collections.Generic.IEnumerator> GetEnumerator() { throw null; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { throw null; } } public partial class MemoryConfigurationSource : Microsoft.Extensions.Configuration.IConfigurationSource { public MemoryConfigurationSource() { } - public System.Collections.Generic.IEnumerable> InitialData { get { throw null; } set { } } + public System.Collections.Generic.IEnumerable>? InitialData { get { throw null; } set { } } public Microsoft.Extensions.Configuration.IConfigurationProvider Build(Microsoft.Extensions.Configuration.IConfigurationBuilder builder) { throw null; } } } diff --git a/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.csproj b/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.csproj index 311697da639012..0ab0a2842d7181 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.csproj +++ b/src/libraries/Microsoft.Extensions.Configuration/ref/Microsoft.Extensions.Configuration.csproj @@ -1,10 +1,15 @@ - netstandard2.0;$(NetFrameworkMinimum) + $(NetCoreAppCurrent);netstandard2.0;$(NetFrameworkMinimum) + enable + + + + diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs index a240f3da8e7d11..eb9bed00211458 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationProvider.cs @@ -40,7 +40,7 @@ public ChainedConfigurationProvider(ChainedConfigurationSource source) /// The key. /// The value. /// True if a value for the specified key was found, otherwise false. - public bool TryGet(string key, out string value) + public bool TryGet(string key, out string? value) { value = _config[key]; return !string.IsNullOrEmpty(value); @@ -51,7 +51,7 @@ public bool TryGet(string key, out string value) /// /// The key. /// The value. - public void Set(string key, string value) => _config[key] = value; + public void Set(string key, string? value) => _config[key] = value; /// /// Returns a change token if this provider supports change tracking, null otherwise. @@ -74,7 +74,7 @@ public void Load() { } /// The child keys. public IEnumerable GetChildKeys( IEnumerable earlierKeys, - string parentPath) + string? parentPath) { IConfiguration section = parentPath == null ? _config : _config.GetSection(parentPath); var keys = new List(); diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationSource.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationSource.cs index 27391aead76fda..b5a9c68c522db4 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationSource.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ChainedConfigurationSource.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Diagnostics.CodeAnalysis; + namespace Microsoft.Extensions.Configuration { /// @@ -11,7 +13,8 @@ public class ChainedConfigurationSource : IConfigurationSource /// /// The chained configuration. /// - public IConfiguration Configuration { get; set; } + [DisallowNull] + public IConfiguration? Configuration { get; set; } /// /// Whether the chained configuration should be disposed when the diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationKeyComparer.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationKeyComparer.cs index b5dc31fdffe733..00cca781d47f46 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationKeyComparer.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationKeyComparer.cs @@ -27,7 +27,7 @@ public class ConfigurationKeyComparer : IComparer /// First string. /// Second string. /// Less than 0 if x is less than y, 0 if x is equal to y and greater than 0 if x is greater than y. - public int Compare(string x, string y) + public int Compare(string? x, string? y) { string[] xParts = x?.Split(_keyDelimiterArray, StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty(); string[] yParts = y?.Split(_keyDelimiterArray, StringSplitOptions.RemoveEmptyEntries) ?? Array.Empty(); diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationManager.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationManager.cs index 8ce08d822426c6..6fe4c1a0046634 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationManager.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationManager.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Threading; using Microsoft.Extensions.Configuration.Memory; @@ -38,7 +39,7 @@ public ConfigurationManager() } /// - public string this[string key] + public string? this[string key] { get { @@ -338,7 +339,7 @@ public bool Remove(KeyValuePair item) return wasRemoved; } - public bool TryGetValue(string key, out object value) + public bool TryGetValue(string key, [NotNullWhen(true)] out object? value) { return _properties.TryGetValue(key, out value); } diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationProvider.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationProvider.cs index e337bd31483314..9fbeded4fc3de6 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationProvider.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationProvider.cs @@ -21,13 +21,13 @@ public abstract class ConfigurationProvider : IConfigurationProvider /// protected ConfigurationProvider() { - Data = new Dictionary(StringComparer.OrdinalIgnoreCase); + Data = new Dictionary(StringComparer.OrdinalIgnoreCase); } /// /// The configuration key value pairs for this provider. /// - protected IDictionary Data { get; set; } + protected IDictionary Data { get; set; } /// /// Attempts to find a value with the given key, returns true if one is found, false otherwise. @@ -35,7 +35,7 @@ protected ConfigurationProvider() /// The key to lookup. /// The value found at key if one is found. /// True if key has a value, false otherwise. - public virtual bool TryGet(string key, out string value) + public virtual bool TryGet(string key, out string? value) => Data.TryGetValue(key, out value); /// @@ -43,7 +43,7 @@ public virtual bool TryGet(string key, out string value) /// /// The configuration key to set. /// The value to set. - public virtual void Set(string key, string value) + public virtual void Set(string key, string? value) => Data[key] = value; /// @@ -60,13 +60,13 @@ public virtual void Load() /// The list of keys for this provider. public virtual IEnumerable GetChildKeys( IEnumerable earlierKeys, - string parentPath) + string? parentPath) { var results = new List(); if (parentPath is null) { - foreach (KeyValuePair kv in Data) + foreach (KeyValuePair kv in Data) { results.Add(Segment(kv.Key, 0)); } @@ -75,7 +75,7 @@ public virtual IEnumerable GetChildKeys( { Debug.Assert(ConfigurationPath.KeyDelimiter == ":"); - foreach (KeyValuePair kv in Data) + foreach (KeyValuePair kv in Data) { if (kv.Key.Length > parentPath.Length && kv.Key.StartsWith(parentPath, StringComparison.OrdinalIgnoreCase) && diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationReloadToken.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationReloadToken.cs index fad07ebfdacb97..7aceba29fe55b0 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationReloadToken.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationReloadToken.cs @@ -33,7 +33,7 @@ public class ConfigurationReloadToken : IChangeToken /// The callback to invoke. /// State to be passed into the callback. /// The registration. - public IDisposable RegisterChangeCallback(Action callback, object state) => _cts.Token.Register(callback, state); + public IDisposable RegisterChangeCallback(Action callback, object? state) => _cts.Token.Register(callback, state); /// /// Used to trigger the change token when a reload occurs. diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationRoot.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationRoot.cs index cfe56a20978e57..397ef5160b1ec7 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationRoot.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationRoot.cs @@ -47,7 +47,7 @@ public ConfigurationRoot(IList providers) /// /// The configuration key. /// The configuration value. - public string this[string key] + public string? this[string key] { get => GetConfiguration(_providers, key); set => SetConfiguration(_providers, key, value); @@ -111,13 +111,13 @@ public void Dispose() } } - internal static string GetConfiguration(IList providers, string key) + internal static string? GetConfiguration(IList providers, string key) { for (int i = providers.Count - 1; i >= 0; i--) { IConfigurationProvider provider = providers[i]; - if (provider.TryGet(key, out string value)) + if (provider.TryGet(key, out string? value)) { return value; } @@ -126,7 +126,7 @@ internal static string GetConfiguration(IList providers, return null; } - internal static void SetConfiguration(IList providers, string key, string value) + internal static void SetConfiguration(IList providers, string key, string? value) { if (providers.Count == 0) { diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationSection.cs b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationSection.cs index da3fbb733a3a11..0896e587d4082d 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationSection.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/ConfigurationSection.cs @@ -14,7 +14,7 @@ public class ConfigurationSection : IConfigurationSection { private readonly IConfigurationRoot _root; private readonly string _path; - private string _key; + private string? _key; /// /// Initializes a new instance. @@ -61,7 +61,7 @@ public string Key /// /// Gets or sets the section value. /// - public string Value + public string? Value { get { @@ -78,13 +78,12 @@ public string Value /// /// The configuration key. /// The configuration value. - public string this[string key] + public string? this[string key] { get { return _root[ConfigurationPath.Combine(Path, key)]; } - set { _root[ConfigurationPath.Combine(Path, key)] = value; diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/InternalConfigurationRootExtensions.cs b/src/libraries/Microsoft.Extensions.Configuration/src/InternalConfigurationRootExtensions.cs index bff5c527104008..7fd17a98acf475 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/InternalConfigurationRootExtensions.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/InternalConfigurationRootExtensions.cs @@ -18,7 +18,7 @@ internal static class InternalConfigurationRootExtensions /// Configuration from which to retrieve sub-sections. /// Key of a section of which children to retrieve. /// Immediate children sub-sections of section specified by key. - internal static IEnumerable GetChildrenImplementation(this IConfigurationRoot root, string path) + internal static IEnumerable GetChildrenImplementation(this IConfigurationRoot root, string? path) { return root.Providers .Aggregate(Enumerable.Empty(), diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationBuilderExtensions.cs b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationBuilderExtensions.cs index 996f8a876b9c37..15ed46a26a5b98 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationBuilderExtensions.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationBuilderExtensions.cs @@ -36,7 +36,7 @@ public static IConfigurationBuilder AddInMemoryCollection(this IConfigurationBui /// The . public static IConfigurationBuilder AddInMemoryCollection( this IConfigurationBuilder configurationBuilder, - IEnumerable> initialData) + IEnumerable>? initialData) { if (configurationBuilder == null) { diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationProvider.cs b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationProvider.cs index 84a0b142e0fbc6..0e7f0be02fec78 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationProvider.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationProvider.cs @@ -10,7 +10,7 @@ namespace Microsoft.Extensions.Configuration.Memory /// /// In-memory implementation of /// - public class MemoryConfigurationProvider : ConfigurationProvider, IEnumerable> + public class MemoryConfigurationProvider : ConfigurationProvider, IEnumerable> { private readonly MemoryConfigurationSource _source; @@ -29,7 +29,7 @@ public MemoryConfigurationProvider(MemoryConfigurationSource source) if (_source.InitialData != null) { - foreach (KeyValuePair pair in _source.InitialData) + foreach (KeyValuePair pair in _source.InitialData) { Data.Add(pair.Key, pair.Value); } @@ -41,7 +41,7 @@ public MemoryConfigurationProvider(MemoryConfigurationSource source) /// /// The configuration key. /// The configuration value. - public void Add(string key, string value) + public void Add(string key, string? value) { Data.Add(key, value); } @@ -50,7 +50,7 @@ public void Add(string key, string value) /// Returns an enumerator that iterates through the collection. /// /// An enumerator that can be used to iterate through the collection. - public IEnumerator> GetEnumerator() + public IEnumerator> GetEnumerator() { return Data.GetEnumerator(); } diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationSource.cs b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationSource.cs index e11891595e4142..412df6534c1109 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationSource.cs +++ b/src/libraries/Microsoft.Extensions.Configuration/src/MemoryConfigurationSource.cs @@ -13,7 +13,7 @@ public class MemoryConfigurationSource : IConfigurationSource /// /// The initial key value configuration pairs. /// - public IEnumerable> InitialData { get; set; } + public IEnumerable>? InitialData { get; set; } /// /// Builds the for this source. diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/Microsoft.Extensions.Configuration.csproj b/src/libraries/Microsoft.Extensions.Configuration/src/Microsoft.Extensions.Configuration.csproj index bc0bf6e7cc443a..10fd1c6acdcb60 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/Microsoft.Extensions.Configuration.csproj +++ b/src/libraries/Microsoft.Extensions.Configuration/src/Microsoft.Extensions.Configuration.csproj @@ -1,8 +1,11 @@ - netstandard2.0;$(NetFrameworkMinimum) + $(NetCoreAppCurrent);netstandard2.0;$(NetFrameworkMinimum) + enable true + + false Implementation of key-value pair based configuration for Microsoft.Extensions.Configuration. Includes the memory configuration provider. diff --git a/src/libraries/Microsoft.Extensions.Configuration/src/Resources/Strings.resx b/src/libraries/Microsoft.Extensions.Configuration/src/Resources/Strings.resx index 941bf0cc348733..8f6038211e50dc 100644 --- a/src/libraries/Microsoft.Extensions.Configuration/src/Resources/Strings.resx +++ b/src/libraries/Microsoft.Extensions.Configuration/src/Resources/Strings.resx @@ -1,4 +1,4 @@ - +