diff --git a/eng/Versions.props b/eng/Versions.props index 7ae3fd4c16fb..6efefb0f35ec 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -323,8 +323,8 @@ $(XunitVersion) $(XunitVersion) 5.2.2 - 2.0.0-preview.18 - 2.0.0-preview.18 + 2.0.0-preview.29 + 2.0.0-preview.29 6.0.322601 1.10.93 diff --git a/src/OpenApi/gen/XmlCommentGenerator.Emitter.cs b/src/OpenApi/gen/XmlCommentGenerator.Emitter.cs index 771f09d181c3..7e27ffb79b95 100644 --- a/src/OpenApi/gen/XmlCommentGenerator.Emitter.cs +++ b/src/OpenApi/gen/XmlCommentGenerator.Emitter.cs @@ -58,9 +58,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; {{GeneratedCodeAttribute}} file record XmlComment( diff --git a/src/OpenApi/perf/Microbenchmarks/TransformersBenchmark.cs b/src/OpenApi/perf/Microbenchmarks/TransformersBenchmark.cs index dc7a78d517d7..87434483fc0a 100644 --- a/src/OpenApi/perf/Microbenchmarks/TransformersBenchmark.cs +++ b/src/OpenApi/perf/Microbenchmarks/TransformersBenchmark.cs @@ -5,8 +5,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace Microsoft.AspNetCore.OpenApi.Microbenchmarks; @@ -102,7 +101,7 @@ public void SchemaTransformer_Setup() { _options.AddSchemaTransformer((schema, context, token) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); if (context.JsonTypeInfo.Type == typeof(Todo) && context.ParameterDescription != null) { schema.Extensions["x-my-extension"] = new JsonNodeExtension(context.ParameterDescription.Name); @@ -176,7 +175,7 @@ private class SchemaTransformer : IOpenApiSchemaTransformer { public Task TransformAsync(OpenApiSchema schema, OpenApiSchemaTransformerContext context, CancellationToken cancellationToken) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); if (context.JsonTypeInfo.Type == typeof(Todo) && context.ParameterDescription != null) { schema.Extensions["x-my-extension"] = new JsonNodeExtension(context.ParameterDescription.Name); diff --git a/src/OpenApi/sample/Program.cs b/src/OpenApi/sample/Program.cs index cc1899e40482..773e89d28093 100644 --- a/src/OpenApi/sample/Program.cs +++ b/src/OpenApi/sample/Program.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json.Serialization; -using Microsoft.OpenApi.Models; using Sample.Transformers; var builder = WebApplication.CreateBuilder(args); diff --git a/src/OpenApi/sample/Sample.csproj b/src/OpenApi/sample/Sample.csproj index f68e61f29ba8..bc97ebe3f173 100644 --- a/src/OpenApi/sample/Sample.csproj +++ b/src/OpenApi/sample/Sample.csproj @@ -39,4 +39,8 @@ + + + + diff --git a/src/OpenApi/sample/Transformers/AddBearerSecuritySchemeTransformer.cs b/src/OpenApi/sample/Transformers/AddBearerSecuritySchemeTransformer.cs index 05ea43c8580f..ad841d605991 100644 --- a/src/OpenApi/sample/Transformers/AddBearerSecuritySchemeTransformer.cs +++ b/src/OpenApi/sample/Transformers/AddBearerSecuritySchemeTransformer.cs @@ -3,8 +3,6 @@ using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; namespace Sample.Transformers; diff --git a/src/OpenApi/sample/Transformers/AddContactTransformer.cs b/src/OpenApi/sample/Transformers/AddContactTransformer.cs index 5d9d35f1c7ad..513073a67caf 100644 --- a/src/OpenApi/sample/Transformers/AddContactTransformer.cs +++ b/src/OpenApi/sample/Transformers/AddContactTransformer.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; namespace Sample.Transformers; diff --git a/src/OpenApi/sample/Transformers/AddExternalDocsTransformer.cs b/src/OpenApi/sample/Transformers/AddExternalDocsTransformer.cs index b47b3b4d7697..8143890faec3 100644 --- a/src/OpenApi/sample/Transformers/AddExternalDocsTransformer.cs +++ b/src/OpenApi/sample/Transformers/AddExternalDocsTransformer.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; namespace Sample.Transformers; diff --git a/src/OpenApi/sample/Transformers/OperationTransformers.cs b/src/OpenApi/sample/Transformers/OperationTransformers.cs index 0c90f63d8e1a..df286b126b56 100644 --- a/src/OpenApi/sample/Transformers/OperationTransformers.cs +++ b/src/OpenApi/sample/Transformers/OperationTransformers.cs @@ -2,8 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; namespace Sample.Transformers; diff --git a/src/OpenApi/src/Extensions/JsonNodeSchemaExtensions.cs b/src/OpenApi/src/Extensions/JsonNodeSchemaExtensions.cs index 777913ccc567..bde53bfd7f2e 100644 --- a/src/OpenApi/src/Extensions/JsonNodeSchemaExtensions.cs +++ b/src/OpenApi/src/Extensions/JsonNodeSchemaExtensions.cs @@ -15,7 +15,6 @@ using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Routing.Constraints; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Extensions/OpenApiDocumentExtensions.cs b/src/OpenApi/src/Extensions/OpenApiDocumentExtensions.cs index cb3b6b26abfc..c53465f8226c 100644 --- a/src/OpenApi/src/Extensions/OpenApiDocumentExtensions.cs +++ b/src/OpenApi/src/Extensions/OpenApiDocumentExtensions.cs @@ -1,10 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; - namespace Microsoft.AspNetCore.OpenApi; internal static class OpenApiDocumentExtensions diff --git a/src/OpenApi/src/Extensions/OpenApiEndpointConventionBuilderExtensions.cs b/src/OpenApi/src/Extensions/OpenApiEndpointConventionBuilderExtensions.cs index 936eebf24cd4..ac4b49ca8306 100644 --- a/src/OpenApi/src/Extensions/OpenApiEndpointConventionBuilderExtensions.cs +++ b/src/OpenApi/src/Extensions/OpenApiEndpointConventionBuilderExtensions.cs @@ -9,7 +9,6 @@ using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.Builder; diff --git a/src/OpenApi/src/Extensions/OpenApiEndpointRouteBuilderExtensions.cs b/src/OpenApi/src/Extensions/OpenApiEndpointRouteBuilderExtensions.cs index 95ef73102184..8fdbfa27d723 100644 --- a/src/OpenApi/src/Extensions/OpenApiEndpointRouteBuilderExtensions.cs +++ b/src/OpenApi/src/Extensions/OpenApiEndpointRouteBuilderExtensions.cs @@ -8,8 +8,6 @@ using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Writers; namespace Microsoft.AspNetCore.Builder; @@ -25,10 +23,10 @@ public static class OpenApiEndpointRouteBuilderExtensions /// The . /// The route to register the endpoint on. Must include the 'documentName' route parameter. /// An that can be used to further customize the endpoint. - public static IEndpointConventionBuilder MapOpenApi(this IEndpointRouteBuilder endpoints, [StringSyntax("Route")] string pattern = OpenApiConstants.DefaultOpenApiRoute) + public static IEndpointConventionBuilder MapOpenApi(this IEndpointRouteBuilder endpoints, [StringSyntax("Route")] string pattern = OpenApi.OpenApiConstants.DefaultOpenApiRoute) { var options = endpoints.ServiceProvider.GetRequiredService>(); - return endpoints.MapGet(pattern, async (HttpContext context, string documentName = OpenApiConstants.DefaultDocumentName) => + return endpoints.MapGet(pattern, async (HttpContext context, string documentName = OpenApi.OpenApiConstants.DefaultDocumentName) => { // We need to retrieve the document name in a case-insensitive manner to support case-insensitive document name resolution. // The document service is registered with a key equal to the document name, but in lowercase. diff --git a/src/OpenApi/src/Extensions/OpenApiServiceCollectionExtensions.cs b/src/OpenApi/src/Extensions/OpenApiServiceCollectionExtensions.cs index 6516247a215e..1e96388af3b0 100644 --- a/src/OpenApi/src/Extensions/OpenApiServiceCollectionExtensions.cs +++ b/src/OpenApi/src/Extensions/OpenApiServiceCollectionExtensions.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.ApiDescriptions; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using OpenApiConstants = Microsoft.AspNetCore.OpenApi.OpenApiConstants; namespace Microsoft.Extensions.DependencyInjection; diff --git a/src/OpenApi/src/Microsoft.AspNetCore.OpenApi.csproj b/src/OpenApi/src/Microsoft.AspNetCore.OpenApi.csproj index bea66b4fe4ae..7bf5362ca205 100644 --- a/src/OpenApi/src/Microsoft.AspNetCore.OpenApi.csproj +++ b/src/OpenApi/src/Microsoft.AspNetCore.OpenApi.csproj @@ -49,11 +49,12 @@ - + + + + + diff --git a/src/OpenApi/src/PublicAPI.Unshipped.txt b/src/OpenApi/src/PublicAPI.Unshipped.txt index 8c0657a70dca..b94c71e90cb6 100644 --- a/src/OpenApi/src/PublicAPI.Unshipped.txt +++ b/src/OpenApi/src/PublicAPI.Unshipped.txt @@ -1,11 +1,25 @@ #nullable enable +*REMOVED*Microsoft.AspNetCore.OpenApi.IOpenApiDocumentTransformer.TransformAsync(Microsoft.OpenApi.Models.OpenApiDocument! document, Microsoft.AspNetCore.OpenApi.OpenApiDocumentTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +*REMOVED*Microsoft.AspNetCore.OpenApi.IOpenApiOperationTransformer.TransformAsync(Microsoft.OpenApi.Models.OpenApiOperation! operation, Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +*REMOVED*Microsoft.AspNetCore.OpenApi.IOpenApiSchemaTransformer.TransformAsync(Microsoft.OpenApi.Models.OpenApiSchema! schema, Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +*REMOVED*Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddDocumentTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +*REMOVED*Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddOperationTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +*REMOVED*Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddSchemaTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +*REMOVED*static Microsoft.AspNetCore.Builder.OpenApiEndpointConventionBuilderExtensions.WithOpenApi(this TBuilder builder, System.Func! configureOperation) -> TBuilder Microsoft.AspNetCore.OpenApi.IOpenApiDocumentProvider -Microsoft.AspNetCore.OpenApi.IOpenApiDocumentProvider.GetOpenApiDocumentAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -static Microsoft.AspNetCore.Builder.OpenApiEndpointConventionBuilderExtensions.AddOpenApiOperationTransformer(this TBuilder builder, System.Func! transformer) -> TBuilder -Microsoft.AspNetCore.OpenApi.OpenApiDocumentTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.Document.get -> Microsoft.OpenApi.Models.OpenApiDocument? +Microsoft.AspNetCore.OpenApi.IOpenApiDocumentProvider.GetOpenApiDocumentAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.IOpenApiDocumentTransformer.TransformAsync(Microsoft.OpenApi.OpenApiDocument! document, Microsoft.AspNetCore.OpenApi.OpenApiDocumentTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.IOpenApiOperationTransformer.TransformAsync(Microsoft.OpenApi.OpenApiOperation! operation, Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.IOpenApiSchemaTransformer.TransformAsync(Microsoft.OpenApi.OpenApiSchema! schema, Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext! context, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddDocumentTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddOperationTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +Microsoft.AspNetCore.OpenApi.OpenApiOptions.AddSchemaTransformer(System.Func! transformer) -> Microsoft.AspNetCore.OpenApi.OpenApiOptions! +static Microsoft.AspNetCore.Builder.OpenApiEndpointConventionBuilderExtensions.AddOpenApiOperationTransformer(this TBuilder builder, System.Func! transformer) -> TBuilder +Microsoft.AspNetCore.OpenApi.OpenApiDocumentTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.Document.get -> Microsoft.OpenApi.OpenApiDocument? Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.Document.init -> void -Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! -Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext.Document.get -> Microsoft.OpenApi.Models.OpenApiDocument? +Microsoft.AspNetCore.OpenApi.OpenApiOperationTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext.Document.get -> Microsoft.OpenApi.OpenApiDocument? Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext.Document.init -> void -Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +Microsoft.AspNetCore.OpenApi.OpenApiSchemaTransformerContext.GetOrCreateSchemaAsync(System.Type! type, Microsoft.AspNetCore.Mvc.ApiExplorer.ApiParameterDescription? parameterDescription = null, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Threading.Tasks.Task! +static Microsoft.AspNetCore.Builder.OpenApiEndpointConventionBuilderExtensions.WithOpenApi(this TBuilder builder, System.Func! configureOperation) -> TBuilder diff --git a/src/OpenApi/src/Schemas/OpenApiJsonSchema.Helpers.cs b/src/OpenApi/src/Schemas/OpenApiJsonSchema.Helpers.cs index 1bf7ccd7921a..6633ddac3f65 100644 --- a/src/OpenApi/src/Schemas/OpenApiJsonSchema.Helpers.cs +++ b/src/OpenApi/src/Schemas/OpenApiJsonSchema.Helpers.cs @@ -8,9 +8,7 @@ using System.Text.Json.Nodes; using System.Text.Json.Serialization; using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; + using OpenApiConstants = Microsoft.AspNetCore.OpenApi.OpenApiConstants; internal sealed partial class OpenApiJsonSchema @@ -309,14 +307,14 @@ public static void ReadProperty(ref Utf8JsonReader reader, string propertyName, schema.Discriminator ??= new OpenApiDiscriminator(); foreach (var kvp in mappings) { - schema.Discriminator.Mapping ??= []; + schema.Discriminator.Mapping ??= new Dictionary(); schema.Discriminator.Mapping[kvp.Key] = new OpenApiSchemaReference(kvp.Value); } } break; case OpenApiConstants.SchemaId: reader.Read(); - schema.Metadata ??= []; + schema.Metadata ??= new Dictionary(); schema.Metadata.Add(OpenApiConstants.SchemaId, reader.GetString() ?? string.Empty); break; // OpenAPI does not support the `const` keyword in its schema implementation, so @@ -328,7 +326,7 @@ public static void ReadProperty(ref Utf8JsonReader reader, string propertyName, break; case OpenApiSchemaKeywords.RefKeyword: reader.Read(); - schema.Metadata ??= []; + schema.Metadata ??= new Dictionary(); schema.Metadata[OpenApiConstants.RefId] = reader.GetString() ?? string.Empty; break; default: diff --git a/src/OpenApi/src/Schemas/OpenApiJsonSchema.cs b/src/OpenApi/src/Schemas/OpenApiJsonSchema.cs index 08ece97c62a5..3a73ace8778e 100644 --- a/src/OpenApi/src/Schemas/OpenApiJsonSchema.cs +++ b/src/OpenApi/src/Schemas/OpenApiJsonSchema.cs @@ -3,7 +3,6 @@ using System.Text.Json; using System.Text.Json.Serialization; -using Microsoft.OpenApi.Models; [JsonConverter(typeof(JsonConverter))] internal sealed partial class OpenApiJsonSchema(OpenApiSchema schema) diff --git a/src/OpenApi/src/Services/IDocumentProvider.cs b/src/OpenApi/src/Services/IDocumentProvider.cs index 31344117305e..2ea36eddf88a 100644 --- a/src/OpenApi/src/Services/IDocumentProvider.cs +++ b/src/OpenApi/src/Services/IDocumentProvider.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi; - namespace Microsoft.Extensions.ApiDescriptions; /// diff --git a/src/OpenApi/src/Services/IOpenApiDocumentProvider.cs b/src/OpenApi/src/Services/IOpenApiDocumentProvider.cs index afefb05eed7c..205679310a15 100644 --- a/src/OpenApi/src/Services/IOpenApiDocumentProvider.cs +++ b/src/OpenApi/src/Services/IOpenApiDocumentProvider.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; /// diff --git a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs index 3a26e0ad1f4c..7ba8c044a265 100644 --- a/src/OpenApi/src/Services/OpenApiDocumentProvider.cs +++ b/src/OpenApi/src/Services/OpenApiDocumentProvider.cs @@ -4,9 +4,6 @@ using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Microsoft.OpenApi; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Writers; using System.Linq; namespace Microsoft.Extensions.ApiDescriptions; diff --git a/src/OpenApi/src/Services/OpenApiDocumentService.cs b/src/OpenApi/src/Services/OpenApiDocumentService.cs index 4a2a426c7f4d..d8676530f00e 100644 --- a/src/OpenApi/src/Services/OpenApiDocumentService.cs +++ b/src/OpenApi/src/Services/OpenApiDocumentService.cs @@ -27,9 +27,6 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; namespace Microsoft.AspNetCore.OpenApi; @@ -270,7 +267,7 @@ private async Task> GetOperationsAsync( foreach (var description in descriptions) { var operation = await GetOperationAsync(description, document, scopedServiceProvider, schemaTransformers, cancellationToken); - operation.Metadata ??= []; + operation.Metadata ??= new Dictionary(); operation.Metadata.Add(OpenApiConstants.DescriptionId, description.ActionDescriptor.Id); var operationContext = new OpenApiOperationTransformerContext @@ -343,7 +340,7 @@ private static HashSet GetTags(ApiDescription description, HashSet tags = []; foreach (var tag in tagsMetadata.Tags) { - document.Tags ??= []; + document.Tags ??= new HashSet(); document.Tags.Add(new OpenApiTag { Name = tag }); tags.Add(new OpenApiTagReference(tag, document)); @@ -353,7 +350,7 @@ private static HashSet GetTags(ApiDescription description, // If no tags are specified, use the controller name as the tag. This effectively // allows us to group endpoints by the "resource" concept (e.g. users, todos, etc.) var controllerName = description.ActionDescriptor.RouteValues["controller"]; - document.Tags ??= []; + document.Tags ??= new HashSet(); document.Tags.Add(new OpenApiTag { Name = controllerName }); return controllerName is not null ? [new(controllerName, document)] : []; } @@ -403,7 +400,7 @@ private async Task GetResponseAsync( var response = new OpenApiResponse { Description = apiResponseType.Description ?? ReasonPhrases.GetReasonPhrase(statusCode), - Content = [] + Content = new Dictionary() }; // ApiResponseFormats aggregates information about the supported response content types @@ -543,10 +540,10 @@ private async Task GetFormRequestBody( // serializing a form collection from an empty body. Instead, requiredness // must be set on a per-parameter basis. See below. Required = true, - Content = [] + Content = new Dictionary() }; - var schema = new OpenApiSchema { Type = JsonSchemaType.Object, Properties = [] }; + var schema = new OpenApiSchema { Type = JsonSchemaType.Object, Properties = new Dictionary() }; IOpenApiSchema? complexTypeSchema = null; // Group form parameters by their name because MVC explodes form parameters that are bound from the // same model instance into separate ApiParameterDescriptions in ApiExplorer, while minimal APIs does not. @@ -574,7 +571,7 @@ private async Task GetFormRequestBody( { if (IsRequired(description)) { - schema.Required ??= []; + schema.Required ??= new HashSet(); schema.Required.Add(description.Name); } if (hasMultipleFormParameters) @@ -591,7 +588,7 @@ private async Task GetFormRequestBody( } else { - schema.Properties ??= []; + schema.Properties ??= new Dictionary(); schema.Properties[description.Name] = parameterSchema; } } @@ -616,7 +613,7 @@ private async Task GetFormRequestBody( { if (IsRequired(description)) { - schema.Required ??= []; + schema.Required ??= new HashSet(); schema.Required.Add(description.Name); } schema.AllOf ??= []; @@ -640,10 +637,10 @@ private async Task GetFormRequestBody( { if (IsRequired(description)) { - schema.Required ??= []; + schema.Required ??= new HashSet(); schema.Required.Add(description.Name); } - schema.Properties ??= []; + schema.Properties ??= new Dictionary(); schema.Properties[description.Name] = parameterSchema; } } @@ -653,7 +650,7 @@ private async Task GetFormRequestBody( { if (hasMultipleFormParameters) { - var propertySchema = new OpenApiSchema { Type = JsonSchemaType.Object, Properties = [] }; + var propertySchema = new OpenApiSchema { Type = JsonSchemaType.Object, Properties = new Dictionary() }; foreach (var description in parameter) { propertySchema.Properties[description.Name] = await _componentService.GetOrCreateSchemaAsync(document, description.Type, scopedServiceProvider, schemaTransformers, description, cancellationToken: cancellationToken); @@ -665,7 +662,7 @@ private async Task GetFormRequestBody( { foreach (var description in parameter) { - schema.Properties ??= []; + schema.Properties ??= new Dictionary(); schema.Properties[description.Name] = await _componentService.GetOrCreateSchemaAsync(document, description.Type, scopedServiceProvider, schemaTransformers, description, cancellationToken: cancellationToken); } } @@ -711,13 +708,13 @@ private async Task GetJsonRequestBody( var requestBody = new OpenApiRequestBody { Required = IsRequired(bodyParameter), - Content = [], + Content = new Dictionary(), Description = GetParameterDescriptionFromAttribute(bodyParameter) }; - foreach (var requestForm in supportedRequestFormats) + foreach (var requestFormat in supportedRequestFormats) { - var contentType = requestForm.MediaType; + var contentType = requestFormat.MediaType; requestBody.Content[contentType] = new OpenApiMediaType { Schema = await _componentService.GetOrCreateSchemaAsync(document, bodyParameter.Type, scopedServiceProvider, schemaTransformers, bodyParameter, cancellationToken: cancellationToken) }; } diff --git a/src/OpenApi/src/Services/OpenApiGenerator.cs b/src/OpenApi/src/Services/OpenApiGenerator.cs index 5d321bd95382..fd56a779dc88 100644 --- a/src/OpenApi/src/Services/OpenApiGenerator.cs +++ b/src/OpenApi/src/Services/OpenApiGenerator.cs @@ -19,9 +19,6 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Internal; using Microsoft.Extensions.Primitives; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Services/OpenApiOptions.cs b/src/OpenApi/src/Services/OpenApiOptions.cs index 76bc00735430..6c0936515307 100644 --- a/src/OpenApi/src/Services/OpenApiOptions.cs +++ b/src/OpenApi/src/Services/OpenApiOptions.cs @@ -4,8 +4,6 @@ using System.Diagnostics.CodeAnalysis; using System.Text.Json.Serialization.Metadata; using Microsoft.AspNetCore.Mvc.ApiExplorer; -using Microsoft.OpenApi; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Services/Schemas/OpenApiSchemaService.cs b/src/OpenApi/src/Services/Schemas/OpenApiSchemaService.cs index 3781b0d420b3..10737cbd5f20 100644 --- a/src/OpenApi/src/Services/Schemas/OpenApiSchemaService.cs +++ b/src/OpenApi/src/Services/Schemas/OpenApiSchemaService.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Collections.Concurrent; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Diagnostics; @@ -16,9 +17,6 @@ using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.Interfaces; -using Microsoft.OpenApi.Models.References; namespace Microsoft.AspNetCore.OpenApi; @@ -32,6 +30,7 @@ internal sealed class OpenApiSchemaService( IOptions jsonOptions, IOptionsMonitor optionsMonitor) { + private readonly ConcurrentDictionary _schemaIdCache = new(); private readonly OpenApiJsonSchemaContext _jsonSchemaContext = new(new(jsonOptions.Value.SerializerOptions)); private readonly JsonSerializerOptions _jsonSerializerOptions = new(jsonOptions.Value.SerializerOptions) { @@ -140,10 +139,19 @@ internal async Task GetOrCreateUnresolvedSchemaAsync(OpenApiDocum internal async Task GetOrCreateSchemaAsync(OpenApiDocument document, Type type, IServiceProvider scopedServiceProvider, IOpenApiSchemaTransformer[] schemaTransformers, ApiParameterDescription? parameterDescription = null, CancellationToken cancellationToken = default) { var schema = await GetOrCreateUnresolvedSchemaAsync(document, type, scopedServiceProvider, schemaTransformers, parameterDescription, cancellationToken); - return ResolveReferenceForSchema(document, schema); + + // Cache the root schema IDs since we expect to be called + // on the same type multiple times within an API + var baseSchemaId = _schemaIdCache.GetOrAdd(type, t => + { + var jsonTypeInfo = _jsonSerializerOptions.GetTypeInfo(t); + return optionsMonitor.Get(documentName).CreateSchemaReferenceId(jsonTypeInfo); + }); + + return ResolveReferenceForSchema(document, schema, baseSchemaId); } - internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument document, IOpenApiSchema inputSchema, string? baseSchemaId = null) + internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument document, IOpenApiSchema inputSchema, string? rootSchemaId, string? baseSchemaId = null) { var schema = UnwrapOpenApiSchema(inputSchema); @@ -154,7 +162,7 @@ internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument documen { for (var i = 0; i < schema.AnyOf.Count; i++) { - schema.AnyOf[i] = ResolveReferenceForSchema(document, schema.AnyOf[i], resolvedBaseSchemaId?.ToString()); + schema.AnyOf[i] = ResolveReferenceForSchema(document, schema.AnyOf[i], rootSchemaId, resolvedBaseSchemaId?.ToString()); } } } @@ -163,7 +171,7 @@ internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument documen { foreach (var property in schema.Properties) { - schema.Properties[property.Key] = ResolveReferenceForSchema(document, property.Value); + schema.Properties[property.Key] = ResolveReferenceForSchema(document, property.Value, rootSchemaId); } } @@ -171,7 +179,7 @@ internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument documen { for (var i = 0; i < schema.AllOf.Count; i++) { - schema.AllOf[i] = ResolveReferenceForSchema(document, schema.AllOf[i]); + schema.AllOf[i] = ResolveReferenceForSchema(document, schema.AllOf[i], rootSchemaId); } } @@ -179,23 +187,23 @@ internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument documen { for (var i = 0; i < schema.OneOf.Count; i++) { - schema.OneOf[i] = ResolveReferenceForSchema(document, schema.OneOf[i]); + schema.OneOf[i] = ResolveReferenceForSchema(document, schema.OneOf[i], rootSchemaId); } } if (schema.AdditionalProperties is not null) { - schema.AdditionalProperties = ResolveReferenceForSchema(document, schema.AdditionalProperties); + schema.AdditionalProperties = ResolveReferenceForSchema(document, schema.AdditionalProperties, rootSchemaId); } if (schema.Items is not null) { - schema.Items = ResolveReferenceForSchema(document, schema.Items); + schema.Items = ResolveReferenceForSchema(document, schema.Items, rootSchemaId); } if (schema.Not is not null) { - schema.Not = ResolveReferenceForSchema(document, schema.Not); + schema.Not = ResolveReferenceForSchema(document, schema.Not, rootSchemaId); } // Handle schemas where the references have been inlined by the JsonSchemaExporter. In this case, @@ -203,11 +211,16 @@ internal static IOpenApiSchema ResolveReferenceForSchema(OpenApiDocument documen // case we we want to replace the reference ID with the schema ID that was generated by the // `CreateSchemaReferenceId` method in the OpenApiSchemaService. if (schema.Metadata is not null && - schema.Metadata.ContainsKey(OpenApiConstants.RefId) && - schema.Metadata.TryGetValue(OpenApiConstants.SchemaId, out var schemaId) && - schemaId is string schemaIdString) + schema.Metadata.TryGetValue(OpenApiConstants.RefId, out var refId) && + refId is string refIdString) { - return document.AddOpenApiSchemaByReference(schemaIdString, schema); + if (schema.Metadata.TryGetValue(OpenApiConstants.SchemaId, out var schemaId) && + schemaId is string schemaIdString) + { + return document.AddOpenApiSchemaByReference(schemaIdString, schema); + } + var relativeSchemaId = $"#/components/schemas/{rootSchemaId}{refIdString.Replace("#", string.Empty)}"; + return new OpenApiSchemaReference(relativeSchemaId, document); } // If we're resolving schemas for a top-level schema being referenced in the `components.schema` property diff --git a/src/OpenApi/src/Transformers/DelegateOpenApiDocumentTransformer.cs b/src/OpenApi/src/Transformers/DelegateOpenApiDocumentTransformer.cs index 3a31bbe7a2bc..38c52189df91 100644 --- a/src/OpenApi/src/Transformers/DelegateOpenApiDocumentTransformer.cs +++ b/src/OpenApi/src/Transformers/DelegateOpenApiDocumentTransformer.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/DelegateOpenApiOperationTransformer.cs b/src/OpenApi/src/Transformers/DelegateOpenApiOperationTransformer.cs index cf7c7ac4ae7f..5b8f9d3267bb 100644 --- a/src/OpenApi/src/Transformers/DelegateOpenApiOperationTransformer.cs +++ b/src/OpenApi/src/Transformers/DelegateOpenApiOperationTransformer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; internal sealed class DelegateOpenApiOperationTransformer : IOpenApiOperationTransformer diff --git a/src/OpenApi/src/Transformers/DelegateOpenApiSchemaTransformer.cs b/src/OpenApi/src/Transformers/DelegateOpenApiSchemaTransformer.cs index bfe25b2297f2..3e7e7be27455 100644 --- a/src/OpenApi/src/Transformers/DelegateOpenApiSchemaTransformer.cs +++ b/src/OpenApi/src/Transformers/DelegateOpenApiSchemaTransformer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; internal sealed class DelegateOpenApiSchemaTransformer : IOpenApiSchemaTransformer diff --git a/src/OpenApi/src/Transformers/IOpenApiDocumentTransformer.cs b/src/OpenApi/src/Transformers/IOpenApiDocumentTransformer.cs index 5c92a2700e43..b0fe004c2585 100644 --- a/src/OpenApi/src/Transformers/IOpenApiDocumentTransformer.cs +++ b/src/OpenApi/src/Transformers/IOpenApiDocumentTransformer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; /// diff --git a/src/OpenApi/src/Transformers/IOpenApiOperationTransformer.cs b/src/OpenApi/src/Transformers/IOpenApiOperationTransformer.cs index 3d5227342b34..756dd3b62fd7 100644 --- a/src/OpenApi/src/Transformers/IOpenApiOperationTransformer.cs +++ b/src/OpenApi/src/Transformers/IOpenApiOperationTransformer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; /// diff --git a/src/OpenApi/src/Transformers/IOpenApiSchemaTransformer.cs b/src/OpenApi/src/Transformers/IOpenApiSchemaTransformer.cs index e971ded4e373..291369a379a3 100644 --- a/src/OpenApi/src/Transformers/IOpenApiSchemaTransformer.cs +++ b/src/OpenApi/src/Transformers/IOpenApiSchemaTransformer.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.OpenApi.Models; - namespace Microsoft.AspNetCore.OpenApi; /// diff --git a/src/OpenApi/src/Transformers/OpenApiDocumentTransformerContext.cs b/src/OpenApi/src/Transformers/OpenApiDocumentTransformerContext.cs index 4445d8591b63..ee2cf766db4b 100644 --- a/src/OpenApi/src/Transformers/OpenApiDocumentTransformerContext.cs +++ b/src/OpenApi/src/Transformers/OpenApiDocumentTransformerContext.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/OpenApiOperationTransformerContext.cs b/src/OpenApi/src/Transformers/OpenApiOperationTransformerContext.cs index 8e070cc2c92f..82a5be551a5d 100644 --- a/src/OpenApi/src/Transformers/OpenApiOperationTransformerContext.cs +++ b/src/OpenApi/src/Transformers/OpenApiOperationTransformerContext.cs @@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/OpenApiSchemaTransformerContext.cs b/src/OpenApi/src/Transformers/OpenApiSchemaTransformerContext.cs index 4d8abc8d911e..a0553342cf2c 100644 --- a/src/OpenApi/src/Transformers/OpenApiSchemaTransformerContext.cs +++ b/src/OpenApi/src/Transformers/OpenApiSchemaTransformerContext.cs @@ -4,7 +4,6 @@ using System.Text.Json.Serialization.Metadata; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/TypeBasedOpenApiDocumentTransformer.cs b/src/OpenApi/src/Transformers/TypeBasedOpenApiDocumentTransformer.cs index d950ae5c4ce0..990f500d6429 100644 --- a/src/OpenApi/src/Transformers/TypeBasedOpenApiDocumentTransformer.cs +++ b/src/OpenApi/src/Transformers/TypeBasedOpenApiDocumentTransformer.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/TypeBasedOpenApiOperationTransformer.cs b/src/OpenApi/src/Transformers/TypeBasedOpenApiOperationTransformer.cs index a8c8a11e526b..d0b32c8ac455 100644 --- a/src/OpenApi/src/Transformers/TypeBasedOpenApiOperationTransformer.cs +++ b/src/OpenApi/src/Transformers/TypeBasedOpenApiOperationTransformer.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/src/Transformers/TypeBasedOpenApiSchemaTransformer.cs b/src/OpenApi/src/Transformers/TypeBasedOpenApiSchemaTransformer.cs index 29c0c3be6e46..564aad2d758b 100644 --- a/src/OpenApi/src/Transformers/TypeBasedOpenApiSchemaTransformer.cs +++ b/src/OpenApi/src/Transformers/TypeBasedOpenApiSchemaTransformer.cs @@ -4,7 +4,6 @@ using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests.csproj b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests.csproj index 3cd2cc963d3e..61a22595ac54 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests.csproj +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests.csproj @@ -33,4 +33,8 @@ + + + + diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/SnapshotTestHelper.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/SnapshotTestHelper.cs index c2d09bdb5971..6c4febb6beec 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/SnapshotTestHelper.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/SnapshotTestHelper.cs @@ -15,7 +15,6 @@ using Microsoft.CodeAnalysis.Text; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AddOpenApiTests.CanInterceptAddOpenApi#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AddOpenApiTests.CanInterceptAddOpenApi#OpenApiXmlCommentSupport.generated.verified.cs index 6d70b459e927..0f7dc96817c8 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AddOpenApiTests.CanInterceptAddOpenApi#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AddOpenApiTests.CanInterceptAddOpenApi#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AdditionalTextsTests.CanHandleXmlForSchemasInAdditionalTexts#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AdditionalTextsTests.CanHandleXmlForSchemasInAdditionalTexts#OpenApiXmlCommentSupport.generated.verified.cs index 5853730c4ce7..10b09abc3d01 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AdditionalTextsTests.CanHandleXmlForSchemasInAdditionalTexts#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AdditionalTextsTests.CanHandleXmlForSchemasInAdditionalTexts#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/CompletenessTests.SupportsAllXmlTagsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/CompletenessTests.SupportsAllXmlTagsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs index 5012ebb84426..4e6a566bb894 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/CompletenessTests.SupportsAllXmlTagsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/CompletenessTests.SupportsAllXmlTagsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromControllers#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromControllers#OpenApiXmlCommentSupport.generated.verified.cs index dbeeaecad381..76e202554e42 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromControllers#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromControllers#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromMinimalApis#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromMinimalApis#OpenApiXmlCommentSupport.generated.verified.cs index a59c1654ffb1..dbce7f0223bf 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromMinimalApis#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromMinimalApis#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.SupportsXmlCommentsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.SupportsXmlCommentsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs index dd6515efdb21..915b30278e70 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.SupportsXmlCommentsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.SupportsXmlCommentsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs @@ -40,9 +40,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.Extensions.DependencyInjection; - using Microsoft.OpenApi.Models; - using Microsoft.OpenApi.Models.Interfaces; - using Microsoft.OpenApi.Models.References; + using Microsoft.OpenApi; [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.AspNetCore.OpenApi.SourceGenerators, Version=42.42.42.42, Culture=neutral, PublicKeyToken=adb9793829ddae60", "42.42.42.42")] file record XmlComment( diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiEndpointRouteBuilderExtensionsTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiEndpointRouteBuilderExtensionsTests.cs index c3cccd690850..1df8c8647ba5 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiEndpointRouteBuilderExtensionsTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiEndpointRouteBuilderExtensionsTests.cs @@ -10,7 +10,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.OpenApi; -using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Reader; using System.Text; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiRouteHandlerBuilderExtensionTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiRouteHandlerBuilderExtensionTests.cs index f660f6557121..7a518238d616 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiRouteHandlerBuilderExtensionTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiRouteHandlerBuilderExtensionTests.cs @@ -6,7 +6,6 @@ using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -using Microsoft.OpenApi.Models; using static Microsoft.AspNetCore.OpenApi.Tests.OpenApiOperationGeneratorTests; namespace Microsoft.AspNetCore.OpenApi.Tests; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiServiceCollectionExtensionsTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiServiceCollectionExtensionsTests.cs index 3faeb8f1de0e..5c697ef3c616 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiServiceCollectionExtensionsTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Extensions/OpenApiServiceCollectionExtensionsTests.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.Hosting.Internal; using Microsoft.Extensions.Options; using Microsoft.OpenApi; -using Microsoft.OpenApi.Models; public class OpenApiServiceCollectionExtensions { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentConcurrentRequestTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentConcurrentRequestTests.cs index 587d591b003c..07ac45f0a520 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentConcurrentRequestTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentConcurrentRequestTests.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Net; -using System.Net.Http; using Microsoft.AspNetCore.InternalTesting; namespace Microsoft.AspNetCore.OpenApi.Tests.Integration; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentIntegrationTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentIntegrationTests.cs index 797b295c25a0..95959eb526d0 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentIntegrationTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/OpenApiDocumentIntegrationTests.cs @@ -5,8 +5,6 @@ using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; using Microsoft.OpenApi; -using Microsoft.OpenApi.Extensions; -using System.Text.RegularExpressions; [UsesVerify] public sealed class OpenApiDocumentIntegrationTests(SampleAppFixture fixture) : IClassFixture diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_0/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_0/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt index d512ac884eb9..788ea787fa14 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_0/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_0/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt @@ -547,7 +547,9 @@ "parent": { "$ref": "#/components/schemas/Category" }, - "tags": { } + "tags": { + "$ref": "#/components/schemas/Category/properties/parent/properties/tags" + } } }, "ChildObject": { @@ -579,14 +581,18 @@ }, "seq2": { "type": "array", - "items": { } + "items": { + "$ref": "#/components/schemas/ContainerType/properties/seq1/items" + } } } }, "Item": { "type": "object", "properties": { - "name": { }, + "name": { + "$ref": "#/components/schemas/Root/properties/item1/properties/name" + }, "value": { "type": "integer", "format": "int32" diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_1/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_1/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt index 705e2527a13d..326da7fb0fb7 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_1/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Integration/snapshots/OpenApi3_1/OpenApiDocumentIntegrationTests.VerifyOpenApiDocument_documentName=schemas-by-ref.verified.txt @@ -547,7 +547,9 @@ "parent": { "$ref": "#/components/schemas/Category" }, - "tags": { } + "tags": { + "$ref": "#/components/schemas/Category/properties/parent/properties/tags" + } } }, "ChildObject": { @@ -579,14 +581,18 @@ }, "seq2": { "type": "array", - "items": { } + "items": { + "$ref": "#/components/schemas/ContainerType/properties/seq1/items" + } } } }, "Item": { "type": "object", "properties": { - "name": { }, + "name": { + "$ref": "#/components/schemas/Root/properties/item1/properties/name" + }, "value": { "type": "integer", "format": "int32" diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Microsoft.AspNetCore.OpenApi.Tests.csproj b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Microsoft.AspNetCore.OpenApi.Tests.csproj index c6a84055d2f3..96a5342b6407 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Microsoft.AspNetCore.OpenApi.Tests.csproj +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Microsoft.AspNetCore.OpenApi.Tests.csproj @@ -40,4 +40,8 @@ Include="$(MSBuildProjectDirectory)\Integration\snapshots\**" LinkBase="$(MSBuildThisFileDirectory)\Integration\snapshots"/> + + + + diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/CreateSchemaReferenceIdTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/CreateSchemaReferenceIdTests.cs index f249e323c719..62a184e7a951 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/CreateSchemaReferenceIdTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/CreateSchemaReferenceIdTests.cs @@ -6,8 +6,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.InternalTesting; using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public class CreateSchemaReferenceIdTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs index 16348c1d514d..51fef947ee71 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentProviderTests.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi; -using Microsoft.OpenApi.Models; using static Microsoft.AspNetCore.OpenApi.Tests.OpenApiOperationGeneratorTests; public class OpenApiDocumentProviderTests : OpenApiDocumentServiceTestBase diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Operations.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Operations.cs index 7ba82cba22ce..428c94d03fbc 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Operations.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Operations.cs @@ -5,9 +5,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.OpenApi; using Microsoft.AspNetCore.Routing; -using Microsoft.OpenApi.Models; public partial class OpenApiDocumentServiceTests { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Parameters.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Parameters.cs index ec7d9f8cc5d6..faa002fb973f 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Parameters.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Parameters.cs @@ -6,7 +6,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; -using Microsoft.OpenApi.Models; public partial class OpenApiDocumentServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.RequestBody.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.RequestBody.cs index cd4328ef1712..5601f9b1d12d 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.RequestBody.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.RequestBody.cs @@ -7,7 +7,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.InternalTesting; using Microsoft.AspNetCore.Mvc; -using Microsoft.OpenApi.Models; public partial class OpenApiDocumentServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Responses.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Responses.cs index a33f2220d33f..01f7ddff1df0 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Responses.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Responses.cs @@ -4,7 +4,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.OpenApi.Models; public partial class OpenApiDocumentServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Servers.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Servers.cs index 1bc247c95ad4..967e84380d9d 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Servers.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentService/OpenApiDocumentServiceTests.Servers.cs @@ -6,7 +6,6 @@ using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting.Internal; -using Microsoft.Extensions.Options; using Moq; public partial class OpenApiDocumentServiceTests diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentServiceTestsBase.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentServiceTestsBase.cs index aa2246385b31..7eb820764ece 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentServiceTestsBase.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiDocumentServiceTestsBase.cs @@ -21,7 +21,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Microsoft.Net.Http.Headers; -using Microsoft.OpenApi.Models; using Moq; using static Microsoft.AspNetCore.OpenApi.Tests.OpenApiOperationGeneratorTests; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiGeneratorTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiGeneratorTests.cs index bac1c7869c66..3dbf13d3995f 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiGeneratorTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiGeneratorTests.cs @@ -15,7 +15,6 @@ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Primitives; -using Microsoft.OpenApi.Models; namespace Microsoft.AspNetCore.OpenApi.Tests; diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ParameterSchemas.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ParameterSchemas.cs index d2dae5f253aa..7929b27f0eca 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ParameterSchemas.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ParameterSchemas.cs @@ -14,8 +14,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public partial class OpenApiSchemaServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.PolymorphicSchemas.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.PolymorphicSchemas.cs index ab21291453ab..efe7da599f0f 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.PolymorphicSchemas.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.PolymorphicSchemas.cs @@ -3,9 +3,6 @@ using System.Net.Http; using Microsoft.AspNetCore.Builder; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public partial class OpenApiSchemaServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.RequestBodySchemas.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.RequestBodySchemas.cs index 5eb02fb12744..bb7181154b14 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.RequestBodySchemas.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.RequestBodySchemas.cs @@ -10,9 +10,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public partial class OpenApiSchemaServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ResponseSchemas.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ResponseSchemas.cs index ac92e52bce02..cabbd30d0c08 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ResponseSchemas.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Services/OpenApiSchemaService/OpenApiSchemaService.ResponseSchemas.cs @@ -7,8 +7,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; public partial class OpenApiSchemaServiceTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/CustomSchemaTransformerTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/CustomSchemaTransformerTests.cs index aff3182bd2ea..1de9451beec0 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/CustomSchemaTransformerTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/CustomSchemaTransformerTests.cs @@ -9,9 +9,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public class CustomSchemaTransformerTests : OpenApiDocumentServiceTestBase { @@ -33,7 +30,7 @@ public async Task CustomSchemaTransformer_CanInsertSchemaIntoDocumentFromOperati operation.Responses["500"] = new OpenApiResponse { Description = "Error", - Content = new() + Content = new Dictionary() { ["application/problem+json"] = new OpenApiMediaType { @@ -100,7 +97,7 @@ public async Task GetOrCreateSchema_AddsSchemasForMultipleResponseTypes() operation.Responses["200"] = new OpenApiResponse { Description = "Success", - Content = new() + Content = new Dictionary() { ["application/json"] = new OpenApiMediaType { @@ -112,7 +109,7 @@ public async Task GetOrCreateSchema_AddsSchemasForMultipleResponseTypes() operation.Responses["400"] = new OpenApiResponse { Description = "Bad Request", - Content = new() + Content = new Dictionary() { ["application/problem+json"] = new OpenApiMediaType { @@ -158,7 +155,7 @@ public async Task GetOrCreateSchema_CanBeUsedInSchemaTransformer() context.Document.AddComponent("TriangleExample", exampleSchema); // Add a reference to the example in the shape schema - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-example-component"] = new JsonNodeExtension("#/components/schemas/TriangleExample"); schema.Description = "A shape with an example reference"; } @@ -263,7 +260,7 @@ public async Task GetOrCreateSchema_WorksWithNestedTypes() ["200"] = new OpenApiResponse { Description = "Success", - Content = new() + Content = new Dictionary() { ["application/json"] = new OpenApiMediaType { @@ -321,7 +318,7 @@ public async Task GetOrCreateSchemaAsync_AppliesOtherSchemaTransformers() { if (context.JsonTypeInfo.Type == typeof(Product)) { - schema.Required ??= []; + schema.Required ??= new HashSet(); schema.Required.Add("name"); schema.Required.Add("price"); transformerApplied = true; @@ -349,7 +346,7 @@ public async Task GetOrCreateSchemaAsync_AppliesOtherSchemaTransformers() operation.Responses["200"] = new OpenApiResponse { Description = "A product", - Content = new() + Content = new Dictionary() { ["application/json"] = new OpenApiMediaType { @@ -417,7 +414,7 @@ public async Task GetOrCreateSchemaAsync_HandlesConcurrentRequests() operation.Responses["200"] = new OpenApiResponse { Description = "Concurrent schema generation test", - Content = new() + Content = new Dictionary() { ["application/json"] = new OpenApiMediaType { @@ -470,7 +467,7 @@ public async Task GetOrCreateSchemaAsync_RespectsJsonSerializerOptions() operation.Responses["200"] = new OpenApiResponse { Description = "User with custom JSON options", - Content = new() + Content = new Dictionary() { ["application/json"] = new OpenApiMediaType { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/DocumentTransformerTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/DocumentTransformerTests.cs index 27741a0afc4d..c5f599e040d4 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/DocumentTransformerTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/DocumentTransformerTests.cs @@ -5,7 +5,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; public class DocumentTransformerTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/Implementations/OpenApiSchemaReferenceTransformerTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/Implementations/OpenApiSchemaReferenceTransformerTests.cs index 603007c0a083..b3c5ec49c7e8 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/Implementations/OpenApiSchemaReferenceTransformerTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/Implementations/OpenApiSchemaReferenceTransformerTests.cs @@ -8,10 +8,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; -using Microsoft.OpenApi.Writers; public class OpenApiSchemaReferenceTransformerTests : OpenApiDocumentServiceTestBase { @@ -286,7 +282,7 @@ public async Task TypeModifiedWithSchemaTransformerMapsToDifferentReferenceId() { if (context.JsonTypeInfo.Type == typeof(Todo) && context.ParameterDescription is not null) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension(context.ParameterDescription.Name); } return Task.CompletedTask; @@ -712,18 +708,15 @@ await VerifyOpenApiDocument(builder, document => // Assert items are arrays of strings Assert.Equal(JsonSchemaType.Array, seq1Schema.Items.Type); - // Todo: See https://github.com/microsoft/OpenAPI.NET/issues/2062 - // Assert.Equal(JsonSchemaType.Array, seq2Schema.Items.Type); + Assert.Equal(JsonSchemaType.Array, seq2Schema.Items.Type); // Since both Seq1 and Seq2 are the same type (List>), // they should reference the same schema structure - // Todo: See https://github.com/microsoft/OpenAPI.NET/issues/2062 - // Assert.Equal(seq1Schema.Items.Type, seq2Schema.Items.Type); + Assert.Equal(seq1Schema.Items.Type, seq2Schema.Items.Type); // Verify the inner arrays contain strings Assert.Equal(JsonSchemaType.String, seq1Schema.Items.Items.Type); - // Todo: See https://github.com/microsoft/OpenAPI.NET/issues/2062 - // Assert.Equal(JsonSchemaType.String, seq2Schema.Items.Items.Type); + Assert.Equal(JsonSchemaType.String, seq2Schema.Items.Items.Type); Assert.Equal(["ContainerType"], document.Components.Schemas.Keys); }); diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OpenApiOptionsTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OpenApiOptionsTests.cs index 283d39c3c049..5a55dbfd35d5 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OpenApiOptionsTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OpenApiOptionsTests.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; public class OpenApiOptionsTests { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OperationTransformerTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OperationTransformerTests.cs index f172ac364f55..a67d4882dffc 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OperationTransformerTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/OperationTransformerTests.cs @@ -5,7 +5,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Models; public class OperationTransformerTests : OpenApiDocumentServiceTestBase { diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/SchemaTransformerTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/SchemaTransformerTests.cs index bed6a02e50f2..4c69ebf1e007 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/SchemaTransformerTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/SchemaTransformerTests.cs @@ -8,9 +8,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; -using Microsoft.OpenApi.Models.References; public class SchemaTransformerTests : OpenApiDocumentServiceTestBase { @@ -155,14 +152,14 @@ public async Task SchemaTransformer_RunsInRegisteredOrder() var options = new OpenApiOptions(); options.AddSchemaTransformer((schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension("1"); schema.Format = "1"; return Task.CompletedTask; }); options.AddSchemaTransformer((schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); Assert.Equal("1", ((JsonNodeExtension)schema.Extensions["x-my-extension"]).Node.GetValue()); schema.Extensions["x-my-extension"] = new JsonNodeExtension("2"); return Task.CompletedTask; @@ -189,7 +186,7 @@ public async Task SchemaTransformer_OnTypeModifiesBothRequestAndResponse() { if (context.JsonTypeInfo.Type == typeof(Todo)) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension("1"); } return Task.CompletedTask; @@ -499,7 +496,7 @@ public async Task SchemaTransformer_CanModifyPolymorphicChildSchemas() { if (context.JsonTypeInfo.Type == typeof(Triangle)) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension("this-is-a-triangle"); } return Task.CompletedTask; @@ -568,7 +565,7 @@ public async Task SchemaTransformer_CanModifyListOfPolymorphicTypes() var options = new OpenApiOptions(); options.AddSchemaTransformer((schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); if (context.JsonTypeInfo.Type == typeof(Triangle)) { schema.Extensions["x-my-extension"] = new JsonNodeExtension("this-is-a-triangle"); @@ -610,7 +607,7 @@ public async Task SchemaTransformer_CanModifyPolymorphicTypesInProperties() var options = new OpenApiOptions(); options.AddSchemaTransformer((schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); if (context.JsonTypeInfo.Type == typeof(Triangle)) { schema.Extensions["x-my-extension"] = new JsonNodeExtension("this-is-a-triangle"); @@ -652,7 +649,7 @@ public async Task SchemaTransformer_CanModifyDeeplyNestedPolymorphicTypesInPrope var options = new OpenApiOptions(); options.AddSchemaTransformer((schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); if (context.JsonTypeInfo.Type == typeof(Triangle)) { schema.Extensions["x-my-extension"] = new JsonNodeExtension("this-is-a-triangle"); @@ -741,7 +738,7 @@ public async Task SchemaTransformers_CanImplementNotSchemaIndependently() }); UseNotSchemaTransformer(options, (schema, context, cancellationToken) => { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["modified-by-not-schema-transformer"] = new JsonNodeExtension(true); return Task.CompletedTask; }); @@ -957,7 +954,7 @@ public Task TransformAsync(OpenApiSchema schema, OpenApiSchemaTransformerContext { if (context.JsonTypeInfo.Type == typeof(Todo)) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension("1"); } return Task.CompletedTask; @@ -1006,7 +1003,7 @@ private class ActivatedTransformerWithDependency(Dependency dependency) : IOpenA public Task TransformAsync(OpenApiSchema schema, OpenApiSchemaTransformerContext context, CancellationToken cancellationToken) { dependency.TestMethod(); - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension(Dependency.InstantiationCount.ToString(CultureInfo.InvariantCulture)); return Task.CompletedTask; } diff --git a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/TypeBasedTransformerLifetimeTests.cs b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/TypeBasedTransformerLifetimeTests.cs index 8f343a95d51f..3716ddb04dd9 100644 --- a/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/TypeBasedTransformerLifetimeTests.cs +++ b/src/OpenApi/test/Microsoft.AspNetCore.OpenApi.Tests/Transformers/TypeBasedTransformerLifetimeTests.cs @@ -4,8 +4,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.OpenApi; using Microsoft.Extensions.DependencyInjection; -using Microsoft.OpenApi.Extensions; -using Microsoft.OpenApi.Models; public class TypeBasedTransformerLifetimeTests : OpenApiDocumentServiceTestBase { @@ -348,7 +346,7 @@ public Task TransformAsync(OpenApiSchema schema, OpenApiSchemaTransformerContext { if (context.JsonTypeInfo.Type == typeof(Todo)) { - schema.Extensions ??= []; + schema.Extensions ??= new Dictionary(); schema.Extensions["x-my-extension"] = new JsonNodeExtension("1"); } return Task.CompletedTask; diff --git a/src/Tools/GetDocumentInsider/tests/GetDocumentTests.cs b/src/Tools/GetDocumentInsider/tests/GetDocumentTests.cs index 29a2cddefe1f..712ef8bc1f8c 100644 --- a/src/Tools/GetDocumentInsider/tests/GetDocumentTests.cs +++ b/src/Tools/GetDocumentInsider/tests/GetDocumentTests.cs @@ -7,7 +7,6 @@ using System.Reflection; using System.Runtime.Versioning; using Microsoft.OpenApi; -using Microsoft.OpenApi.Models; namespace Microsoft.Extensions.ApiDescription.Tool.Tests;