Skip to content

Commit e5893b6

Browse files
committed
Moved reference resolution into the OpenApi model project
1 parent d42bd94 commit e5893b6

File tree

5 files changed

+22
-13
lines changed

5 files changed

+22
-13
lines changed

src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
5151
case ReferenceResolutionSetting.ResolveAllReferences:
5252
throw new ArgumentException("Cannot resolve remote references using synchronous Read method, use ReadAsync instead");
5353
case ReferenceResolutionSetting.ResolveLocalReferences:
54-
ResolveReferences(document,false);
54+
document.ResolveReferences(false);
5555
break;
5656
case
5757
ReferenceResolutionSetting.DoNotResolveReferences:
@@ -97,14 +97,14 @@ internal async Task<OpenApiDocument> ReadAsync(Stream input, OpenApiDiagnostic d
9797
// Resolve references in documents
9898
foreach (var item in workspace.Documents)
9999
{
100-
ResolveReferences(item, true);
100+
item.ResolveReferences(true);
101101
}
102102
break;
103103
case ReferenceResolutionSetting.ResolveLocalReferences:
104104
// Resolve references in documents
105105
foreach (var item in workspace.Documents)
106106
{
107-
ResolveReferences(item,false);
107+
item.ResolveReferences(false);
108108
}
109109
break;
110110
case
@@ -156,7 +156,6 @@ private void ValidateDocument(OpenApiDiagnostic diagnostic, OpenApiDocument docu
156156
}
157157
}
158158

159-
160159
/// <summary>
161160
/// Helper method to turn streams into YamlDocument
162161
/// </summary>
@@ -173,13 +172,5 @@ internal static YamlDocument LoadYamlDocument(Stream input)
173172
}
174173
return yamlDocument;
175174
}
176-
177-
private static void ResolveReferences(OpenApiDocument document, bool includeRemote)
178-
{
179-
var resolver = new OpenApiReferenceResolver(document, includeRemote);
180-
var walker = new OpenApiWalker(resolver);
181-
walker.Walk(document);
182-
}
183-
184175
}
185176
}

src/Microsoft.OpenApi/Extensions/OpenApiElementExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@ public static IEnumerable<OpenApiError> Validate(this IOpenApiElement element, V
2727
walker.Walk(element);
2828
return validator.Errors;
2929
}
30+
3031
}
3132
}

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,17 @@ private static void WriteHostInfoV2(IOpenApiWriter writer, IList<OpenApiServer>
271271
writer.WriteOptionalCollection(OpenApiConstants.Schemes, schemes, (w, s) => w.WriteValue(s));
272272
}
273273

274+
/// <summary>
275+
/// Walk the OpenApiDocument and resolve unresolved references
276+
/// </summary>
277+
/// <param name="useExternal">Indicates if external references should be resolved. Document needs to reference a workspace for this to be possible.</param>
278+
public void ResolveReferences(bool useExternal = false)
279+
{
280+
var resolver = new OpenApiReferenceResolver(this, useExternal);
281+
var walker = new OpenApiWalker(resolver);
282+
walker.Walk(this);
283+
}
284+
274285
/// <summary>
275286
/// Load the referenced <see cref="IOpenApiReferenceable"/> object from a <see cref="OpenApiReference"/> object
276287
/// </summary>

src/Microsoft.OpenApi.Readers/Services/OpenApiReferenceResolver.cs renamed to src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
using Microsoft.OpenApi.Models;
1010
using Microsoft.OpenApi.Services;
1111

12-
namespace Microsoft.OpenApi.Readers.Services
12+
namespace Microsoft.OpenApi.Services
1313
{
1414
/// <summary>
1515
/// This class is used to walk an OpenApiDocument and convert unresolved references to references to populated objects

src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@ public class OpenApiWorkspace
1818
{
1919
private Dictionary<string, OpenApiDocument> _documents = new Dictionary<string, OpenApiDocument>();
2020

21+
/// <summary>
22+
/// A list of OpenApiDocuments contained in the workspace
23+
/// </summary>
2124
public IEnumerable<OpenApiDocument> Documents {
2225
get {
2326
return _documents.Values;
2427
}
2528
}
2629

30+
/// <summary>
31+
/// A list of document fragments that are contained in the workspace
32+
/// </summary>
2733
public IEnumerable<IOpenApiFragment> Fragments { get; }
2834

2935

0 commit comments

Comments
 (0)