diff --git a/src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs b/src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs index 840f9c660..feeceb9af 100644 --- a/src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs +++ b/src/Microsoft.OpenApi/Services/OpenApiReferenceResolver.cs @@ -7,33 +7,36 @@ using Microsoft.OpenApi.Exceptions; using Microsoft.OpenApi.Interfaces; using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Services; namespace Microsoft.OpenApi.Services { /// /// This class is used to walk an OpenApiDocument and convert unresolved references to references to populated objects /// - internal class OpenApiReferenceResolver : OpenApiVisitorBase + public class OpenApiReferenceResolver : OpenApiVisitorBase { private OpenApiDocument _currentDocument; - private bool _resolveRemoteReferences; + private readonly bool _resolveRemoteReferences; private List _errors = new List(); + /// + /// Initializes the class. + /// public OpenApiReferenceResolver(OpenApiDocument currentDocument, bool resolveRemoteReferences = true) { _currentDocument = currentDocument; _resolveRemoteReferences = resolveRemoteReferences; } - public IEnumerable Errors - { - get - { - return _errors; - } - } + /// + /// List of errors related to the OpenApiDocument + /// + public IEnumerable Errors => _errors; + /// + /// Resolves tags in OpenApiDocument + /// + /// public override void Visit(OpenApiDocument doc) { if (doc.Tags != null) @@ -42,6 +45,10 @@ public override void Visit(OpenApiDocument doc) } } + /// + /// Visits the referenceable element in the host document + /// + /// The referenceable element in the doc. public override void Visit(IOpenApiReferenceable referenceable) { if (referenceable.Reference != null) @@ -49,6 +56,11 @@ public override void Visit(IOpenApiReferenceable referenceable) referenceable.Reference.HostDocument = _currentDocument; } } + + /// + /// Resolves references in components + /// + /// public override void Visit(OpenApiComponents components) { ResolveMap(components.Parameters); @@ -62,6 +74,10 @@ public override void Visit(OpenApiComponents components) ResolveMap(components.Headers); } + /// + /// Resolves all references used in callbacks + /// + /// public override void Visit(IDictionary callbacks) { ResolveMap(callbacks); diff --git a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt index 15bc8562b..75e12f480 100755 --- a/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt +++ b/test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt @@ -1067,6 +1067,25 @@ namespace Microsoft.OpenApi.Services public OpenApiReferenceError(Microsoft.OpenApi.Exceptions.OpenApiException exception) { } public OpenApiReferenceError(Microsoft.OpenApi.Models.OpenApiReference reference, string message) { } } + public class OpenApiReferenceResolver : Microsoft.OpenApi.Services.OpenApiVisitorBase + { + public OpenApiReferenceResolver(Microsoft.OpenApi.Models.OpenApiDocument currentDocument, bool resolveRemoteReferences = true) { } + public System.Collections.Generic.IEnumerable Errors { get; } + public override void Visit(Microsoft.OpenApi.Interfaces.IOpenApiReferenceable referenceable) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiComponents components) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiDocument doc) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiMediaType mediaType) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiOperation operation) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiParameter parameter) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiResponses responses) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiSchema schema) { } + public override void Visit(Microsoft.OpenApi.Models.OpenApiSecurityRequirement securityRequirement) { } + public override void Visit(System.Collections.Generic.IDictionary callbacks) { } + public override void Visit(System.Collections.Generic.IDictionary examples) { } + public override void Visit(System.Collections.Generic.IDictionary headers) { } + public override void Visit(System.Collections.Generic.IDictionary links) { } + public override void Visit(System.Collections.Generic.IList parameters) { } + } public class OpenApiUrlTreeNode { public System.Collections.Generic.IDictionary> AdditionalData { get; set; }