Skip to content

Commit 298b3e9

Browse files
committed
Code refactoring
1 parent 782b2ec commit 298b3e9

File tree

7 files changed

+31
-18
lines changed

7 files changed

+31
-18
lines changed

src/Microsoft.OpenApi.Readers/OpenApiYamlReader.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using Microsoft.OpenApi.Reader;
1111
using SharpYaml.Serialization;
1212
using System.Linq;
13+
using Microsoft.OpenApi.Models;
1314

1415
namespace Microsoft.OpenApi.Readers
1516
{
@@ -41,7 +42,7 @@ public async Task<ReadResult> ReadAsync(TextReader input,
4142
};
4243
}
4344

44-
return await ReadAsync(jsonNode, settings, cancellationToken);
45+
return await ReadAsync(jsonNode, settings, cancellationToken: cancellationToken);
4546
}
4647

4748
/// <inheritdoc/>
@@ -81,9 +82,9 @@ static JsonNode LoadJsonNodesFromYamlDocument(TextReader input)
8182
}
8283

8384
/// <inheritdoc/>
84-
public async Task<ReadResult> ReadAsync(JsonNode jsonNode, OpenApiReaderSettings settings, CancellationToken cancellationToken = default)
85+
public async Task<ReadResult> ReadAsync(JsonNode jsonNode, OpenApiReaderSettings settings, string format = null, CancellationToken cancellationToken = default)
8586
{
86-
return await OpenApiReaderRegistry.DefaultReader.ReadAsync(jsonNode, settings, cancellationToken);
87+
return await OpenApiReaderRegistry.DefaultReader.ReadAsync(jsonNode, settings, OpenApiConstants.Yaml, cancellationToken);
8788
}
8889

8990
/// <inheritdoc/>

src/Microsoft.OpenApi.Workbench/MainModel.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,9 @@ internal async Task ParseDocument()
246246
settings.BaseUrl = new("file://" + Path.GetDirectoryName(_inputFile) + "/");
247247
}
248248
}
249-
var readResult = await new OpenApiStreamReader(settings
250-
).ReadAsync(stream);
249+
250+
var format = OpenApiModelFactory.GetFormat(_inputFile);
251+
var readResult = await OpenApiDocument.LoadAsync(stream, format);
251252
var document = readResult.OpenApiDocument;
252253
var context = readResult.OpenApiDiagnostic;
253254

src/Microsoft.OpenApi/Interfaces/IOpenApiReader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,9 @@ public interface IOpenApiReader
2929
/// <param name="jsonNode">The JsonNode input.</param>
3030
/// <param name="settings">The Reader settings to be used during parsing.</param>
3131
/// <param name="cancellationToken">Propagates notifications that operations should be cancelled.</param>
32+
/// <param name="format">The OpenAPI format.</param>
3233
/// <returns></returns>
33-
Task<ReadResult> ReadAsync(JsonNode jsonNode, OpenApiReaderSettings settings, CancellationToken cancellationToken = default);
34+
Task<ReadResult> ReadAsync(JsonNode jsonNode, OpenApiReaderSettings settings, string format = null, CancellationToken cancellationToken = default);
3435

3536
/// <summary>
3637
/// Reads the TextReader input and parses the fragment of an OpenAPI description into an Open API Element.

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,8 +636,8 @@ public static ReadResult Load(string url, OpenApiReaderSettings settings = null)
636636
/// <param name="settings">The OpenApi reader settings.</param>
637637
/// <returns></returns>
638638
public static ReadResult Load(Stream stream,
639-
string format,
640-
OpenApiReaderSettings settings = null)
639+
string format,
640+
OpenApiReaderSettings settings = null)
641641
{
642642
return OpenApiModelFactory.Load(stream, format, settings);
643643
}

src/Microsoft.OpenApi/Reader/OpenApiJsonReader.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,28 @@ public async Task<ReadResult> ReadAsync(TextReader input,
5454
};
5555
}
5656

57-
return await ReadAsync(jsonNode, settings, cancellationToken);
57+
return await ReadAsync(jsonNode, settings, cancellationToken: cancellationToken);
5858
}
5959

