Skip to content

Commit fe7a2fd

Browse files
committed
fix: removes static readers registry
Signed-off-by: Vincent Biret <[email protected]>
1 parent 0ff19f8 commit fe7a2fd

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+38
-165
lines changed

src/Microsoft.OpenApi.Hidi/OpenApiService.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -388,9 +388,7 @@ private static async Task<ReadResult> ParseOpenApiAsync(string openApiFile, bool
388388
new(openApiFile) :
389389
new Uri("file://" + new FileInfo(openApiFile).DirectoryName + Path.DirectorySeparatorChar)
390390
};
391-
var yamlReader = new OpenApiYamlReader();
392-
settings.Readers.Add(OpenApiConstants.Yaml, yamlReader);
393-
settings.Readers.Add(OpenApiConstants.Yml, yamlReader);
391+
settings.AddYamlReader();
394392

395393
result = await OpenApiDocument.LoadAsync(stream, settings: settings, cancellationToken: cancellationToken).ConfigureAwait(false);
396394

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using Microsoft.OpenApi.Models;
2+
using Microsoft.OpenApi.Reader;
3+
4+
namespace Microsoft.OpenApi.Readers;
5+
6+
/// <summary>
7+
/// Extensions for <see cref="OpenApiReaderSettings"/>
8+
/// </summary>
9+
public static class OpenApiReaderSettingsExtensions
10+
{
11+
/// <summary>
12+
/// Adds a reader for the specified format
13+
/// </summary>
14+
/// <param name="settings">The settings to add the reader to.</param>
15+
public static void AddYamlReader(this OpenApiReaderSettings settings)
16+
{
17+
var yamlReader = new OpenApiYamlReader();
18+
settings.Readers.Add(OpenApiConstants.Yaml, yamlReader);
19+
settings.Readers.Add(OpenApiConstants.Yml, yamlReader);
20+
}
21+
}

src/Microsoft.OpenApi.Workbench/MainModel.cs

