Skip to content

Commit 09a036f

Browse files
authored
Enable nullable on FileProviders and Config.KeyPerFile (#28585)
1 parent 6960097 commit 09a036f

18 files changed

+89
-68
lines changed

src/Configuration.KeyPerFile/src/KeyPerFileConfigurationProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Microsoft.Extensions.Configuration.KeyPerFile
1111
/// </summary>
1212
public class KeyPerFileConfigurationProvider : ConfigurationProvider, IDisposable
1313
{
14-
private readonly IDisposable _changeTokenRegistration;
14+
private readonly IDisposable? _changeTokenRegistration;
1515

1616
KeyPerFileConfigurationSource Source { get; set; }
1717

@@ -106,7 +106,7 @@ private string GetDirectoryName()
106106
/// <summary>
107107
/// Generates a string representing this provider name and relevant details.
108108
/// </summary>
109-
/// <returns> The configuration name. </returns>
109+
/// <returns>The configuration name.</returns>
110110
public override string ToString()
111111
=> $"{GetType().Name} for files in '{GetDirectoryName()}' ({(Source.Optional ? "Optional" : "Required")})";
112112

src/Configuration.KeyPerFile/src/KeyPerFileConfigurationSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public KeyPerFileConfigurationSource()
1818
/// <summary>
1919
/// The FileProvider whos root "/" directory files will be used as configuration data.
2020
/// </summary>
21-
public IFileProvider FileProvider { get; set; }
21+
public IFileProvider? FileProvider { get; set; }
2222

2323
/// <summary>
2424
/// Files that start with this prefix will be excluded.

src/Configuration.KeyPerFile/src/Microsoft.Extensions.Configuration.KeyPerFile.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<Description>Configuration provider that uses files in a directory for Microsoft.Extensions.Configuration.</Description>
@@ -8,6 +8,7 @@
88
<GenerateDocumentationFile>true</GenerateDocumentationFile>
99
<PackageTags>configuration</PackageTags>
1010
<NoWarn>$(NoWarn);PKG0001</NoWarn>
11+
<Nullable>enable</Nullable>
1112
</PropertyGroup>
1213

1314
<ItemGroup>

src/Configuration.KeyPerFile/src/PublicAPI.Shipped.txt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Relo
1111
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.ReloadOnChange.set -> void
1212
Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions
1313
override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.Load() -> void
14-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.KeyPerFileConfigurationProvider(Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource source) -> void
15-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder builder) -> Microsoft.Extensions.Configuration.IConfigurationProvider
16-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider
17-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.set -> void
18-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.get -> System.Func<string, bool>
19-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.set -> void
20-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.get -> string
21-
~Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.set -> void
22-
~override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.ToString() -> string
23-
~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, System.Action<Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource> configureSource) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
24-
~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
25-
~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath, bool optional) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
26-
~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath, bool optional, bool reloadOnChange) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
14+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.KeyPerFileConfigurationProvider(Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource! source) -> void
15+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder! builder) -> Microsoft.Extensions.Configuration.IConfigurationProvider!
16+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider?
17+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.set -> void
18+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.get -> System.Func<string!, bool>!
19+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.set -> void
20+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.get -> string!
21+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnorePrefix.set -> void
22+
override Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.ToString() -> string!
23+
static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, System.Action<Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource!>! configureSource) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
24+
static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
25+
static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath, bool optional) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!
26+
static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder! builder, string! directoryPath, bool optional, bool reloadOnChange) -> Microsoft.Extensions.Configuration.IConfigurationBuilder!

src/FileProviders/Embedded/src/EmbeddedFileProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public EmbeddedFileProvider(Assembly assembly)
4141
/// </summary>
4242
/// <param name="assembly">The assembly that contains the embedded resources.</param>
4343
/// <param name="baseNamespace">The base namespace that contains the embedded resources.</param>
44-
public EmbeddedFileProvider(Assembly assembly, string baseNamespace)
44+
public EmbeddedFileProvider(Assembly assembly, string? baseNamespace)
4545
{
4646
if (assembly == null)
4747
{

src/FileProviders/Embedded/src/EmbeddedResourceFileInfo.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
@@ -50,10 +50,8 @@ public long Length
5050
{
5151
if (!_length.HasValue)
5252
{
53-
using (var stream = _assembly.GetManifestResourceStream(_resourcePath))
54-
{
55-
_length = stream.Length;
56-
}
53+
using var stream = GetManifestResourceStream();
54+
_length = stream.Length;
5755
}
5856
return _length.Value;
5957
}
@@ -62,7 +60,7 @@ public long Length
6260
/// <summary>
6361
/// Always null.
6462
/// </summary>
65-
public string PhysicalPath => null;
63+
public string? PhysicalPath => null;
6664

6765
/// <summary>
6866
/// The name of embedded file
@@ -82,13 +80,24 @@ public long Length
8280
/// <inheritdoc />
8381
public Stream CreateReadStream()
8482
{
85-
var stream = _assembly.GetManifestResourceStream(_resourcePath);
83+
var stream = GetManifestResourceStream();
8684
if (!_length.HasValue)
8785
{
8886
_length = stream.Length;
8987
}
9088

9189
return stream;
9290
}
91+
92+
private Stream GetManifestResourceStream()
93+
{
94+
var stream = _assembly.GetManifestResourceStream(_resourcePath);
95+
if (stream == null)
96+
{
97+
throw new InvalidOperationException($"Couldn't get resource at '{_resourcePath}'.");
98+
}
99+
100+
return stream;
101+
}
93102
}
94103
}

src/FileProviders/Embedded/src/Manifest/EmbeddedFilesManifest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
@@ -28,7 +28,7 @@ internal EmbeddedFilesManifest(ManifestDirectory rootDirectory)
2828
_rootDirectory = rootDirectory;
2929
}
3030

31-
internal ManifestEntry ResolveEntry(string path)
31+
internal ManifestEntry? ResolveEntry(string path)
3232
{
3333
if (string.IsNullOrEmpty(path) || HasInvalidPathChars(path))
3434
{

src/FileProviders/Embedded/src/Manifest/ManifestDirectory.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
@@ -31,7 +31,7 @@ public override ManifestEntry Traverse(StringSegment segment)
3131

3232
if (segment.Equals("..", StringComparison.Ordinal))
3333
{
34-
return Parent;
34+
return Parent ?? UnknownPath;
3535
}
3636

3737
foreach (var child in Children)

src/FileProviders/Embedded/src/Manifest/ManifestDirectoryContents.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
@@ -12,7 +12,7 @@ namespace Microsoft.Extensions.FileProviders.Embedded.Manifest
1212
internal class ManifestDirectoryContents : IDirectoryContents
1313
{
1414
private readonly DateTimeOffset _lastModified;
15-
private IFileInfo[] _entries;
15+
private IFileInfo[]? _entries;
1616

1717
public ManifestDirectoryContents(Assembly assembly, ManifestDirectory directory, DateTimeOffset lastModified)
1818
{

src/FileProviders/Embedded/src/Manifest/ManifestDirectoryInfo.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
@@ -23,9 +23,9 @@ public ManifestDirectoryInfo(ManifestDirectory directory, DateTimeOffset lastMod
2323

2424
public long Length => -1;
2525

26-
public string PhysicalPath => null;
26+
public string? PhysicalPath => null;
2727

28-
public string Name => Directory.Name;
28+
public string? Name => Directory.Name;
2929

3030
public DateTimeOffset LastModified { get; }
3131

0 commit comments

Comments
 (0)