6060
/// <summary>
6161
/// Parses the JsonNode input into an Open API document.
6262
/// </summary>
6363
/// <param name="jsonNode">The JsonNode input.</param>
6464
/// <param name="settings">The Reader settings to be used during parsing.</param>
65+
/// <param name="format">The OpenAPI format.</param>
6566
/// <param name="cancellationToken">Propagates notifications that operations should be cancelled.</param>
6667
/// <returns></returns>
67-
public async Task<ReadResult> ReadAsync(JsonNode jsonNode,
68+
public async Task<ReadResult> ReadAsync(JsonNode jsonNode,
6869
OpenApiReaderSettings settings,
70+
string format = null,
6971
CancellationToken cancellationToken = default)
7072
{
7173
var diagnostic = new OpenApiDiagnostic();
7274
var context = new ParsingContext(diagnostic)
7375
{
7476
ExtensionParsers = settings.ExtensionParsers,
75-
BaseUrl = settings.BaseUrl
77+
BaseUrl = settings.BaseUrl,
78+
DefaultContentType = settings.DefaultContentType
7679
};
7780

7881
OpenApiDocument document = null;
@@ -83,7 +86,7 @@ public async Task<ReadResult> ReadAsync(JsonNode jsonNode,
8386

8487
if (settings.LoadExternalRefs)
8588
{
86-
var diagnosticExternalRefs = await LoadExternalRefs(document, cancellationToken, settings);
89+
var diagnosticExternalRefs = await LoadExternalRefs(document, cancellationToken, settings, format);
8790
// Merge diagnostics of external reference
8891
if (diagnosticExternalRefs != null)
8992
{
@@ -208,15 +211,15 @@ private void ResolveReferences(OpenApiDiagnostic diagnostic, OpenApiDocument doc
208211
}
209212
}
210213

211-
private async Task<OpenApiDiagnostic> LoadExternalRefs(OpenApiDocument document, CancellationToken cancellationToken, OpenApiReaderSettings settings)
214+
private async Task<OpenApiDiagnostic> LoadExternalRefs(OpenApiDocument document, CancellationToken cancellationToken, OpenApiReaderSettings settings, string format = null)
212215
{
213216
// Create workspace for all documents to live in.
214217
var openApiWorkSpace = new OpenApiWorkspace();
215218

216219
// Load this root document into the workspace
217220
var streamLoader = new DefaultStreamLoader(settings.BaseUrl);
218221
var workspaceLoader = new OpenApiWorkspaceLoader(openApiWorkSpace, settings.CustomExternalLoader ?? streamLoader, settings);
219-
return await workspaceLoader.LoadAsync(new OpenApiReference() { ExternalResource = "/" }, document, OpenApiConstants.Json, null, cancellationToken);
222+
return await workspaceLoader.LoadAsync(new OpenApiReference() { ExternalResource = "/" }, document, format ?? OpenApiConstants.Json, null, cancellationToken);
220223
}
221224
}
222225
}

src/Microsoft.OpenApi/Reader/OpenApiModelFactory.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.IO;
66
using System.Linq;
77
using System.Net.Http;
8+
using System.Runtime;
89
using System.Security;
910
using System.Threading;
1011
using System.Threading.Tasks;
@@ -47,7 +48,15 @@ public static ReadResult Load(Stream stream,
4748
string format,
4849
OpenApiReaderSettings settings = null)
4950
{
50-
return LoadAsync(stream, format, settings).GetAwaiter().GetResult();
51+
settings ??= new OpenApiReaderSettings();
52+
53+
var result = LoadAsync(stream, format, settings).GetAwaiter().GetResult();
54+
if (!settings.LeaveStreamOpen)
55+
{
56+
stream.Dispose();
57+
}
58+
59+
return result;
5160
}
5261

5362
/// <summary>

src/Microsoft.OpenApi/Reader/Services/OpenApiWorkspaceLoader.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ internal async Task<OpenApiDiagnostic> LoadAsync(OpenApiReference reference,
3434
var collectorWalker = new OpenApiWalker(referenceCollector);
3535
collectorWalker.Walk(document);
3636

37-
var reader = OpenApiReaderRegistry.GetReader(format);
38-
3937
diagnostic ??= new();
4038

4139
// Walk references
@@ -45,7 +43,7 @@ internal async Task<OpenApiDiagnostic> LoadAsync(OpenApiReference reference,
4543
if (!_workspace.Contains(item.ExternalResource))
4644
{
4745
var input = await _loader.LoadAsync(new(item.ExternalResource, UriKind.RelativeOrAbsolute));
48-
var result = await reader.ReadAsync(input, _readerSettings, cancellationToken);
46+
var result = await OpenApiDocument.LoadAsync(input, format, _readerSettings, cancellationToken);
4947
// Merge diagnostics
5048
if (result.OpenApiDiagnostic != null)
5149
{

0 commit comments

Comments
 (0)