+1-3
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,7 @@ internal async Task ParseDocumentAsync()
235235
{
236236
RuleSet = ValidationRuleSet.GetDefaultRuleSet()
237237
};
238-
var yamlReader = new OpenApiYamlReader();
239-
settings.Readers.Add(OpenApiConstants.Yaml, yamlReader);
240-
settings.Readers.Add(OpenApiConstants.Yml, yamlReader);
238+
settings.AddYamlReader();
241239
if (ResolveExternal && !string.IsNullOrWhiteSpace(_inputFile))
242240
{
243241
settings.BaseUrl = _inputFile.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? new(_inputFile)

src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static ReadResult Load(MemoryStream stream,
4040
if (stream is null) throw new ArgumentNullException(nameof(stream));
4141
#endif
4242
settings ??= new OpenApiReaderSettings();
43-
settings.Readers.TryAdd(OpenApiConstants.Json, new OpenApiJsonReader());
43+
settings.AddJsonReader();
4444

4545
// Get the format of the stream if not provided
4646
format ??= InspectStreamFormat(stream);
@@ -118,7 +118,7 @@ public static async Task<ReadResult> LoadAsync(Stream input, string format = nul
118118
if (input is null) throw new ArgumentNullException(nameof(input));
119119
#endif
120120
settings ??= new OpenApiReaderSettings();
121-
settings.Readers.TryAdd(OpenApiConstants.Json, new OpenApiJsonReader());
121+
settings.AddJsonReader();
122122

123123
Stream preparedStream;
124124
if (format is null)
@@ -201,7 +201,7 @@ public static ReadResult Parse(string input,
201201
#endif
202202
format ??= InspectInputFormat(input);
203203
settings ??= new OpenApiReaderSettings();
204-
settings.Readers.TryAdd(OpenApiConstants.Json, new OpenApiJsonReader());
204+
settings.AddJsonReader();
205205

206206
// Copy string into MemoryStream
207207
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(input));
@@ -233,7 +233,7 @@ public static T Parse<T>(string input,
233233
#endif
234234
format ??= InspectInputFormat(input);
235235
settings ??= new OpenApiReaderSettings();
236-
settings.Readers.TryAdd(OpenApiConstants.Json, new OpenApiJsonReader());
236+
settings.AddJsonReader();
237237
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(input));
238238
return Load<T>(stream, version, format, openApiDocument, out diagnostic, settings);
239239
}

src/Microsoft.OpenApi/Reader/OpenApiReaderRegistry.cs

-23
This file was deleted.

src/Microsoft.OpenApi/Reader/OpenApiReaderSettings.cs

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Text.Json.Nodes;
88
using Microsoft.OpenApi.Interfaces;
99
using Microsoft.OpenApi.MicrosoftExtensions;
10+
using Microsoft.OpenApi.Models;
1011
using Microsoft.OpenApi.Validations;
1112

1213
namespace Microsoft.OpenApi.Reader
@@ -16,6 +17,13 @@ namespace Microsoft.OpenApi.Reader
1617
/// </summary>
1718
public class OpenApiReaderSettings
1819
{
20+
/// <summary>
21+
/// Adds a reader for the specified format
22+
/// </summary>
23+
public void AddJsonReader()
24+
{
25+
Readers.Add(OpenApiConstants.Json, new OpenApiJsonReader());
26+
}
1927
/// <summary>
2028
/// Readers to use to parse the OpenAPI document
2129
/// </summary>

test/Microsoft.OpenApi.Hidi.Tests/Services/OpenApiServiceTests.cs

-2
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ public sealed class OpenApiServiceTests : IDisposable
2626
public OpenApiServiceTests()
2727
{
2828
_logger = new Logger<OpenApiServiceTests>(_loggerFactory);
29-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yml, new OpenApiYamlReader());
30-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
3129
}
3230

3331
[Fact]

test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiDiagnosticTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ namespace Microsoft.OpenApi.Readers.Tests.OpenApiReaderTests
1515
[Collection("DefaultSettings")]
1616
public class OpenApiDiagnosticTests
1717
{
18-
public OpenApiDiagnosticTests()
19-
{
20-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
21-
}
22-
2318
[Fact]
2419
public async Task DetectedSpecificationVersionShouldBeV2_0()
2520
{

test/Microsoft.OpenApi.Readers.Tests/OpenApiReaderTests/OpenApiStreamReaderTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ public class OpenApiStreamReaderTests
1515
{
1616
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDocument/";
1717

18-
public OpenApiStreamReaderTests()
19-
{
20-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
21-
}
22-
2318
[Fact]
2419
public async Task StreamShouldCloseIfLeaveStreamOpenSettingEqualsFalse()
2520
{

test/Microsoft.OpenApi.Readers.Tests/OpenApiWorkspaceTests/OpenApiWorkspaceStreamTests.cs

-7
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ namespace Microsoft.OpenApi.Readers.Tests.OpenApiWorkspaceTests
1111
{
1212
public class OpenApiWorkspaceStreamTests
1313
{
14-
private const string SampleFolderPath = "V3Tests/Samples/OpenApiWorkspace/";
15-
16-
public OpenApiWorkspaceStreamTests()
17-
{
18-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
19-
}
20-
2114
// Use OpenApiWorkspace to load a document and a referenced document
2215

2316
[Fact]

test/Microsoft.OpenApi.Readers.Tests/ParseNodeTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,6 @@ namespace Microsoft.OpenApi.Tests
1212
{
1313
public class ParseNodeTests
1414
{
15-
public ParseNodeTests()
16-
{
17-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
18-
}
19-
2015
[Fact]
2116
public void BrokenSimpleList()
2217
{

test/Microsoft.OpenApi.Readers.Tests/ReferenceService/TryLoadReferenceV2Tests.cs

-6
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,6 @@ namespace Microsoft.OpenApi.Readers.Tests.ReferenceService
1616
public class TryLoadReferenceV2Tests
1717
{
1818
private const string SampleFolderPath = "ReferenceService/Samples/";
19-
20-
public TryLoadReferenceV2Tests()
21-
{
22-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
23-
}
24-
2519
[Fact]
2620
public async Task LoadParameterReference()
2721
{

test/Microsoft.OpenApi.Readers.Tests/TestCustomExtension.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public void ParseCustomExtension()
3636
};
3737
} } }
3838
};
39+
settings.AddYamlReader();
3940

40-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
4141
var diag = new OpenApiDiagnostic();
4242
var actual = OpenApiDocument.Parse(description, "yaml", settings: settings);
4343

test/Microsoft.OpenApi.Readers.Tests/V2Tests/ComparisonTests.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public class ComparisonTests
2121
//[InlineData("definitions")] //Currently broken due to V3 references not behaving the same as V2
2222
public async Task EquivalentV2AndV3DocumentsShouldProduceEquivalentObjects(string fileName)
2323
{
24-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
24+
var settings = new OpenApiReaderSettings();
25+
settings.AddYamlReader();
2526
using var streamV2 = Resources.GetStream(Path.Combine(SampleFolderPath, $"{fileName}.v2.yaml"));
2627
using var streamV3 = Resources.GetStream(Path.Combine(SampleFolderPath, $"{fileName}.v3.yaml"));
2728
var result1 = await OpenApiDocument.LoadAsync(Path.Combine(SampleFolderPath, $"{fileName}.v2.yaml"));

test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiDocumentTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,6 @@ public class OpenApiDocumentTests
2121
{
2222
private const string SampleFolderPath = "V2Tests/Samples/";
2323

24-
public OpenApiDocumentTests()
25-
{
26-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
27-
}
28-
2924
[Theory]
3025
[InlineData("en-US")]
3126
[InlineData("hi-IN")]

test/Microsoft.OpenApi.Readers.Tests/V2Tests/OpenApiServerTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,6 @@ namespace Microsoft.OpenApi.Readers.Tests.V2Tests
77
{
88
public class OpenApiServerTests
99
{
10-
public OpenApiServerTests()
11-
{
12-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
13-
}
14-
1510
[Fact]
1611
public void NoServer()
1712
{

test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiDocumentTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@ public class OpenApiDocumentTests
2020
{
2121
private const string SampleFolderPath = "V31Tests/Samples/OpenApiDocument/";
2222

23-
public OpenApiDocumentTests()
24-
{
25-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
26-
}
27-
2823
[Fact]
2924
public async Task ParseDocumentWithWebhooksShouldSucceed()
3025
{

test/Microsoft.OpenApi.Readers.Tests/V31Tests/OpenApiSchemaTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,6 @@ public static MemoryStream GetMemoryStream(string fileName)
3232
return new MemoryStream(fileBytes);
3333
}
3434

35-
public OpenApiSchemaTests()
36-
{
37-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
38-
}
39-
4035
[Fact]
4136
public async Task ParseBasicV31SchemaShouldSucceed()
4237
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiCallbackTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ namespace Microsoft.OpenApi.Readers.Tests.V3Tests
1616
public class OpenApiCallbackTests
1717
{
1818
private const string SampleFolderPath = "V3Tests/Samples/OpenApiCallback/";
19-
public OpenApiCallbackTests()
20-
{
21-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
22-
}
23-
2419
[Fact]
2520
public async Task ParseBasicCallbackShouldSucceed()
2621
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDiscriminatorTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@ public class OpenApiDiscriminatorTests
1414
{
1515
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDiscriminator/";
1616

17-
public OpenApiDiscriminatorTests()
18-
{
19-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
20-
}
21-
2217
[Fact]
2318
public async Task ParseBasicDiscriminatorShouldSucceed()
2419
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiDocumentTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,6 @@ public class OpenApiDocumentTests
2828
private const string SampleFolderPath = "V3Tests/Samples/OpenApiDocument/";
2929
private const string codacyApi = "https://api.codacy.com/api/api-docs/swagger.yaml";
3030

31-
public OpenApiDocumentTests()
32-
{
33-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
34-
}
35-
3631
private static async Task<T> CloneAsync<T>(T element) where T : class, IOpenApiSerializable
3732
{
3833
using var stream = new MemoryStream();

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiEncodingTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,6 @@ public class OpenApiEncodingTests
1414
{
1515
private const string SampleFolderPath = "V3Tests/Samples/OpenApiEncoding/";
1616

17-
public OpenApiEncodingTests()
18-
{
19-
OpenApiReaderRegistry.RegisterReader(OpenApiConstants.Yaml, new OpenApiYamlReader());
20-
}
21-
2217
[Fact]
2318
public async Task ParseBasicEncodingShouldSucceed()
2419
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiExampleTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ public class OpenApiExampleTests
1616
{
1717
private const string SampleFolderPath = "V3Tests/Samples/OpenApiExample/";
1818

19-
public OpenApiExampleTests()
20-
{
21-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
22-
}
23-
2419
[Fact]
2520
public async Task ParseAdvancedExampleShouldSucceed()
2621
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiInfoTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@ public class OpenApiInfoTests
1818
{
1919
private const string SampleFolderPath = "V3Tests/Samples/OpenApiInfo/";
2020

21-
public OpenApiInfoTests()
22-
{
23-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
24-
}
25-
2621
[Fact]
2722
public async Task ParseAdvancedInfoShouldSucceed()
2823
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiMediaTypeTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@ public class OpenApiMediaTypeTests
1919
{
2020
private const string SampleFolderPath = "V3Tests/Samples/OpenApiMediaType/";
2121

22-
public OpenApiMediaTypeTests()
23-
{
24-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
25-
}
26-
2722
[Fact]
2823
public async Task ParseMediaTypeWithExampleShouldSucceed()
2924
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiOperationTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ public class OpenApiOperationTests
1616
{
1717
private const string SampleFolderPath = "V3Tests/Samples/OpenApiOperation/";
1818

19-
public OpenApiOperationTests()
20-
{
21-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
22-
}
23-
2419
[Fact]
2520
public async Task OperationWithSecurityRequirementShouldReferenceSecurityScheme()
2621
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiParameterTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,6 @@ public class OpenApiParameterTests
1919
{
2020
private const string SampleFolderPath = "V3Tests/Samples/OpenApiParameter/";
2121

22-
public OpenApiParameterTests()
23-
{
24-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
25-
}
26-
2722
[Fact]
2823
public async Task ParsePathParameterShouldSucceed()
2924
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiResponseTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ public class OpenApiResponseTests
1616
{
1717
private const string SampleFolderPath = "V3Tests/Samples/OpenApiResponse/";
1818

19-
public OpenApiResponseTests()
20-
{
21-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
22-
}
23-
2419
[Fact]
2520
public async Task ResponseWithReferencedHeaderShouldReferenceComponent()
2621
{

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiSchemaTests.cs

-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@ public class OpenApiSchemaTests
2424
{
2525
private const string SampleFolderPath = "V3Tests/Samples/OpenApiSchema/";
2626

27-
public OpenApiSchemaTests()
28-
{
29-
OpenApiReaderRegistry.RegisterReader("yaml", new OpenApiYamlReader());
30-
}
31-
3227
[Fact]
3328
public void ParsePrimitiveSchemaShouldSucceed()
3429
{

0 commit comments

Comments
 (0)