Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge openapi branch into PR 1185: Support NRT and MSV in required and nullable #1229

Merged

Conversation

bkoelman
Copy link
Member

@bkoelman bkoelman commented Dec 15, 2022

Merge branch openapi at 0e745913fb23fe05eed0f28ac4e8e68d77e8dfaf into branch openapi-required-and-nullable-properties.

Resolved a few trivial merge conflicts not worth mentioning. However, various tests fail randomly due to increased parallelism when running tests.

Stack traces for failing tests
System.InvalidOperationException
Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.
   at System.Collections.Generic.Dictionary`2.FindValue(TKey key)
   at System.Reflection.NullabilityInfoContext.GetNullableContext(MemberInfo memberInfo)
   at System.Reflection.NullabilityInfoContext.GetNullabilityInfo(MemberInfo memberInfo, Type type, IList`1 customAttributes, Int32 index)
   at System.Reflection.NullabilityInfoContext.Create(PropertyInfo propertyInfo)
   at JsonApiDotNetCore.OpenApi.ResourceFieldAttributeExtensions.IsNullable(ResourceFieldAttribute source) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\ResourceFieldAttributeExtensions.cs:line 27
   at JsonApiDotNetCore.OpenApi.JsonApiObjects.NonPrimaryDocumentTypeFactory.Get(RelationshipAttribute relationship, DocumentOpenTypes types) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiObjects\NonPrimaryDocumentTypeFactory.cs:line 49
   at JsonApiDotNetCore.OpenApi.JsonApiObjects.NonPrimaryDocumentTypeFactory.GetForSecondaryResponse(RelationshipAttribute relationship) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiObjects\NonPrimaryDocumentTypeFactory.cs:line 28
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
   at JsonApiDotNetCore.OpenApi.JsonApiMetadata.JsonApiEndpointMetadataProvider.GetSecondaryResponseMetadata(IEnumerable`1 relationships) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiMetadata\JsonApiEndpointMetadataProvider.cs:line 134
   at JsonApiDotNetCore.OpenApi.JsonApiMetadata.JsonApiEndpointMetadataProvider.GetResponseMetadata(JsonApiEndpoint endpoint, ResourceType primaryResourceType) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiMetadata\JsonApiEndpointMetadataProvider.cs:line 111
   at JsonApiDotNetCore.OpenApi.JsonApiMetadata.JsonApiEndpointMetadataProvider.Get(MethodInfo controllerAction) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiMetadata\JsonApiEndpointMetadataProvider.cs:line 45
   at JsonApiDotNetCore.OpenApi.JsonApiActionDescriptorCollectionProvider.GetActionDescriptors() in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiActionDescriptorCollectionProvider.cs:line 41
   at JsonApiDotNetCore.OpenApi.JsonApiActionDescriptorCollectionProvider.get_ActionDescriptors() in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\JsonApiActionDescriptorCollectionProvider.cs:line 23
   at Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.get_ApiDescriptionGroups()
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwaggerDocumentWithoutFilters(String documentName, String host, String basePath)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.<>c__DisplayClass3_0.<GetSwagger>b__0(String _) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 33
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.GetSwagger(String documentName, String host, String basePath) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 31
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at JsonApiDotNetCore.Middleware.JsonApiMiddleware.InvokeAsync(HttpContext httpContext, IControllerResourceMapping controllerResourceMapping, IJsonApiOptions options, IJsonApiRequest request, ILogger`1 logger) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore\Middleware\JsonApiMiddleware.cs:line 82
   at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at OpenApiTests.OpenApiTestContext`2.GetAsync(String requestUrl) in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 56
   at OpenApiTests.OpenApiTestContext`2.CreateSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 30
   at OpenApiTests.OpenApiTestContext`2.GetSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 25
   at OpenApiTests.LegacyOpenApiIntegration.LegacyOpenApiIntegrationTests.Retrieved_swagger_document_matches_expected_document() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\LegacyOpenApiIntegration\LegacyOpenApiIntegrationTests.cs:line 24
   at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 264
--- End of stack trace from previous location ---
   at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in /_/src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs:line 48
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in /_/src/xunit.core/Sdk/ExceptionAggregator.cs:line 90
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException
Failed to generate Operation for action - OpenApiTests.SchemaProperties.CowsController.GetAsync (OpenApiTests). See inner exception
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwaggerDocumentWithoutFilters(String documentName, String host, String basePath)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.<>c__DisplayClass3_0.<GetSwagger>b__0(String _) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 33
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.GetSwagger(String documentName, String host, String basePath) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 31
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at JsonApiDotNetCore.Middleware.JsonApiMiddleware.InvokeAsync(HttpContext httpContext, IControllerResourceMapping controllerResourceMapping, IJsonApiOptions options, IJsonApiRequest request, ILogger`1 logger) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore\Middleware\JsonApiMiddleware.cs:line 82
   at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at OpenApiTests.OpenApiTestContext`2.GetAsync(String requestUrl) in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 56
   at OpenApiTests.OpenApiTestContext`2.CreateSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 30
   at OpenApiTests.OpenApiTestContext`2.GetSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 25
   at OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.ModelStateValidationDisabledTests.Resource_when_ModelStateValidation_is_disabled_produces_expected_required_property_in_schema() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\SchemaProperties\NullableReferenceTypesEnabled\ModelStateValidationDisabledTests.cs:line 26
   at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 264
--- End of stack trace from previous location ---
   at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in /_/src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs:line 48
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in /_/src/xunit.core/Sdk/ExceptionAggregator.cs:line 90

Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException
Failed to generate schema for type - JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents.ResourceCollectionResponseDocument`1[OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.Cow]. See inner exception
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository, PropertyInfo propertyInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateResponseMediaType(ModelMetadata modelMetadata, SchemaRepository schemaRespository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.<>c__DisplayClass25_0.<GenerateResponse>b__2(String contentType)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponse(ApiDescription apiDescription, SchemaRepository schemaRepository, String statusCode, ApiResponseType apiResponseType)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponses(ApiDescription apiDescription, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)

System.ArgumentException
An item with the same key has already been added. Key: OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.Cow
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Reflection.NullabilityInfoContext.GetNullableContext(MemberInfo memberInfo)
   at System.Reflection.NullabilityInfoContext.GetNullabilityInfo(MemberInfo memberInfo, Type type, IList`1 customAttributes, Int32 index)
   at System.Reflection.NullabilityInfoContext.Create(PropertyInfo propertyInfo)
   at JsonApiDotNetCore.OpenApi.ResourceFieldAttributeExtensions.IsNullable(ResourceFieldAttribute source) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\ResourceFieldAttributeExtensions.cs:line 27
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceFieldObjectSchemaBuilder.SetMembersOfAttributesObject(OpenApiSchema fullSchemaForAttributesObject) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceFieldObjectSchemaBuilder.cs:line 81
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceObjectSchemaGenerator.SetResourceAttributes(OpenApiSchema fullSchemaForResourceObject, ResourceFieldObjectSchemaBuilder builder) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceObjectSchemaGenerator.cs:line 98
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceObjectSchemaGenerator.GenerateSchema(Type resourceObjectType) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceObjectSchemaGenerator.cs:line 50
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.JsonApiSchemaGenerator.GenerateJsonApiDocumentSchema(Type documentType) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\JsonApiSchemaGenerator.cs:line 90
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.JsonApiSchemaGenerator.GenerateSchema(Type modelType, SchemaRepository schemaRepository, MemberInfo memberInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\JsonApiSchemaGenerator.cs:line 68
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository, PropertyInfo propertyInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo)
Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException
Failed to generate Operation for action - OpenApiTests.SchemaProperties.CowsController.GetAsync (OpenApiTests). See inner exception
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwaggerDocumentWithoutFilters(String documentName, String host, String basePath)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.<>c__DisplayClass3_0.<GetSwagger>b__0(String _) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 33
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.CachingSwaggerGenerator.GetSwagger(String documentName, String host, String basePath) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\CachingSwaggerGenerator.cs:line 31
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at JsonApiDotNetCore.Middleware.JsonApiMiddleware.InvokeAsync(HttpContext httpContext, IControllerResourceMapping controllerResourceMapping, IJsonApiOptions options, IJsonApiRequest request, ILogger`1 logger) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore\Middleware\JsonApiMiddleware.cs:line 82
   at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.AspNetCore.Mvc.Testing.Handlers.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at OpenApiTests.OpenApiTestContext`2.GetAsync(String requestUrl) in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 56
   at OpenApiTests.OpenApiTestContext`2.CreateSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 30
   at OpenApiTests.OpenApiTestContext`2.GetSwaggerDocumentAsync() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\OpenApiTestContext.cs:line 25
   at OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.NullabilityTests.Resource_produces_expected_nullable_properties_in_schema() in D:\Bart\Source\Repos\JsonApiDotNetCore\test\OpenApiTests\SchemaProperties\NullableReferenceTypesEnabled\NullabilityTests.cs:line 26
   at Xunit.Sdk.TestInvoker`1.<>c__DisplayClass48_0.<<InvokeTestMethodAsync>b__1>d.MoveNext() in /_/src/xunit.execution/Sdk/Frameworks/Runners/TestInvoker.cs:line 264
--- End of stack trace from previous location ---
   at Xunit.Sdk.ExecutionTimer.AggregateAsync(Func`1 asyncAction) in /_/src/xunit.execution/Sdk/Frameworks/ExecutionTimer.cs:line 48
   at Xunit.Sdk.ExceptionAggregator.RunAsync(Func`1 code) in /_/src/xunit.core/Sdk/ExceptionAggregator.cs:line 90

Swashbuckle.AspNetCore.SwaggerGen.SwaggerGeneratorException
Failed to generate schema for type - JsonApiDotNetCore.OpenApi.JsonApiObjects.Documents.ResourceCollectionResponseDocument`1[OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.Cow]. See inner exception
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository, PropertyInfo propertyInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.CreateResponseMediaType(ModelMetadata modelMetadata, SchemaRepository schemaRespository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.<>c__DisplayClass25_0.<GenerateResponse>b__2(String contentType)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponse(ApiDescription apiDescription, SchemaRepository schemaRepository, String statusCode, ApiResponseType apiResponseType)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateResponses(ApiDescription apiDescription, SchemaRepository schemaRepository)
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)

System.ArgumentException
An item with the same key has already been added. Key: OpenApiTests.SchemaProperties.NullableReferenceTypesEnabled.Cow
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Reflection.NullabilityInfoContext.GetNullableContext(MemberInfo memberInfo)
   at System.Reflection.NullabilityInfoContext.GetNullabilityInfo(MemberInfo memberInfo, Type type, IList`1 customAttributes, Int32 index)
   at System.Reflection.NullabilityInfoContext.Create(PropertyInfo propertyInfo)
   at JsonApiDotNetCore.OpenApi.ResourceFieldAttributeExtensions.IsNullable(ResourceFieldAttribute source) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\ResourceFieldAttributeExtensions.cs:line 27
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceFieldObjectSchemaBuilder.SetMembersOfAttributesObject(OpenApiSchema fullSchemaForAttributesObject) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceFieldObjectSchemaBuilder.cs:line 81
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceObjectSchemaGenerator.SetResourceAttributes(OpenApiSchema fullSchemaForResourceObject, ResourceFieldObjectSchemaBuilder builder) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceObjectSchemaGenerator.cs:line 98
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.ResourceObjectSchemaGenerator.GenerateSchema(Type resourceObjectType) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\ResourceObjectSchemaGenerator.cs:line 50
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.JsonApiSchemaGenerator.GenerateJsonApiDocumentSchema(Type documentType) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\JsonApiSchemaGenerator.cs:line 90
   at JsonApiDotNetCore.OpenApi.SwaggerComponents.JsonApiSchemaGenerator.GenerateSchema(Type modelType, SchemaRepository schemaRepository, MemberInfo memberInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo) in D:\Bart\Source\Repos\JsonApiDotNetCore\src\JsonApiDotNetCore.OpenApi\SwaggerComponents\JsonApiSchemaGenerator.cs:line 68
   at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateSchema(Type type, SchemaRepository schemaRepository, PropertyInfo propertyInfo, ParameterInfo parameterInfo, ApiParameterRouteInfo routeInfo)

