Skip to content

Commit

Permalink
Add public API baselines for SiteExtensions, Testing, WebEncoders (do…
Browse files Browse the repository at this point in the history
  • Loading branch information
Pilchie authored Sep 10, 2020
1 parent 158401f commit 848f42d
Show file tree
Hide file tree
Showing 14 changed files with 544 additions and 1 deletion.
102 changes: 102 additions & 0 deletions AspNetCore.sln
Original file line number Diff line number Diff line change
Expand Up @@ -1523,6 +1523,26 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Loggin
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Logging.AzureAppServices.Tests", "src\Logging.AzureAppServices\test\Microsoft.Extensions.Logging.AzureAppServices.Tests.csproj", "{43E3B132-2486-44A3-92C6-39E39724FAFD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SiteExtensions", "SiteExtensions", "{DFC4F588-B4B4-484B-AB93-B36721374AD3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "LoggingAggregate", "LoggingAggregate", "{48FF1D87-5066-4294-B802-2D1B478C6EB6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.SiteExtension", "src\SiteExtensions\LoggingAggregate\src\Microsoft.AspNetCore.AzureAppServices.SiteExtension\Microsoft.AspNetCore.AzureAppServices.SiteExtension.csproj", "{563A3FFA-32DA-4ADA-891C-E00897BD919E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests", "src\SiteExtensions\LoggingAggregate\test\Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests\Microsoft.AspNetCore.AzureAppServices.SiteExtension.Tests.csproj", "{DC5DE087-5C93-4441-9D62-1743A50E5086}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LB", "src\SiteExtensions\LoggingBranch\LB.csproj", "{F00CE8C1-5715-4683-A8E5-C467B712AD46}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Microsoft.Web.Xdt.Extensions", "Microsoft.Web.Xdt.Extensions", "{56B45580-B089-424E-A847-A6115D591950}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Web.Xdt.Extensions", "src\SiteExtensions\Microsoft.Web.Xdt.Extensions\src\Microsoft.Web.Xdt.Extensions.csproj", "{4382555A-E4CD-4DFC-B59B-408FD4E93530}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Web.Xdt.Extensions.Tests", "src\SiteExtensions\Microsoft.Web.Xdt.Extensions\tests\Microsoft.Web.Xdt.Extensions.Tests.csproj", "{545751D5-71FC-4889-A3A0-BBD731DBA18A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sdk", "Sdk", "{E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HostingStartup", "src\SiteExtensions\Sdk\HostingStartup\HostingStartup.csproj", "{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -7291,6 +7311,78 @@ Global
{43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x64.Build.0 = Release|Any CPU
{43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x86.ActiveCfg = Release|Any CPU
{43E3B132-2486-44A3-92C6-39E39724FAFD}.Release|x86.Build.0 = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x64.ActiveCfg = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x64.Build.0 = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x86.ActiveCfg = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Debug|x86.Build.0 = Debug|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|Any CPU.Build.0 = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x64.ActiveCfg = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x64.Build.0 = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x86.ActiveCfg = Release|Any CPU
{563A3FFA-32DA-4ADA-891C-E00897BD919E}.Release|x86.Build.0 = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x64.ActiveCfg = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x64.Build.0 = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x86.ActiveCfg = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Debug|x86.Build.0 = Debug|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|Any CPU.Build.0 = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x64.ActiveCfg = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x64.Build.0 = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x86.ActiveCfg = Release|Any CPU
{DC5DE087-5C93-4441-9D62-1743A50E5086}.Release|x86.Build.0 = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x64.ActiveCfg = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x64.Build.0 = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x86.ActiveCfg = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Debug|x86.Build.0 = Debug|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|Any CPU.Build.0 = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x64.ActiveCfg = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x64.Build.0 = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x86.ActiveCfg = Release|Any CPU
{F00CE8C1-5715-4683-A8E5-C467B712AD46}.Release|x86.Build.0 = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x64.ActiveCfg = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x64.Build.0 = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x86.ActiveCfg = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Debug|x86.Build.0 = Debug|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|Any CPU.Build.0 = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x64.ActiveCfg = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x64.Build.0 = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x86.ActiveCfg = Release|Any CPU
{4382555A-E4CD-4DFC-B59B-408FD4E93530}.Release|x86.Build.0 = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x64.ActiveCfg = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x64.Build.0 = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x86.ActiveCfg = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Debug|x86.Build.0 = Debug|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|Any CPU.Build.0 = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x64.ActiveCfg = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x64.Build.0 = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x86.ActiveCfg = Release|Any CPU
{545751D5-71FC-4889-A3A0-BBD731DBA18A}.Release|x86.Build.0 = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x64.ActiveCfg = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x64.Build.0 = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x86.ActiveCfg = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Debug|x86.Build.0 = Debug|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|Any CPU.Build.0 = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x64.ActiveCfg = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x64.Build.0 = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.ActiveCfg = Release|Any CPU
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -8054,6 +8146,16 @@ Global
{3EAB9890-2C01-444C-ACA0-D77B29CDE08B} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
{3E29454A-C4DC-44B7-AF0A-A782AD2E73BC} = {3EAB9890-2C01-444C-ACA0-D77B29CDE08B}
{43E3B132-2486-44A3-92C6-39E39724FAFD} = {3EAB9890-2C01-444C-ACA0-D77B29CDE08B}
{DFC4F588-B4B4-484B-AB93-B36721374AD3} = {017429CC-C5FB-48B4-9C46-034E29EE2F06}
{48FF1D87-5066-4294-B802-2D1B478C6EB6} = {DFC4F588-B4B4-484B-AB93-B36721374AD3}
{563A3FFA-32DA-4ADA-891C-E00897BD919E} = {48FF1D87-5066-4294-B802-2D1B478C6EB6}
{DC5DE087-5C93-4441-9D62-1743A50E5086} = {48FF1D87-5066-4294-B802-2D1B478C6EB6}
{F00CE8C1-5715-4683-A8E5-C467B712AD46} = {DFC4F588-B4B4-484B-AB93-B36721374AD3}
{56B45580-B089-424E-A847-A6115D591950} = {DFC4F588-B4B4-484B-AB93-B36721374AD3}
{4382555A-E4CD-4DFC-B59B-408FD4E93530} = {56B45580-B089-424E-A847-A6115D591950}
{545751D5-71FC-4889-A3A0-BBD731DBA18A} = {56B45580-B089-424E-A847-A6115D591950}
{E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972} = {DFC4F588-B4B4-484B-AB93-B36721374AD3}
{5D6F99C5-D292-4459-B8BD-8E4AD42E1B21} = {E83B0BCC-A8E0-4FBD-BE51-9A533C9CB972}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {3E8720B3-DBDD-498C-B383-2CC32A054E8F}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#nullable enable
Microsoft.Web.Xdt.Extensions.InsertOrAppendAttribute
Microsoft.Web.Xdt.Extensions.InsertOrAppendAttribute.InsertOrAppendAttribute() -> void
override Microsoft.Web.Xdt.Extensions.InsertOrAppendAttribute.Apply() -> void
~Microsoft.Web.Xdt.Extensions.InsertOrAppendAttribute.AttributeName.get -> string
~Microsoft.Web.Xdt.Extensions.InsertOrAppendAttribute.GetArgumentValue(string name) -> string
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
4 changes: 4 additions & 0 deletions src/SiteExtensions/Sdk/HostingStartup/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#nullable enable
Program
Program.Program() -> void
static Program.Main() -> void
7 changes: 7 additions & 0 deletions src/Testing/src/AssemblyTestLog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Linq;
using System.Reflection;
Expand Down Expand Up @@ -52,9 +53,11 @@ private AssemblyTestLog(ILoggerFactory globalLoggerFactory, ILogger globalLogger
_serviceProvider = serviceProvider;
}

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IDisposable StartTestLog(ITestOutputHelper output, string className, out ILoggerFactory loggerFactory, [CallerMemberName] string testName = null) =>
StartTestLog(output, className, out loggerFactory, LogLevel.Debug, testName);

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IDisposable StartTestLog(ITestOutputHelper output, string className, out ILoggerFactory loggerFactory, LogLevel minLogLevel, [CallerMemberName] string testName = null) =>
StartTestLog(output, className, out loggerFactory, minLogLevel, out var _, out var _, testName);

Expand Down Expand Up @@ -84,15 +87,19 @@ internal IDisposable StartTestLog(ITestOutputHelper output, string className, ou
});
}

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public ILoggerFactory CreateLoggerFactory(ITestOutputHelper output, string className, [CallerMemberName] string testName = null, DateTimeOffset? logStart = null)
=> CreateLoggerFactory(output, className, LogLevel.Trace, testName, logStart);

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public ILoggerFactory CreateLoggerFactory(ITestOutputHelper output, string className, LogLevel minLogLevel, [CallerMemberName] string testName = null, DateTimeOffset? logStart = null)
=> CreateLoggerServices(output, className, minLogLevel, out var _, out var _, testName, logStart).GetRequiredService<ILoggerFactory>();

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IServiceProvider CreateLoggerServices(ITestOutputHelper output, string className, LogLevel minLogLevel, out string normalizedTestName, [CallerMemberName] string testName = null, DateTimeOffset? logStart = null)
=> CreateLoggerServices(output, className, minLogLevel, out normalizedTestName, out var _, testName, logStart);

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IServiceProvider CreateLoggerServices(ITestOutputHelper output, string className, LogLevel minLogLevel, out string normalizedTestName, out string logOutputDirectory, [CallerMemberName] string testName = null, DateTimeOffset? logStart = null)
{
normalizedTestName = string.Empty;
Expand Down
2 changes: 2 additions & 0 deletions src/Testing/src/CultureReplacer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Threading;
using Xunit;
Expand All @@ -21,6 +22,7 @@ public class CultureReplacer : IDisposable
// We want to be able to find issues where the InvariantCulture is used, but a specific culture should be.
//
// UICulture => Language
[SuppressMessage("ApiDesign", "RS0027:Public API with optional parameter(s) should have the most parameters amongst its public overloads", Justification = "Required to maintain compatibility")]
public CultureReplacer(string culture = _defaultCultureName, string uiCulture = _defaultUICultureName)
: this(new CultureInfo(culture), new CultureInfo(uiCulture))
{
Expand Down
7 changes: 6 additions & 1 deletion src/Testing/src/HttpClientSlim.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.Net;
Expand All @@ -20,9 +21,11 @@ namespace Microsoft.AspNetCore.Testing
/// </summary>
public static class HttpClientSlim
{
[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public static async Task<string> GetStringAsync(string requestUri, bool validateCertificate = true)
=> await GetStringAsync(new Uri(requestUri), validateCertificate).ConfigureAwait(false);

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public static async Task<string> GetStringAsync(Uri requestUri, bool validateCertificate = true)
{
return await RetryRequest(async () =>
Expand Down Expand Up @@ -61,9 +64,11 @@ internal static string GetHost(Uri requestUri)
return authority;
}

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public static async Task<string> PostAsync(string requestUri, HttpContent content, bool validateCertificate = true)
=> await PostAsync(new Uri(requestUri), content, validateCertificate).ConfigureAwait(false);

[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public static async Task<string> PostAsync(Uri requestUri, HttpContent content, bool validateCertificate = true)
{
return await RetryRequest(async () =>
Expand Down
3 changes: 3 additions & 0 deletions src/Testing/src/LoggedTest/LoggedTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// See the LICENSE file in the project root for more information.

using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
Expand Down Expand Up @@ -48,9 +49,11 @@ public LoggedTestBase(ITestOutputHelper output = null)
public void AddTestLogging(IServiceCollection services) => services.AddSingleton(LoggerFactory);

// For back compat
[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IDisposable StartLog(out ILoggerFactory loggerFactory, [CallerMemberName] string testName = null) => StartLog(out loggerFactory, LogLevel.Debug, testName);

// For back compat
[SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "Required to maintain compatibility")]
public IDisposable StartLog(out ILoggerFactory loggerFactory, LogLevel minLogLevel, [CallerMemberName] string testName = null)
{
return AssemblyTestLog.ForAssembly(GetType().GetTypeInfo().Assembly).StartTestLog(TestOutputHelper, GetType().FullName, out loggerFactory, minLogLevel, testName);
Expand Down
1 change: 1 addition & 0 deletions src/Testing/src/PublicAPI.Shipped.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#nullable enable
Loading

0 comments on commit 848f42d

Please sign in to comment.