They all trace back to NullabilityInfoContext.Create, which updates an internal cache that isn't safe for concurrent operations.

bkoelman and others added 30 commits September 9, 2022 14:36
…e the fully qualified type names of the conflicting controllers
…e members to Hint level, because they tend to cause backwards-compatibility issues in publicly exposed signatures
…o (git handles this automatically if omitted)
…inux

Update to latest Resharper version (and related formatting improvements)
Multi-target Annotations against .NET Standard 1.0
…rror

Improve error message when duplicate controllers found
…openapi

Merge master (v5.0.3) into openapi branch
…'t need to edit appsettings.json when debugging
bkoelman and others added 18 commits November 12, 2022 12:32
…ior.ClientSetNull to DeleteBehavior.SetNull

This improves speed and reduces the number of errors logged by the PostgreSQL server when running tests, because we no longer need the "truncate table cascade" fallback in DbContextExtensions.
Update to latest version of regitlint
Merge master (v5.1.0) into openapi branch
@bkoelman
Copy link
Member Author

@maurei Can you take a closer look into what's causing these failures?

@maurei
Copy link
Member

maurei commented Dec 15, 2022

I was already in the proces of looking into this (next to applying review feedback), after earlier I locally merged in the latest from openapi into this feature branch.

@bkoelman
Copy link
Member Author

Let's try to fix this first and get it merged, then continue the work on #1185. I've created #1230 so we can see cibuild output.

@maurei maurei self-requested a review December 15, 2022 14:41
@bkoelman
Copy link
Member Author

bkoelman commented Dec 15, 2022

@maurei I've pushed a commit to fix this. Once #1230 is green, I believe this PR is ready to be merged.

@bkoelman bkoelman marked this pull request as ready for review December 15, 2022 16:39
@maurei
Copy link
Member

maurei commented Dec 15, 2022

Thats how I fixed it locally this morning, wasn't difficult. Not sure why you want a separate PR for this? Go ahead and merge when it's ready, I'll do a rebase locally

@bkoelman
Copy link
Member Author

Because it's required for a successful merge. Note we cannot rebase in #1185 anymore, since we're in the middle of a code review. So merging in this PR enables me to track future commits to #1185 aside from these changes (less noise).

@bkoelman bkoelman merged commit 526d03f into openapi-required-and-nullable-properties Dec 15, 2022
@bkoelman bkoelman deleted the merge-openapi-into-1185 branch December 15, 2022 17:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants