From 10939b043cf4f318a60ce894aa7a1b3e9206b5b5 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Tue, 12 Oct 2021 18:12:56 +0200 Subject: [PATCH 01/32] Renamed TryXXX resource graph lookup methods to FindXXX, throwing on incoming null (not empty). Made non-public TryXXX methods tolerant against incoming nulls. --- .../Configuration/IResourceGraph.cs | 4 ++-- .../Configuration/ResourceGraph.cs | 8 +++---- .../Configuration/ResourceType.cs | 16 ++++++------- .../ServiceCollectionExtensions.cs | 7 +++--- .../Configuration/TypeLocator.cs | 4 ++-- .../Middleware/IControllerResourceMapping.cs | 4 ++-- .../Middleware/JsonApiMiddleware.cs | 4 ++-- .../Middleware/JsonApiRoutingConvention.cs | 16 ++++++------- .../Parsing/ResourceFieldChainResolver.cs | 4 ++-- .../Internal/Parsing/SparseFieldTypeParser.cs | 2 +- .../QueryableBuilding/QueryClauseBuilder.cs | 23 +++++++++++-------- .../QueryableBuilding/WhereClauseBuilder.cs | 4 ++-- .../JsonConverters/ResourceObjectConverter.cs | 4 ++-- .../Adapters/AtomicReferenceAdapter.cs | 2 +- .../Adapters/ResourceIdentityAdapter.cs | 2 +- .../Request/Adapters/ResourceObjectAdapter.cs | 4 ++-- .../Serialization/Response/LinkBuilder.cs | 6 ++--- .../ServiceDiscoveryFacadeTests.cs | 6 ++--- .../UnitTests/Links/LinkInclusionTests.cs | 4 ++-- .../Middleware/JsonApiMiddlewareTests.cs | 2 +- .../Middleware/JsonApiRequestTests.cs | 2 +- 21 files changed, 64 insertions(+), 64 deletions(-) diff --git a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs index 1c2c058150..eee6e08d5a 100644 --- a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs @@ -38,12 +38,12 @@ ResourceType GetResourceType() /// /// Attempts to get the metadata for the resource that is publicly exposed by the specified name. Returns null when not found. /// - ResourceType TryGetResourceType(string publicName); + ResourceType FindResourceType(string publicName); /// /// Attempts to get metadata for the resource of the specified CLR type. Returns null when not found. /// - ResourceType TryGetResourceType(Type resourceClrType); + ResourceType FindResourceType(Type resourceClrType); /// /// Gets the fields (attributes and relationships) for that are targeted by the selector. diff --git a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs index 90df89c576..1bcb2c0fc9 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs @@ -41,7 +41,7 @@ public IReadOnlySet GetResourceTypes() /// public ResourceType GetResourceType(string publicName) { - ResourceType resourceType = TryGetResourceType(publicName); + ResourceType resourceType = FindResourceType(publicName); if (resourceType == null) { @@ -52,7 +52,7 @@ public ResourceType GetResourceType(string publicName) } /// - public ResourceType TryGetResourceType(string publicName) + public ResourceType FindResourceType(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); @@ -62,7 +62,7 @@ public ResourceType TryGetResourceType(string publicName) /// public ResourceType GetResourceType(Type resourceClrType) { - ResourceType resourceType = TryGetResourceType(resourceClrType); + ResourceType resourceType = FindResourceType(resourceClrType); if (resourceType == null) { @@ -73,7 +73,7 @@ public ResourceType GetResourceType(Type resourceClrType) } /// - public ResourceType TryGetResourceType(Type resourceClrType) + public ResourceType FindResourceType(Type resourceClrType) { ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); diff --git a/src/JsonApiDotNetCore/Configuration/ResourceType.cs b/src/JsonApiDotNetCore/Configuration/ResourceType.cs index 75dddfbcc4..d4d92290f7 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceType.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceType.cs @@ -107,11 +107,11 @@ public ResourceType(string publicName, Type clrType, Type identityClrType, IRead public AttrAttribute GetAttributeByPublicName(string publicName) { - AttrAttribute attribute = TryGetAttributeByPublicName(publicName); + AttrAttribute attribute = FindAttributeByPublicName(publicName); return attribute ?? throw new InvalidOperationException($"Attribute '{publicName}' does not exist on resource type '{PublicName}'."); } - public AttrAttribute TryGetAttributeByPublicName(string publicName) + public AttrAttribute FindAttributeByPublicName(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); @@ -120,13 +120,13 @@ public AttrAttribute TryGetAttributeByPublicName(string publicName) public AttrAttribute GetAttributeByPropertyName(string propertyName) { - AttrAttribute attribute = TryGetAttributeByPropertyName(propertyName); + AttrAttribute attribute = FindAttributeByPropertyName(propertyName); return attribute ?? throw new InvalidOperationException($"Attribute for property '{propertyName}' does not exist on resource type '{ClrType.Name}'."); } - public AttrAttribute TryGetAttributeByPropertyName(string propertyName) + public AttrAttribute FindAttributeByPropertyName(string propertyName) { ArgumentGuard.NotNull(propertyName, nameof(propertyName)); @@ -135,11 +135,11 @@ public AttrAttribute TryGetAttributeByPropertyName(string propertyName) public RelationshipAttribute GetRelationshipByPublicName(string publicName) { - RelationshipAttribute relationship = TryGetRelationshipByPublicName(publicName); + RelationshipAttribute relationship = FindRelationshipByPublicName(publicName); return relationship ?? throw new InvalidOperationException($"Relationship '{publicName}' does not exist on resource type '{PublicName}'."); } - public RelationshipAttribute TryGetRelationshipByPublicName(string publicName) + public RelationshipAttribute FindRelationshipByPublicName(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); @@ -150,13 +150,13 @@ public RelationshipAttribute TryGetRelationshipByPublicName(string publicName) public RelationshipAttribute GetRelationshipByPropertyName(string propertyName) { - RelationshipAttribute relationship = TryGetRelationshipByPropertyName(propertyName); + RelationshipAttribute relationship = FindRelationshipByPropertyName(propertyName); return relationship ?? throw new InvalidOperationException($"Relationship for property '{propertyName}' does not exist on resource type '{ClrType.Name}'."); } - public RelationshipAttribute TryGetRelationshipByPropertyName(string propertyName) + public RelationshipAttribute FindRelationshipByPropertyName(string propertyName) { ArgumentGuard.NotNull(propertyName, nameof(propertyName)); diff --git a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs index f217852bc8..5fdbfb0e2d 100644 --- a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs +++ b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs @@ -120,12 +120,11 @@ private static void RegisterForConstructedType(IServiceCollection services, Type private static ResourceDescriptor TryGetResourceTypeFromServiceImplementation(Type serviceType) { - foreach (Type @interface in serviceType.GetInterfaces()) + if (serviceType != null) { - Type firstGenericArgument = @interface.IsGenericType ? @interface.GenericTypeArguments.First() : null; - - if (firstGenericArgument != null) + foreach (Type @interface in serviceType.GetInterfaces()) { + Type firstGenericArgument = @interface.IsGenericType ? @interface.GenericTypeArguments.First() : null; ResourceDescriptor resourceDescriptor = TypeLocator.TryGetResourceDescriptor(firstGenericArgument); if (resourceDescriptor != null) diff --git a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs index 7f0e85371e..47c54bf9a3 100644 --- a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs +++ b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs @@ -16,7 +16,7 @@ internal sealed class TypeLocator /// public Type TryGetIdType(Type resourceClrType) { - Type identifiableInterface = resourceClrType.GetInterfaces().FirstOrDefault(@interface => + Type identifiableInterface = resourceClrType?.GetInterfaces().FirstOrDefault(@interface => @interface.IsGenericType && @interface.GetGenericTypeDefinition() == typeof(IIdentifiable<>)); return identifiableInterface?.GetGenericArguments()[0]; @@ -27,7 +27,7 @@ public Type TryGetIdType(Type resourceClrType) /// public ResourceDescriptor TryGetResourceDescriptor(Type type) { - if (type.IsOrImplementsInterface(typeof(IIdentifiable))) + if (type != null && type.IsOrImplementsInterface(typeof(IIdentifiable))) { Type idType = TryGetIdType(type); diff --git a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs index 2ff155d324..805a81aa17 100644 --- a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs +++ b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs @@ -11,11 +11,11 @@ public interface IControllerResourceMapping /// /// Gets the associated resource type for the provided controller type. /// - ResourceType TryGetResourceTypeForController(Type controllerType); + ResourceType GetResourceTypeForController(Type controllerType); /// /// Gets the associated controller name for the provided resource type. /// - string TryGetControllerNameForResourceType(ResourceType resourceType); + string GetControllerNameForResourceType(ResourceType resourceType); } } diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs index a41e172d18..ca65cdd7f2 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs @@ -124,7 +124,7 @@ private static ResourceType TryCreatePrimaryResourceType(HttpContext httpContext var controllerActionDescriptor = endpoint?.Metadata.GetMetadata(); return controllerActionDescriptor != null - ? controllerResourceMapping.TryGetResourceTypeForController(controllerActionDescriptor.ControllerTypeInfo) + ? controllerResourceMapping.GetResourceTypeForController(controllerActionDescriptor.ControllerTypeInfo) : null; } @@ -241,7 +241,7 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr // @formatter:keep_existing_linebreaks restore // @formatter:wrap_chained_method_calls restore - RelationshipAttribute requestRelationship = primaryResourceType.TryGetRelationshipByPublicName(relationshipName); + RelationshipAttribute requestRelationship = primaryResourceType.FindRelationshipByPublicName(relationshipName); if (requestRelationship != null) { diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs index fee1edad0f..3b79c8811e 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs @@ -47,19 +47,17 @@ public JsonApiRoutingConvention(IJsonApiOptions options, IResourceGraph resource } /// - public ResourceType TryGetResourceTypeForController(Type controllerType) + public ResourceType GetResourceTypeForController(Type controllerType) { - ArgumentGuard.NotNull(controllerType, nameof(controllerType)); - - return _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType resourceType) ? resourceType : null; + return controllerType != null && _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType resourceType) ? resourceType : null; } /// - public string TryGetControllerNameForResourceType(ResourceType resourceType) + public string GetControllerNameForResourceType(ResourceType resourceType) { - ArgumentGuard.NotNull(resourceType, nameof(resourceType)); - - return _controllerPerResourceTypeMap.TryGetValue(resourceType, out ControllerModel controllerModel) ? controllerModel.ControllerName : null; + return resourceType != null && _controllerPerResourceTypeMap.TryGetValue(resourceType, out ControllerModel controllerModel) + ? controllerModel.ControllerName + : null; } /// @@ -77,7 +75,7 @@ public void Apply(ApplicationModel application) if (resourceClrType != null) { - ResourceType resourceType = _resourceGraph.TryGetResourceType(resourceClrType); + ResourceType resourceType = _resourceGraph.FindResourceType(resourceClrType); if (resourceType != null) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs index 6b0900ef96..0d026c7d3d 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs @@ -188,7 +188,7 @@ public IImmutableList ResolveToOneChainEndingInAttribute private RelationshipAttribute GetRelationship(string publicName, ResourceType resourceType, string path) { - RelationshipAttribute relationship = resourceType.TryGetRelationshipByPublicName(publicName); + RelationshipAttribute relationship = resourceType.FindRelationshipByPublicName(publicName); if (relationship == null) { @@ -230,7 +230,7 @@ private RelationshipAttribute GetToOneRelationship(string publicName, ResourceTy private AttrAttribute GetAttribute(string publicName, ResourceType resourceType, string path) { - AttrAttribute attribute = resourceType.TryGetAttributeByPublicName(publicName); + AttrAttribute attribute = resourceType.FindAttributeByPublicName(publicName); if (attribute == null) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs index d071514a1a..bf867c2884 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs @@ -57,7 +57,7 @@ private ResourceType ParseResourceName() private ResourceType GetResourceType(string publicName) { - ResourceType resourceType = _resourceGraph.TryGetResourceType(publicName); + ResourceType resourceType = _resourceGraph.FindResourceType(publicName); if (resourceType == null) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs index 1defb30729..ba2df82b58 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs @@ -37,21 +37,24 @@ public override Expression VisitCount(CountExpression expression, TArgument argu private static Expression TryGetCollectionCount(Expression collectionExpression) { - var properties = new HashSet(collectionExpression.Type.GetProperties()); - - if (collectionExpression.Type.IsInterface) + if (collectionExpression != null) { - foreach (PropertyInfo item in collectionExpression.Type.GetInterfaces().SelectMany(@interface => @interface.GetProperties())) + var properties = new HashSet(collectionExpression.Type.GetProperties()); + + if (collectionExpression.Type.IsInterface) { - properties.Add(item); + foreach (PropertyInfo item in collectionExpression.Type.GetInterfaces().SelectMany(@interface => @interface.GetProperties())) + { + properties.Add(item); + } } - } - foreach (PropertyInfo property in properties) - { - if (property.Name is "Count" or "Length") + foreach (PropertyInfo property in properties) { - return Expression.Property(collectionExpression, property); + if (property.Name is "Count" or "Length") + { + return Expression.Property(collectionExpression, property); + } } } diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs index 8009328405..41778636a9 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs @@ -177,7 +177,7 @@ public override Expression VisitNot(NotExpression expression, Type argument) public override Expression VisitComparison(ComparisonExpression expression, Type argument) { - Type commonType = TryResolveCommonType(expression.Left, expression.Right); + Type commonType = ResolveCommonType(expression.Left, expression.Right); Expression left = WrapInConvert(Visit(expression.Left, commonType), commonType); Expression right = WrapInConvert(Visit(expression.Right, commonType), commonType); @@ -209,7 +209,7 @@ public override Expression VisitComparison(ComparisonExpression expression, Type throw new InvalidOperationException($"Unknown comparison operator '{expression.Operator}'."); } - private Type TryResolveCommonType(QueryExpression left, QueryExpression right) + private Type ResolveCommonType(QueryExpression left, QueryExpression right) { Type leftType = ResolveFixedType(left); diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs index a95cc59f77..bd6a5ea9e5 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs @@ -51,7 +51,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver Type = TryPeekType(ref reader) }; - ResourceType resourceType = resourceObject.Type != null ? _resourceGraph.TryGetResourceType(resourceObject.Type) : null; + ResourceType resourceType = resourceObject.Type != null ? _resourceGraph.FindResourceType(resourceObject.Type) : null; while (reader.Read()) { @@ -176,7 +176,7 @@ private static IDictionary ReadAttributes(ref Utf8JsonReader rea string attributeName = reader.GetString(); reader.Read(); - AttrAttribute attribute = resourceType.TryGetAttributeByPublicName(attributeName); + AttrAttribute attribute = resourceType.FindAttributeByPublicName(attributeName); PropertyInfo property = attribute?.Property; if (property != null) diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs index 9ff01bc770..3b590f9df4 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs @@ -34,7 +34,7 @@ public AtomicReferenceResult Convert(AtomicReference atomicReference, ResourceId private RelationshipAttribute ConvertRelationship(string relationshipName, ResourceType resourceType, RequestAdapterState state) { using IDisposable _ = state.Position.PushElement("relationship"); - RelationshipAttribute relationship = resourceType.TryGetRelationshipByPublicName(relationshipName); + RelationshipAttribute relationship = resourceType.FindRelationshipByPublicName(relationshipName); AssertIsKnownRelationship(relationship, relationshipName, resourceType, state); AssertToManyInAddOrRemoveRelationship(relationship, state); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs index 5bb2a52d53..e61e8a6d64 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs @@ -43,7 +43,7 @@ private ResourceType ResolveType(IResourceIdentity identity, ResourceIdentityReq AssertHasType(identity, state); using IDisposable _ = state.Position.PushElement("type"); - ResourceType resourceType = _resourceGraph.TryGetResourceType(identity.Type); + ResourceType resourceType = _resourceGraph.FindResourceType(identity.Type); AssertIsKnownResourceType(resourceType, identity.Type, state); AssertIsCompatibleResourceType(resourceType, requirements.ResourceType, requirements.RelationshipName, state); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs index 5c49a4e0e4..822cf215e7 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs @@ -56,7 +56,7 @@ private void ConvertAttributes(IDictionary resourceObjectAttribu private void ConvertAttribute(IIdentifiable resource, string attributeName, object attributeValue, ResourceType resourceType, RequestAdapterState state) { using IDisposable _ = state.Position.PushElement(attributeName); - AttrAttribute attr = resourceType.TryGetAttributeByPublicName(attributeName); + AttrAttribute attr = resourceType.FindAttributeByPublicName(attributeName); if (attr == null && _options.AllowUnknownFieldsInRequestBody) { @@ -141,7 +141,7 @@ private void ConvertRelationship(string relationshipName, SingleOrManyData routeValues = GetRouteValues(resourceId, null); return RenderLinkForAction(controllerName, GetPrimaryControllerActionName, routeValues); @@ -283,7 +283,7 @@ public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship private string GetLinkForRelationshipSelf(string leftId, RelationshipAttribute relationship) { - string controllerName = _controllerResourceMapping.TryGetControllerNameForResourceType(relationship.LeftType); + string controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); return RenderLinkForAction(controllerName, GetRelationshipControllerActionName, routeValues); @@ -291,7 +291,7 @@ private string GetLinkForRelationshipSelf(string leftId, RelationshipAttribute r private string GetLinkForRelationshipRelated(string leftId, RelationshipAttribute relationship) { - string controllerName = _controllerResourceMapping.TryGetControllerNameForResourceType(relationship.LeftType); + string controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); return RenderLinkForAction(controllerName, GetSecondaryControllerActionName, routeValues); diff --git a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs index 798ddf0bcf..649f8b3f03 100644 --- a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs +++ b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs @@ -56,10 +56,10 @@ public void Can_add_resources_from_assembly_to_graph() // Assert IResourceGraph resourceGraph = _resourceGraphBuilder.Build(); - ResourceType personType = resourceGraph.TryGetResourceType(typeof(Person)); + ResourceType personType = resourceGraph.FindResourceType(typeof(Person)); personType.Should().NotBeNull(); - ResourceType todoItemType = resourceGraph.TryGetResourceType(typeof(TodoItem)); + ResourceType todoItemType = resourceGraph.FindResourceType(typeof(TodoItem)); todoItemType.Should().NotBeNull(); } @@ -76,7 +76,7 @@ public void Can_add_resource_from_current_assembly_to_graph() // Assert IResourceGraph resourceGraph = _resourceGraphBuilder.Build(); - ResourceType testResourceType = resourceGraph.TryGetResourceType(typeof(TestResource)); + ResourceType testResourceType = resourceGraph.FindResourceType(typeof(TestResource)); testResourceType.Should().NotBeNull(); } diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs index 34721a2982..d39e6b01e6 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs @@ -374,12 +374,12 @@ private sealed class FakeHttpContextAccessor : IHttpContextAccessor private sealed class FakeControllerResourceMapping : IControllerResourceMapping { - public ResourceType TryGetResourceTypeForController(Type controllerType) + public ResourceType GetResourceTypeForController(Type controllerType) { throw new NotImplementedException(); } - public string TryGetControllerNameForResourceType(ResourceType resourceType) + public string GetControllerNameForResourceType(ResourceType resourceType) { return null; } diff --git a/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs b/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs index 244db92b03..e753221785 100644 --- a/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs +++ b/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs @@ -99,7 +99,7 @@ private InvokeConfiguration GetConfiguration(string path, string resourceName = const string forcedNamespace = "api/v1"; var mockMapping = new Mock(); var resourceType = new ResourceType(resourceName, typeof(object), typeof(string)); - mockMapping.Setup(mapping => mapping.TryGetResourceTypeForController(It.IsAny())).Returns(resourceType); + mockMapping.Setup(mapping => mapping.GetResourceTypeForController(It.IsAny())).Returns(resourceType); IJsonApiOptions options = CreateOptions(forcedNamespace); var request = new JsonApiRequest(); diff --git a/test/UnitTests/Middleware/JsonApiRequestTests.cs b/test/UnitTests/Middleware/JsonApiRequestTests.cs index 92be9f28c7..6ae428232d 100644 --- a/test/UnitTests/Middleware/JsonApiRequestTests.cs +++ b/test/UnitTests/Middleware/JsonApiRequestTests.cs @@ -59,7 +59,7 @@ public async Task Sets_request_properties_correctly(string requestMethod, string var controllerResourceMappingMock = new Mock(); ResourceType todoItemType = resourceGraph.GetResourceType(); - controllerResourceMappingMock.Setup(mapping => mapping.TryGetResourceTypeForController(It.IsAny())).Returns(todoItemType); + controllerResourceMappingMock.Setup(mapping => mapping.GetResourceTypeForController(It.IsAny())).Returns(todoItemType); var httpContext = new DefaultHttpContext(); SetupRoutes(httpContext, requestMethod, requestPath); From 27ab8e01f752537cc3e77e38182844bb03b97c71 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 11 Oct 2021 13:02:36 +0200 Subject: [PATCH 02/32] Added directive to disable NRT in all source files --- benchmarks/BenchmarkResource.cs | 2 ++ benchmarks/BenchmarkResourcePublicNames.cs | 2 ++ benchmarks/DependencyFactory.cs | 2 ++ benchmarks/Deserialization/DeserializationBenchmarkBase.cs | 2 ++ .../Deserialization/OperationsDeserializationBenchmarks.cs | 2 ++ .../Deserialization/ResourceDeserializationBenchmarks.cs | 2 ++ .../LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs | 2 ++ benchmarks/Program.cs | 2 ++ benchmarks/Query/QueryParserBenchmarks.cs | 2 ++ benchmarks/Serialization/OperationsSerializationBenchmarks.cs | 2 ++ benchmarks/Serialization/ResourceSerializationBenchmarks.cs | 2 ++ benchmarks/Serialization/SerializationBenchmarkBase.cs | 2 ++ benchmarks/SubResource.cs | 2 ++ src/Examples/GettingStarted/Controllers/BooksController.cs | 2 ++ src/Examples/GettingStarted/Controllers/PeopleController.cs | 2 ++ src/Examples/GettingStarted/Data/SampleDbContext.cs | 2 ++ src/Examples/GettingStarted/Models/Book.cs | 2 ++ src/Examples/GettingStarted/Models/Person.cs | 2 ++ src/Examples/GettingStarted/Program.cs | 2 ++ src/Examples/GettingStarted/Startup.cs | 2 ++ .../Controllers/NonJsonApiController.cs | 2 ++ .../Controllers/OperationsController.cs | 2 ++ .../JsonApiDotNetCoreExample/Controllers/PeopleController.cs | 2 ++ .../JsonApiDotNetCoreExample/Controllers/TagsController.cs | 2 ++ .../Controllers/TodoItemsController.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs | 2 ++ .../Definitions/TodoItemDefinition.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Models/Person.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs | 2 ++ .../JsonApiDotNetCoreExample/Models/TodoItemPriority.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Program.cs | 2 ++ src/Examples/JsonApiDotNetCoreExample/Startup.cs | 2 ++ .../MultiDbContextExample/Controllers/ResourceAsController.cs | 2 ++ .../MultiDbContextExample/Controllers/ResourceBsController.cs | 2 ++ src/Examples/MultiDbContextExample/Data/DbContextA.cs | 2 ++ src/Examples/MultiDbContextExample/Data/DbContextB.cs | 2 ++ src/Examples/MultiDbContextExample/Models/ResourceA.cs | 2 ++ src/Examples/MultiDbContextExample/Models/ResourceB.cs | 2 ++ src/Examples/MultiDbContextExample/Program.cs | 2 ++ .../Repositories/DbContextARepository.cs | 2 ++ .../Repositories/DbContextBRepository.cs | 2 ++ src/Examples/MultiDbContextExample/Startup.cs | 2 ++ .../Controllers/WorkItemsController.cs | 2 ++ src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs | 2 ++ src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs | 2 ++ src/Examples/NoEntityFrameworkExample/Program.cs | 2 ++ .../NoEntityFrameworkExample/Services/WorkItemService.cs | 2 ++ src/Examples/NoEntityFrameworkExample/Startup.cs | 2 ++ src/Examples/ReportsExample/Controllers/ReportsController.cs | 2 ++ src/Examples/ReportsExample/Models/Report.cs | 2 ++ src/Examples/ReportsExample/Models/ReportStatistics.cs | 2 ++ src/Examples/ReportsExample/Program.cs | 2 ++ src/Examples/ReportsExample/Services/ReportService.cs | 2 ++ src/Examples/ReportsExample/Startup.cs | 2 ++ src/JsonApiDotNetCore/ArgumentGuard.cs | 2 ++ src/JsonApiDotNetCore/ArrayFactory.cs | 2 ++ .../AtomicOperations/EntityFrameworkCoreTransaction.cs | 2 ++ .../AtomicOperations/EntityFrameworkCoreTransactionFactory.cs | 2 ++ src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs | 2 ++ .../AtomicOperations/IOperationProcessorAccessor.cs | 2 ++ .../AtomicOperations/IOperationsProcessor.cs | 2 ++ .../AtomicOperations/IOperationsTransaction.cs | 2 ++ .../AtomicOperations/IOperationsTransactionFactory.cs | 2 ++ src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs | 2 ++ src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs | 2 ++ .../AtomicOperations/MissingTransactionFactory.cs | 2 ++ .../AtomicOperations/OperationProcessorAccessor.cs | 2 ++ src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs | 2 ++ .../AtomicOperations/Processors/AddToRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/CreateProcessor.cs | 2 ++ .../AtomicOperations/Processors/DeleteProcessor.cs | 2 ++ .../Processors/IAddToRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/ICreateProcessor.cs | 2 ++ .../AtomicOperations/Processors/IDeleteProcessor.cs | 2 ++ .../AtomicOperations/Processors/IOperationProcessor.cs | 2 ++ .../Processors/IRemoveFromRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/ISetRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/IUpdateProcessor.cs | 2 ++ .../Processors/RemoveFromRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/SetRelationshipProcessor.cs | 2 ++ .../AtomicOperations/Processors/UpdateProcessor.cs | 2 ++ .../AtomicOperations/RevertRequestStateOnDispose.cs | 2 ++ src/JsonApiDotNetCore/CollectionConverter.cs | 2 ++ src/JsonApiDotNetCore/CollectionExtensions.cs | 2 ++ .../Configuration/ApplicationBuilderExtensions.cs | 2 ++ .../Configuration/IInverseNavigationResolver.cs | 2 ++ .../Configuration/IJsonApiApplicationBuilder.cs | 2 ++ src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs | 2 ++ src/JsonApiDotNetCore/Configuration/IResourceGraph.cs | 2 ++ .../Configuration/InverseNavigationResolver.cs | 2 ++ .../Configuration/JsonApiApplicationBuilder.cs | 2 ++ .../Configuration/JsonApiModelMetadataProvider.cs | 2 ++ src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs | 2 ++ .../Configuration/JsonApiValidationFilter.cs | 2 ++ src/JsonApiDotNetCore/Configuration/PageNumber.cs | 2 ++ src/JsonApiDotNetCore/Configuration/PageSize.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs | 2 ++ .../Configuration/ResourceDescriptorAssemblyCache.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ResourceGraph.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ResourceType.cs | 2 ++ .../Configuration/ServiceCollectionExtensions.cs | 2 ++ src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs | 2 ++ src/JsonApiDotNetCore/Configuration/TypeLocator.cs | 2 ++ .../Controllers/Annotations/DisableQueryStringAttribute.cs | 2 ++ .../Annotations/DisableRoutingConventionAttribute.cs | 2 ++ .../Controllers/Annotations/HttpReadOnlyAttribute.cs | 2 ++ .../Controllers/Annotations/HttpRestrictAttribute.cs | 2 ++ .../Controllers/Annotations/NoHttpDeleteAttribute.cs | 2 ++ .../Controllers/Annotations/NoHttpPatchAttribute.cs | 2 ++ .../Controllers/Annotations/NoHttpPostAttribute.cs | 2 ++ src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs | 2 ++ .../Controllers/BaseJsonApiOperationsController.cs | 2 ++ src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs | 2 ++ src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs | 2 ++ src/JsonApiDotNetCore/Controllers/JsonApiController.cs | 2 ++ .../Controllers/JsonApiOperationsController.cs | 2 ++ src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs | 2 ++ src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs | 2 ++ src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs | 2 ++ .../Errors/CannotClearRequiredRelationshipException.cs | 2 ++ .../Errors/DuplicateLocalIdValueException.cs | 4 +++- src/JsonApiDotNetCore/Errors/FailedOperationException.cs | 2 ++ .../Errors/IncompatibleLocalIdTypeException.cs | 2 ++ src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs | 2 ++ src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs | 2 ++ src/JsonApiDotNetCore/Errors/InvalidQueryException.cs | 2 ++ .../Errors/InvalidQueryStringParameterException.cs | 2 ++ src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs | 2 ++ src/JsonApiDotNetCore/Errors/JsonApiException.cs | 2 ++ .../Errors/LocalIdSingleOperationException.cs | 4 +++- src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs | 2 ++ .../Errors/MissingTransactionSupportException.cs | 2 ++ .../Errors/NonParticipatingTransactionException.cs | 2 ++ src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs | 2 ++ .../Errors/RequestMethodNotAllowedException.cs | 2 ++ .../Errors/ResourceAlreadyExistsException.cs | 2 ++ src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs | 2 ++ .../Errors/ResourcesInRelationshipsNotFoundException.cs | 2 ++ src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs | 4 +++- .../Errors/UnsuccessfulActionResultException.cs | 2 ++ .../Middleware/AsyncConvertEmptyActionResultFilter.cs | 2 ++ .../Middleware/AsyncJsonApiExceptionFilter.cs | 2 ++ .../Middleware/AsyncQueryStringActionFilter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/EndpointKind.cs | 2 ++ src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs | 2 ++ src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs | 2 ++ src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs | 2 ++ src/JsonApiDotNetCore/Middleware/HeaderConstants.cs | 2 ++ src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs | 2 ++ .../Middleware/IAsyncConvertEmptyActionResultFilter.cs | 2 ++ .../Middleware/IAsyncJsonApiExceptionFilter.cs | 2 ++ .../Middleware/IAsyncQueryStringActionFilter.cs | 2 ++ .../Middleware/IControllerResourceMapping.cs | 2 ++ src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs | 2 ++ src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs | 2 ++ src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs | 2 ++ src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs | 2 ++ src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs | 2 ++ src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs | 2 ++ src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs | 2 ++ src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs | 2 ++ src/JsonApiDotNetCore/ObjectExtensions.cs | 2 ++ src/JsonApiDotNetCore/Properties/AssemblyInfo.cs | 2 ++ src/JsonApiDotNetCore/Queries/ExpressionInScope.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs | 2 ++ .../Queries/Expressions/ComparisonExpression.cs | 2 ++ .../Queries/Expressions/ComparisonOperator.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs | 2 ++ .../Queries/Expressions/FunctionExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs | 2 ++ .../Queries/Expressions/IdentifierExpression.cs | 2 ++ .../Queries/Expressions/IncludeChainConverter.cs | 2 ++ .../Queries/Expressions/IncludeElementExpression.cs | 2 ++ .../Queries/Expressions/IncludeExpression.cs | 2 ++ .../Queries/Expressions/LiteralConstantExpression.cs | 2 ++ .../Queries/Expressions/LogicalExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs | 2 ++ .../Queries/Expressions/MatchTextExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs | 2 ++ .../Queries/Expressions/NullConstantExpression.cs | 2 ++ .../PaginationElementQueryStringValueExpression.cs | 2 ++ .../Queries/Expressions/PaginationExpression.cs | 2 ++ .../Expressions/PaginationQueryStringValueExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs | 2 ++ .../Queries/Expressions/QueryExpressionRewriter.cs | 2 ++ .../Queries/Expressions/QueryExpressionVisitor.cs | 2 ++ .../Expressions/QueryStringParameterScopeExpression.cs | 2 ++ .../Queries/Expressions/QueryableHandlerExpression.cs | 2 ++ .../Queries/Expressions/ResourceFieldChainExpression.cs | 2 ++ .../Queries/Expressions/SortElementExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs | 2 ++ .../Queries/Expressions/SparseFieldSetExpression.cs | 2 ++ .../Queries/Expressions/SparseFieldSetExpressionExtensions.cs | 2 ++ .../Queries/Expressions/SparseFieldTableExpression.cs | 2 ++ src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs | 2 ++ src/JsonApiDotNetCore/Queries/IPaginationContext.cs | 2 ++ src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs | 2 ++ src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs | 2 ++ .../Queries/Internal/EvaluatedIncludeCache.cs | 2 ++ .../Queries/Internal/IEvaluatedIncludeCache.cs | 2 ++ .../Queries/Internal/ISparseFieldSetCache.cs | 2 ++ .../Queries/Internal/Parsing/FieldChainRequirements.cs | 2 ++ .../Queries/Internal/Parsing/FilterParser.cs | 2 ++ .../Queries/Internal/Parsing/IncludeParser.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs | 2 ++ .../Queries/Internal/Parsing/PaginationParser.cs | 2 ++ .../Queries/Internal/Parsing/QueryExpressionParser.cs | 2 ++ .../Queries/Internal/Parsing/QueryParseException.cs | 2 ++ .../Internal/Parsing/QueryStringParameterScopeParser.cs | 2 ++ .../Queries/Internal/Parsing/QueryTokenizer.cs | 2 ++ .../Queries/Internal/Parsing/ResourceFieldChainResolver.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs | 2 ++ .../Queries/Internal/Parsing/SparseFieldSetParser.cs | 2 ++ .../Queries/Internal/Parsing/SparseFieldTypeParser.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs | 2 ++ .../Internal/QueryableBuilding/IncludeClauseBuilder.cs | 2 ++ .../Internal/QueryableBuilding/LambdaParameterNameFactory.cs | 2 ++ .../Internal/QueryableBuilding/LambdaParameterNameScope.cs | 2 ++ .../Queries/Internal/QueryableBuilding/LambdaScope.cs | 2 ++ .../Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs | 2 ++ .../Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs | 2 ++ .../Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs | 2 ++ .../Queries/Internal/QueryableBuilding/QueryableBuilder.cs | 2 ++ .../Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs | 2 ++ .../Internal/QueryableBuilding/SkipTakeClauseBuilder.cs | 2 ++ .../Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs | 2 ++ src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs | 2 ++ src/JsonApiDotNetCore/Queries/PaginationContext.cs | 2 ++ src/JsonApiDotNetCore/Queries/QueryLayer.cs | 2 ++ src/JsonApiDotNetCore/Queries/TopFieldSelection.cs | 2 ++ .../QueryStrings/IFilterQueryStringParameterReader.cs | 2 ++ .../QueryStrings/IIncludeQueryStringParameterReader.cs | 2 ++ .../QueryStrings/IPaginationQueryStringParameterReader.cs | 2 ++ .../QueryStrings/IQueryStringParameterReader.cs | 2 ++ src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs | 2 ++ .../QueryStrings/IRequestQueryStringAccessor.cs | 2 ++ .../IResourceDefinitionQueryableParameterReader.cs | 2 ++ .../QueryStrings/ISortQueryStringParameterReader.cs | 2 ++ .../QueryStrings/ISparseFieldSetQueryStringParameterReader.cs | 2 ++ .../QueryStrings/Internal/FilterQueryStringParameterReader.cs | 2 ++ .../Internal/IncludeQueryStringParameterReader.cs | 2 ++ .../QueryStrings/Internal/LegacyFilterNotationConverter.cs | 2 ++ .../Internal/PaginationQueryStringParameterReader.cs | 2 ++ .../QueryStrings/Internal/QueryStringParameterReader.cs | 2 ++ .../QueryStrings/Internal/QueryStringReader.cs | 2 ++ .../QueryStrings/Internal/RequestQueryStringAccessor.cs | 2 ++ .../Internal/ResourceDefinitionQueryableParameterReader.cs | 2 ++ .../QueryStrings/Internal/SortQueryStringParameterReader.cs | 2 ++ .../Internal/SparseFieldSetQueryStringParameterReader.cs | 2 ++ .../QueryStrings/JsonApiQueryStringParameters.cs | 2 ++ .../Repositories/DataStoreUpdateException.cs | 2 ++ src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs | 2 ++ src/JsonApiDotNetCore/Repositories/DbContextResolver.cs | 2 ++ .../Repositories/EntityFrameworkCoreRepository.cs | 2 ++ src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs | 2 ++ .../Repositories/IRepositorySupportsTransaction.cs | 2 ++ src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs | 2 ++ src/JsonApiDotNetCore/Repositories/IResourceRepository.cs | 2 ++ .../Repositories/IResourceRepositoryAccessor.cs | 2 ++ .../Repositories/IResourceWriteRepository.cs | 2 ++ .../Repositories/ResourceRepositoryAccessor.cs | 2 ++ src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs | 2 ++ .../Resources/Annotations/AttrCapabilities.cs | 2 ++ .../Resources/Annotations/EagerLoadAttribute.cs | 2 ++ .../Resources/Annotations/HasManyAttribute.cs | 2 ++ .../Resources/Annotations/HasOneAttribute.cs | 2 ++ src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs | 2 ++ .../Resources/Annotations/RelationshipAttribute.cs | 2 ++ .../Resources/Annotations/ResourceAttribute.cs | 2 ++ .../Resources/Annotations/ResourceFieldAttribute.cs | 2 ++ .../Resources/Annotations/ResourceLinksAttribute.cs | 2 ++ src/JsonApiDotNetCore/Resources/IIdentifiable.cs | 2 ++ src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs | 2 ++ src/JsonApiDotNetCore/Resources/IResourceDefinition.cs | 2 ++ .../Resources/IResourceDefinitionAccessor.cs | 2 ++ src/JsonApiDotNetCore/Resources/IResourceFactory.cs | 2 ++ src/JsonApiDotNetCore/Resources/ITargetedFields.cs | 2 ++ src/JsonApiDotNetCore/Resources/Identifiable.cs | 2 ++ src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs | 2 ++ src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs | 2 ++ .../Resources/Internal/RuntimeTypeConverter.cs | 2 ++ src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs | 2 ++ src/JsonApiDotNetCore/Resources/OperationContainer.cs | 2 ++ .../Resources/QueryStringParameterHandlers.cs | 2 ++ src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs | 2 ++ src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs | 2 ++ src/JsonApiDotNetCore/Resources/ResourceFactory.cs | 2 ++ src/JsonApiDotNetCore/Resources/TargetedFields.cs | 2 ++ .../Serialization/JsonConverters/JsonObjectConverter.cs | 2 ++ .../Serialization/JsonConverters/ResourceObjectConverter.cs | 2 ++ .../JsonConverters/SingleOrManyDataConverterFactory.cs | 2 ++ .../JsonConverters/WriteOnlyDocumentConverter.cs | 2 ++ .../JsonConverters/WriteOnlyRelationshipObjectConverter.cs | 2 ++ .../Serialization/Objects/AtomicOperationCode.cs | 2 ++ .../Serialization/Objects/AtomicOperationObject.cs | 2 ++ .../Serialization/Objects/AtomicReference.cs | 2 ++ .../Serialization/Objects/AtomicResultObject.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/Document.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs | 2 ++ .../Serialization/Objects/IResourceIdentity.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs | 2 ++ .../Serialization/Objects/RelationshipLinks.cs | 2 ++ .../Serialization/Objects/RelationshipObject.cs | 2 ++ .../Serialization/Objects/ResourceIdentifierObject.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs | 2 ++ .../Serialization/Objects/SingleOrManyData.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs | 2 ++ .../Request/Adapters/AtomicOperationObjectAdapter.cs | 2 ++ .../Serialization/Request/Adapters/AtomicReferenceAdapter.cs | 2 ++ .../Serialization/Request/Adapters/AtomicReferenceResult.cs | 2 ++ .../Serialization/Request/Adapters/BaseDataAdapter.cs | 2 ++ .../Serialization/Request/Adapters/DocumentAdapter.cs | 2 ++ .../Request/Adapters/DocumentInOperationsRequestAdapter.cs | 2 ++ .../DocumentInResourceOrRelationshipRequestAdapter.cs | 2 ++ .../Request/Adapters/IAtomicOperationObjectAdapter.cs | 2 ++ .../Serialization/Request/Adapters/IAtomicReferenceAdapter.cs | 2 ++ .../Serialization/Request/Adapters/IDocumentAdapter.cs | 2 ++ .../Request/Adapters/IDocumentInOperationsRequestAdapter.cs | 2 ++ .../IDocumentInResourceOrRelationshipRequestAdapter.cs | 2 ++ .../Request/Adapters/IRelationshipDataAdapter.cs | 2 ++ .../Serialization/Request/Adapters/IResourceDataAdapter.cs | 2 ++ .../Adapters/IResourceDataInOperationsRequestAdapter.cs | 2 ++ .../Request/Adapters/IResourceIdentifierObjectAdapter.cs | 2 ++ .../Serialization/Request/Adapters/IResourceObjectAdapter.cs | 2 ++ .../Serialization/Request/Adapters/JsonElementConstraint.cs | 2 ++ .../Serialization/Request/Adapters/RelationshipDataAdapter.cs | 2 ++ .../Serialization/Request/Adapters/RequestAdapterPosition.cs | 2 ++ .../Serialization/Request/Adapters/RequestAdapterState.cs | 2 ++ .../Serialization/Request/Adapters/ResourceDataAdapter.cs | 2 ++ .../Adapters/ResourceDataInOperationsRequestAdapter.cs | 2 ++ .../Request/Adapters/ResourceIdentifierObjectAdapter.cs | 2 ++ .../Serialization/Request/Adapters/ResourceIdentityAdapter.cs | 2 ++ .../Request/Adapters/ResourceIdentityRequirements.cs | 2 ++ .../Serialization/Request/Adapters/ResourceObjectAdapter.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Request/IJsonApiReader.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs | 2 ++ .../Serialization/Request/JsonInvalidAttributeInfo.cs | 2 ++ .../Serialization/Request/ModelConversionException.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs | 2 ++ .../Serialization/Response/EmptyResponseMeta.cs | 2 ++ .../Serialization/Response/FingerprintGenerator.cs | 2 ++ .../Serialization/Response/IETagGenerator.cs | 2 ++ .../Serialization/Response/IFingerprintGenerator.cs | 2 ++ .../Serialization/Response/IJsonApiWriter.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs | 2 ++ .../Serialization/Response/IResponseModelAdapter.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs | 2 ++ src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs | 2 ++ .../Serialization/Response/ResourceObjectTreeNode.cs | 2 ++ .../Serialization/Response/ResponseModelAdapter.cs | 2 ++ src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs | 2 ++ src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs | 2 ++ src/JsonApiDotNetCore/Services/ICreateService.cs | 2 ++ src/JsonApiDotNetCore/Services/IDeleteService.cs | 2 ++ src/JsonApiDotNetCore/Services/IGetAllService.cs | 2 ++ src/JsonApiDotNetCore/Services/IGetByIdService.cs | 2 ++ src/JsonApiDotNetCore/Services/IGetRelationshipService.cs | 2 ++ src/JsonApiDotNetCore/Services/IGetSecondaryService.cs | 2 ++ .../Services/IRemoveFromRelationshipService.cs | 2 ++ src/JsonApiDotNetCore/Services/IResourceCommandService.cs | 2 ++ src/JsonApiDotNetCore/Services/IResourceQueryService.cs | 2 ++ src/JsonApiDotNetCore/Services/IResourceService.cs | 2 ++ src/JsonApiDotNetCore/Services/ISetRelationshipService.cs | 2 ++ src/JsonApiDotNetCore/Services/IUpdateService.cs | 2 ++ src/JsonApiDotNetCore/Services/JsonApiResourceService.cs | 2 ++ src/JsonApiDotNetCore/TypeExtensions.cs | 2 ++ test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs | 2 ++ test/DiscoveryTests/TestResource.cs | 2 ++ test/DiscoveryTests/TestResourceDefinition.cs | 2 ++ test/DiscoveryTests/TestResourceRepository.cs | 2 ++ test/DiscoveryTests/TestResourceService.cs | 2 ++ .../IntegrationTests/Archiving/ArchiveTests.cs | 2 ++ .../IntegrationTests/Archiving/BroadcastComment.cs | 2 ++ .../IntegrationTests/Archiving/BroadcastCommentsController.cs | 2 ++ .../IntegrationTests/Archiving/TelevisionBroadcast.cs | 2 ++ .../Archiving/TelevisionBroadcastDefinition.cs | 2 ++ .../Archiving/TelevisionBroadcastsController.cs | 2 ++ .../IntegrationTests/Archiving/TelevisionDbContext.cs | 2 ++ .../IntegrationTests/Archiving/TelevisionFakers.cs | 2 ++ .../IntegrationTests/Archiving/TelevisionNetwork.cs | 2 ++ .../Archiving/TelevisionNetworksController.cs | 2 ++ .../IntegrationTests/Archiving/TelevisionStation.cs | 2 ++ .../Archiving/TelevisionStationsController.cs | 2 ++ .../Controllers/AtomicConstrainedOperationsControllerTests.cs | 2 ++ .../Controllers/CreateMusicTrackOperationsController.cs | 2 ++ .../AtomicOperations/Creating/AtomicCreateResourceTests.cs | 2 ++ .../AtomicCreateResourceWithClientGeneratedIdTests.cs | 2 ++ .../AtomicCreateResourceWithToManyRelationshipTests.cs | 2 ++ .../AtomicCreateResourceWithToOneRelationshipTests.cs | 2 ++ .../AtomicOperations/Deleting/AtomicDeleteResourceTests.cs | 2 ++ .../ImplicitlyChangingTextLanguageDefinition.cs | 2 ++ .../AtomicOperations/Links/AtomicAbsoluteLinksTests.cs | 2 ++ .../Links/AtomicRelativeLinksWithNamespaceTests.cs | 2 ++ .../AtomicOperations/LocalIds/AtomicLocalIdTests.cs | 2 ++ .../IntegrationTests/AtomicOperations/Lyric.cs | 2 ++ .../IntegrationTests/AtomicOperations/LyricsController.cs | 2 ++ .../AtomicOperations/Meta/AtomicResourceMetaTests.cs | 2 ++ .../AtomicOperations/Meta/AtomicResponseMeta.cs | 2 ++ .../AtomicOperations/Meta/AtomicResponseMetaTests.cs | 2 ++ .../AtomicOperations/Meta/MusicTrackMetaDefinition.cs | 2 ++ .../AtomicOperations/Meta/TextLanguageMetaDefinition.cs | 2 ++ .../AtomicOperations/Mixed/AtomicLoggingTests.cs | 2 ++ .../AtomicOperations/Mixed/AtomicRequestBodyTests.cs | 2 ++ .../AtomicOperations/Mixed/AtomicSerializationTests.cs | 2 ++ .../Mixed/MaximumOperationsPerRequestTests.cs | 2 ++ .../ModelStateValidation/AtomicModelStateValidationTests.cs | 2 ++ .../IntegrationTests/AtomicOperations/MusicTrack.cs | 2 ++ .../AtomicOperations/MusicTracksController.cs | 2 ++ .../IntegrationTests/AtomicOperations/OperationsController.cs | 2 ++ .../IntegrationTests/AtomicOperations/OperationsDbContext.cs | 2 ++ .../IntegrationTests/AtomicOperations/OperationsFakers.cs | 2 ++ .../IntegrationTests/AtomicOperations/Performer.cs | 2 ++ .../IntegrationTests/AtomicOperations/PerformersController.cs | 2 ++ .../IntegrationTests/AtomicOperations/Playlist.cs | 2 ++ .../IntegrationTests/AtomicOperations/PlaylistsController.cs | 2 ++ .../AtomicOperations/QueryStrings/AtomicQueryStringTests.cs | 2 ++ .../QueryStrings/MusicTrackReleaseDefinition.cs | 2 ++ .../AtomicOperations/RecordCompaniesController.cs | 2 ++ .../IntegrationTests/AtomicOperations/RecordCompany.cs | 2 ++ .../AtomicSerializationResourceDefinitionTests.cs | 2 ++ .../Serialization/RecordCompanyDefinition.cs | 2 ++ .../AtomicSparseFieldSetResourceDefinitionTests.cs | 2 ++ .../SparseFieldSets/LyricPermissionProvider.cs | 2 ++ .../SparseFieldSets/LyricTextDefinition.cs | 2 ++ .../IntegrationTests/AtomicOperations/TextLanguage.cs | 2 ++ .../AtomicOperations/TextLanguagesController.cs | 2 ++ .../AtomicOperations/Transactions/AtomicRollbackTests.cs | 2 ++ .../Transactions/AtomicTransactionConsistencyTests.cs | 2 ++ .../AtomicOperations/Transactions/ExtraDbContext.cs | 2 ++ .../AtomicOperations/Transactions/LyricRepository.cs | 2 ++ .../AtomicOperations/Transactions/MusicTrackRepository.cs | 2 ++ .../AtomicOperations/Transactions/PerformerRepository.cs | 2 ++ .../Relationships/AtomicAddToToManyRelationshipTests.cs | 2 ++ .../Relationships/AtomicRemoveFromToManyRelationshipTests.cs | 2 ++ .../Relationships/AtomicReplaceToManyRelationshipTests.cs | 2 ++ .../Relationships/AtomicUpdateToOneRelationshipTests.cs | 2 ++ .../Resources/AtomicReplaceToManyRelationshipTests.cs | 2 ++ .../Updating/Resources/AtomicUpdateResourceTests.cs | 2 ++ .../Updating/Resources/AtomicUpdateToOneRelationshipTests.cs | 2 ++ .../IntegrationTests/CompositeKeys/Car.cs | 2 ++ .../CompositeKeys/CarCompositeKeyAwareRepository.cs | 2 ++ .../IntegrationTests/CompositeKeys/CarExpressionRewriter.cs | 2 ++ .../IntegrationTests/CompositeKeys/CarsController.cs | 2 ++ .../IntegrationTests/CompositeKeys/CompositeDbContext.cs | 2 ++ .../IntegrationTests/CompositeKeys/CompositeKeyTests.cs | 2 ++ .../IntegrationTests/CompositeKeys/Dealership.cs | 2 ++ .../IntegrationTests/CompositeKeys/DealershipsController.cs | 2 ++ .../IntegrationTests/CompositeKeys/Engine.cs | 2 ++ .../IntegrationTests/CompositeKeys/EnginesController.cs | 2 ++ .../IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs | 2 ++ .../ContentNegotiation/ContentTypeHeaderTests.cs | 2 ++ .../ContentNegotiation/OperationsController.cs | 2 ++ .../IntegrationTests/ContentNegotiation/PoliciesController.cs | 2 ++ .../IntegrationTests/ContentNegotiation/Policy.cs | 2 ++ .../IntegrationTests/ContentNegotiation/PolicyDbContext.cs | 2 ++ .../ControllerActionResults/ActionResultDbContext.cs | 2 ++ .../ControllerActionResults/ActionResultTests.cs | 2 ++ .../IntegrationTests/ControllerActionResults/Toothbrush.cs | 2 ++ .../ControllerActionResults/ToothbrushesController.cs | 2 ++ .../CustomRoutes/ApiControllerAttributeTests.cs | 2 ++ .../IntegrationTests/CustomRoutes/Civilian.cs | 2 ++ .../IntegrationTests/CustomRoutes/CiviliansController.cs | 2 ++ .../IntegrationTests/CustomRoutes/CustomRouteDbContext.cs | 2 ++ .../IntegrationTests/CustomRoutes/CustomRouteFakers.cs | 2 ++ .../IntegrationTests/CustomRoutes/CustomRouteTests.cs | 2 ++ .../IntegrationTests/CustomRoutes/Town.cs | 2 ++ .../IntegrationTests/CustomRoutes/TownsController.cs | 2 ++ .../IntegrationTests/EagerLoading/Building.cs | 2 ++ .../IntegrationTests/EagerLoading/BuildingRepository.cs | 2 ++ .../IntegrationTests/EagerLoading/BuildingsController.cs | 2 ++ .../IntegrationTests/EagerLoading/City.cs | 2 ++ .../IntegrationTests/EagerLoading/Door.cs | 2 ++ .../IntegrationTests/EagerLoading/EagerLoadingDbContext.cs | 2 ++ .../IntegrationTests/EagerLoading/EagerLoadingFakers.cs | 2 ++ .../IntegrationTests/EagerLoading/EagerLoadingTests.cs | 2 ++ .../IntegrationTests/EagerLoading/State.cs | 2 ++ .../IntegrationTests/EagerLoading/StatesController.cs | 2 ++ .../IntegrationTests/EagerLoading/Street.cs | 2 ++ .../IntegrationTests/EagerLoading/StreetsController.cs | 2 ++ .../IntegrationTests/EagerLoading/Window.cs | 2 ++ .../ExceptionHandling/AlternateExceptionHandler.cs | 2 ++ .../IntegrationTests/ExceptionHandling/ConsumerArticle.cs | 2 ++ .../ConsumerArticleIsNoLongerAvailableException.cs | 2 ++ .../ExceptionHandling/ConsumerArticleService.cs | 2 ++ .../ExceptionHandling/ConsumerArticlesController.cs | 2 ++ .../IntegrationTests/ExceptionHandling/ErrorDbContext.cs | 2 ++ .../ExceptionHandling/ExceptionHandlerTests.cs | 2 ++ .../IntegrationTests/ExceptionHandling/ThrowingArticle.cs | 2 ++ .../ExceptionHandling/ThrowingArticlesController.cs | 2 ++ .../IntegrationTests/HostingInIIS/ArtGalleriesController.cs | 2 ++ .../IntegrationTests/HostingInIIS/ArtGallery.cs | 2 ++ .../IntegrationTests/HostingInIIS/HostingDbContext.cs | 2 ++ .../IntegrationTests/HostingInIIS/HostingFakers.cs | 2 ++ .../IntegrationTests/HostingInIIS/HostingStartup.cs | 2 ++ .../IntegrationTests/HostingInIIS/HostingTests.cs | 2 ++ .../IntegrationTests/HostingInIIS/Painting.cs | 2 ++ .../IntegrationTests/HostingInIIS/PaintingsController.cs | 2 ++ .../IntegrationTests/IdObfuscation/BankAccount.cs | 2 ++ .../IntegrationTests/IdObfuscation/BankAccountsController.cs | 2 ++ .../IntegrationTests/IdObfuscation/DebitCard.cs | 2 ++ .../IntegrationTests/IdObfuscation/DebitCardsController.cs | 2 ++ .../IntegrationTests/IdObfuscation/HexadecimalCodec.cs | 2 ++ .../IntegrationTests/IdObfuscation/IdObfuscationTests.cs | 2 ++ .../IntegrationTests/IdObfuscation/ObfuscatedIdentifiable.cs | 2 ++ .../IdObfuscation/ObfuscatedIdentifiableController.cs | 2 ++ .../IntegrationTests/IdObfuscation/ObfuscationDbContext.cs | 2 ++ .../IntegrationTests/IdObfuscation/ObfuscationFakers.cs | 2 ++ .../InputValidation/ModelState/ModelStateDbContext.cs | 2 ++ .../InputValidation/ModelState/ModelStateValidationTests.cs | 2 ++ .../InputValidation/ModelState/NoModelStateValidationTests.cs | 2 ++ .../InputValidation/ModelState/SystemDirectoriesController.cs | 2 ++ .../InputValidation/ModelState/SystemDirectory.cs | 2 ++ .../IntegrationTests/InputValidation/ModelState/SystemFile.cs | 2 ++ .../InputValidation/ModelState/SystemFilesController.cs | 2 ++ .../IntegrationTests/InputValidation/RequestBody/Workflow.cs | 2 ++ .../InputValidation/RequestBody/WorkflowDbContext.cs | 2 ++ .../InputValidation/RequestBody/WorkflowDefinition.cs | 2 ++ .../InputValidation/RequestBody/WorkflowStage.cs | 4 +++- .../InputValidation/RequestBody/WorkflowTests.cs | 2 ++ .../InputValidation/RequestBody/WorkflowsController.cs | 2 ++ .../IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs | 2 ++ .../Links/AbsoluteLinksWithoutNamespaceTests.cs | 2 ++ .../IntegrationTests/Links/LinkInclusionTests.cs | 2 ++ .../IntegrationTests/Links/LinksDbContext.cs | 2 ++ .../IntegrationTests/Links/LinksFakers.cs | 2 ++ test/JsonApiDotNetCoreTests/IntegrationTests/Links/Photo.cs | 2 ++ .../IntegrationTests/Links/PhotoAlbum.cs | 2 ++ .../IntegrationTests/Links/PhotoAlbumsController.cs | 2 ++ .../IntegrationTests/Links/PhotoLocation.cs | 2 ++ .../IntegrationTests/Links/PhotoLocationsController.cs | 2 ++ .../IntegrationTests/Links/PhotosController.cs | 2 ++ .../IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs | 2 ++ .../Links/RelativeLinksWithoutNamespaceTests.cs | 2 ++ .../IntegrationTests/Logging/AuditDbContext.cs | 2 ++ .../IntegrationTests/Logging/AuditEntriesController.cs | 2 ++ .../IntegrationTests/Logging/AuditEntry.cs | 2 ++ .../IntegrationTests/Logging/AuditFakers.cs | 2 ++ .../IntegrationTests/Logging/LoggingTests.cs | 2 ++ .../IntegrationTests/Meta/ProductFamiliesController.cs | 2 ++ .../IntegrationTests/Meta/ProductFamily.cs | 2 ++ .../IntegrationTests/Meta/ResourceMetaTests.cs | 2 ++ .../IntegrationTests/Meta/ResponseMetaTests.cs | 2 ++ .../IntegrationTests/Meta/SupportDbContext.cs | 2 ++ .../IntegrationTests/Meta/SupportFakers.cs | 2 ++ .../IntegrationTests/Meta/SupportResponseMeta.cs | 2 ++ .../IntegrationTests/Meta/SupportTicket.cs | 2 ++ .../IntegrationTests/Meta/SupportTicketDefinition.cs | 2 ++ .../IntegrationTests/Meta/SupportTicketsController.cs | 2 ++ .../IntegrationTests/Meta/TopLevelCountTests.cs | 2 ++ .../IntegrationTests/Microservices/DomainFakers.cs | 2 ++ .../IntegrationTests/Microservices/DomainGroup.cs | 2 ++ .../IntegrationTests/Microservices/DomainGroupsController.cs | 2 ++ .../IntegrationTests/Microservices/DomainUser.cs | 2 ++ .../IntegrationTests/Microservices/DomainUsersController.cs | 2 ++ .../FireAndForgetDelivery/FireForgetDbContext.cs | 2 ++ .../FireAndForgetDelivery/FireForgetGroupDefinition.cs | 2 ++ .../FireAndForgetDelivery/FireForgetTests.Group.cs | 2 ++ .../FireAndForgetDelivery/FireForgetTests.User.cs | 2 ++ .../Microservices/FireAndForgetDelivery/FireForgetTests.cs | 2 ++ .../FireAndForgetDelivery/FireForgetUserDefinition.cs | 2 ++ .../Microservices/FireAndForgetDelivery/MessageBroker.cs | 2 ++ .../Microservices/Messages/GroupCreatedContent.cs | 2 ++ .../Microservices/Messages/GroupDeletedContent.cs | 2 ++ .../Microservices/Messages/GroupRenamedContent.cs | 2 ++ .../Microservices/Messages/IMessageContent.cs | 2 ++ .../Microservices/Messages/OutgoingMessage.cs | 2 ++ .../Microservices/Messages/UserAddedToGroupContent.cs | 2 ++ .../Microservices/Messages/UserCreatedContent.cs | 2 ++ .../Microservices/Messages/UserDeletedContent.cs | 2 ++ .../Microservices/Messages/UserDisplayNameChangedContent.cs | 2 ++ .../Microservices/Messages/UserLoginNameChangedContent.cs | 2 ++ .../Microservices/Messages/UserMovedToGroupContent.cs | 2 ++ .../Microservices/Messages/UserRemovedFromGroupContent.cs | 2 ++ .../Microservices/MessagingGroupDefinition.cs | 2 ++ .../IntegrationTests/Microservices/MessagingUserDefinition.cs | 2 ++ .../TransactionalOutboxPattern/OutboxDbContext.cs | 2 ++ .../TransactionalOutboxPattern/OutboxGroupDefinition.cs | 2 ++ .../TransactionalOutboxPattern/OutboxTests.Group.cs | 2 ++ .../TransactionalOutboxPattern/OutboxTests.User.cs | 2 ++ .../Microservices/TransactionalOutboxPattern/OutboxTests.cs | 2 ++ .../TransactionalOutboxPattern/OutboxUserDefinition.cs | 2 ++ .../IntegrationTests/MultiTenancy/IHasTenant.cs | 2 ++ .../IntegrationTests/MultiTenancy/ITenantProvider.cs | 2 ++ .../IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs | 2 ++ .../IntegrationTests/MultiTenancy/MultiTenancyFakers.cs | 2 ++ .../IntegrationTests/MultiTenancy/MultiTenancyTests.cs | 2 ++ .../MultiTenancy/MultiTenantResourceService.cs | 2 ++ .../IntegrationTests/MultiTenancy/RouteTenantProvider.cs | 2 ++ .../IntegrationTests/MultiTenancy/WebProduct.cs | 2 ++ .../IntegrationTests/MultiTenancy/WebProductsController.cs | 2 ++ .../IntegrationTests/MultiTenancy/WebShop.cs | 2 ++ .../IntegrationTests/MultiTenancy/WebShopsController.cs | 2 ++ .../IntegrationTests/NamingConventions/DivingBoard.cs | 2 ++ .../NamingConventions/DivingBoardsController.cs | 2 ++ .../NamingConventions/JsonKebabCaseNamingPolicy.cs | 2 ++ .../NamingConventions/KebabCasingConventionStartup.cs | 2 ++ .../IntegrationTests/NamingConventions/KebabCasingTests.cs | 2 ++ .../NamingConventions/PascalCasingConventionStartup.cs | 2 ++ .../IntegrationTests/NamingConventions/PascalCasingTests.cs | 2 ++ .../IntegrationTests/NamingConventions/SwimmingDbContext.cs | 2 ++ .../IntegrationTests/NamingConventions/SwimmingFakers.cs | 2 ++ .../IntegrationTests/NamingConventions/SwimmingPool.cs | 2 ++ .../NamingConventions/SwimmingPoolsController.cs | 2 ++ .../IntegrationTests/NamingConventions/WaterSlide.cs | 2 ++ .../NonJsonApiControllers/NonJsonApiController.cs | 2 ++ .../NonJsonApiControllers/NonJsonApiControllerTests.cs | 2 ++ .../NonJsonApiControllers/NonJsonApiDbContext.cs | 2 ++ .../IntegrationTests/QueryStrings/AccountPreferences.cs | 2 ++ .../IntegrationTests/QueryStrings/Appointment.cs | 2 ++ .../IntegrationTests/QueryStrings/Blog.cs | 2 ++ .../IntegrationTests/QueryStrings/BlogPost.cs | 2 ++ .../IntegrationTests/QueryStrings/BlogPostsController.cs | 2 ++ .../IntegrationTests/QueryStrings/BlogsController.cs | 2 ++ .../IntegrationTests/QueryStrings/Calendar.cs | 2 ++ .../IntegrationTests/QueryStrings/CalendarsController.cs | 2 ++ .../IntegrationTests/QueryStrings/Comment.cs | 2 ++ .../IntegrationTests/QueryStrings/CommentsController.cs | 2 ++ .../QueryStrings/Filtering/FilterDataTypeTests.cs | 2 ++ .../QueryStrings/Filtering/FilterDbContext.cs | 2 ++ .../QueryStrings/Filtering/FilterDepthTests.cs | 2 ++ .../QueryStrings/Filtering/FilterOperatorTests.cs | 2 ++ .../IntegrationTests/QueryStrings/Filtering/FilterTests.cs | 2 ++ .../QueryStrings/Filtering/FilterableResource.cs | 2 ++ .../QueryStrings/Filtering/FilterableResourcesController.cs | 2 ++ .../IntegrationTests/QueryStrings/Includes/IncludeTests.cs | 2 ++ .../IntegrationTests/QueryStrings/Label.cs | 2 ++ .../IntegrationTests/QueryStrings/LabelColor.cs | 2 ++ .../IntegrationTests/QueryStrings/LoginAttempt.cs | 2 ++ .../QueryStrings/Pagination/PaginationWithTotalCountTests.cs | 2 ++ .../Pagination/PaginationWithoutTotalCountTests.cs | 2 ++ .../QueryStrings/Pagination/RangeValidationTests.cs | 2 ++ .../Pagination/RangeValidationWithMaximumTests.cs | 2 ++ .../IntegrationTests/QueryStrings/QueryStringDbContext.cs | 2 ++ .../IntegrationTests/QueryStrings/QueryStringFakers.cs | 2 ++ .../IntegrationTests/QueryStrings/QueryStringTests.cs | 2 ++ .../QueryStrings/SerializerIgnoreConditionTests.cs | 2 ++ .../IntegrationTests/QueryStrings/Sorting/SortTests.cs | 2 ++ .../QueryStrings/SparseFieldSets/ResourceCaptureStore.cs | 2 ++ .../QueryStrings/SparseFieldSets/ResultCapturingRepository.cs | 2 ++ .../QueryStrings/SparseFieldSets/SparseFieldSetTests.cs | 2 ++ .../IntegrationTests/QueryStrings/WebAccount.cs | 2 ++ .../IntegrationTests/QueryStrings/WebAccountsController.cs | 2 ++ .../ReadWrite/Creating/CreateResourceTests.cs | 2 ++ .../Creating/CreateResourceWithClientGeneratedIdTests.cs | 2 ++ .../Creating/CreateResourceWithToManyRelationshipTests.cs | 2 ++ .../Creating/CreateResourceWithToOneRelationshipTests.cs | 2 ++ .../ReadWrite/Deleting/DeleteResourceTests.cs | 2 ++ .../ReadWrite/Fetching/FetchRelationshipTests.cs | 2 ++ .../IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs | 2 ++ .../ReadWrite/ImplicitlyChangingWorkItemDefinition.cs | 2 ++ .../ReadWrite/ImplicitlyChangingWorkItemGroupDefinition.cs | 2 ++ .../IntegrationTests/ReadWrite/ReadWriteDbContext.cs | 2 ++ .../IntegrationTests/ReadWrite/ReadWriteFakers.cs | 2 ++ .../IntegrationTests/ReadWrite/RgbColor.cs | 2 ++ .../IntegrationTests/ReadWrite/RgbColorsController.cs | 2 ++ .../Updating/Relationships/AddToToManyRelationshipTests.cs | 2 ++ .../Relationships/RemoveFromToManyRelationshipTests.cs | 2 ++ .../Updating/Relationships/ReplaceToManyRelationshipTests.cs | 2 ++ .../Updating/Relationships/UpdateToOneRelationshipTests.cs | 2 ++ .../Updating/Resources/ReplaceToManyRelationshipTests.cs | 2 ++ .../ReadWrite/Updating/Resources/UpdateResourceTests.cs | 2 ++ .../Updating/Resources/UpdateToOneRelationshipTests.cs | 2 ++ .../IntegrationTests/ReadWrite/UserAccount.cs | 2 ++ .../IntegrationTests/ReadWrite/UserAccountsController.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItem.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItemGroup.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItemGroupsController.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItemPriority.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItemToWorkItem.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkItemsController.cs | 2 ++ .../IntegrationTests/ReadWrite/WorkTag.cs | 2 ++ .../IntegrationTests/RequiredRelationships/Customer.cs | 2 ++ .../RequiredRelationships/CustomersController.cs | 2 ++ .../RequiredRelationships/DefaultBehaviorDbContext.cs | 2 ++ .../RequiredRelationships/DefaultBehaviorFakers.cs | 2 ++ .../RequiredRelationships/DefaultBehaviorTests.cs | 2 ++ .../IntegrationTests/RequiredRelationships/Order.cs | 2 ++ .../RequiredRelationships/OrdersController.cs | 2 ++ .../IntegrationTests/RequiredRelationships/Shipment.cs | 2 ++ .../RequiredRelationships/ShipmentsController.cs | 2 ++ .../ResourceConstructorInjection/GiftCertificate.cs | 2 ++ .../GiftCertificatesController.cs | 2 ++ .../ResourceConstructorInjection/InjectionDbContext.cs | 2 ++ .../ResourceConstructorInjection/InjectionFakers.cs | 2 ++ .../ResourceConstructorInjection/PostOffice.cs | 2 ++ .../ResourceConstructorInjection/PostOfficesController.cs | 2 ++ .../ResourceConstructorInjection/ResourceInjectionTests.cs | 2 ++ .../IntegrationTests/ResourceDefinitionHitCounter.cs | 2 ++ .../ResourceDefinitions/Reading/IClientSettingsProvider.cs | 2 ++ .../IntegrationTests/ResourceDefinitions/Reading/Moon.cs | 2 ++ .../ResourceDefinitions/Reading/MoonDefinition.cs | 2 ++ .../ResourceDefinitions/Reading/MoonsController.cs | 2 ++ .../IntegrationTests/ResourceDefinitions/Reading/Planet.cs | 2 ++ .../ResourceDefinitions/Reading/PlanetDefinition.cs | 2 ++ .../ResourceDefinitions/Reading/PlanetsController.cs | 2 ++ .../Reading/ResourceDefinitionReadTests.cs | 2 ++ .../IntegrationTests/ResourceDefinitions/Reading/Star.cs | 2 ++ .../ResourceDefinitions/Reading/StarDefinition.cs | 2 ++ .../IntegrationTests/ResourceDefinitions/Reading/StarKind.cs | 2 ++ .../ResourceDefinitions/Reading/StarsController.cs | 2 ++ .../ResourceDefinitions/Reading/TestClientSettingsProvider.cs | 2 ++ .../ResourceDefinitions/Reading/UniverseDbContext.cs | 2 ++ .../ResourceDefinitions/Reading/UniverseFakers.cs | 2 ++ .../ResourceDefinitions/Serialization/AesEncryptionService.cs | 2 ++ .../ResourceDefinitions/Serialization/IEncryptionService.cs | 2 ++ .../Serialization/ResourceDefinitionSerializationTests.cs | 2 ++ .../ResourceDefinitions/Serialization/Scholarship.cs | 2 ++ .../Serialization/ScholarshipsController.cs | 2 ++ .../Serialization/SerializationDbContext.cs | 2 ++ .../ResourceDefinitions/Serialization/SerializationFakers.cs | 2 ++ .../ResourceDefinitions/Serialization/Student.cs | 2 ++ .../ResourceDefinitions/Serialization/StudentDefinition.cs | 2 ++ .../ResourceDefinitions/Serialization/StudentsController.cs | 2 ++ .../ResourceInheritance/InheritanceDbContext.cs | 2 ++ .../IntegrationTests/ResourceInheritance/InheritanceTests.cs | 2 ++ .../IntegrationTests/ResourceInheritance/MenController.cs | 2 ++ .../IntegrationTests/ResourceInheritance/Models/Book.cs | 2 ++ .../ResourceInheritance/Models/CompanyHealthInsurance.cs | 2 ++ .../ResourceInheritance/Models/ContentItem.cs | 2 ++ .../ResourceInheritance/Models/FamilyHealthInsurance.cs | 2 ++ .../ResourceInheritance/Models/HealthInsurance.cs | 2 ++ .../IntegrationTests/ResourceInheritance/Models/Human.cs | 2 ++ .../IntegrationTests/ResourceInheritance/Models/Man.cs | 2 ++ .../IntegrationTests/ResourceInheritance/Models/Video.cs | 2 ++ .../IntegrationTests/ResourceInheritance/Models/Woman.cs | 2 ++ .../IntegrationTests/RestrictedControllers/Bed.cs | 2 ++ .../RestrictedControllers/BlockingHttpDeleteController.cs | 2 ++ .../RestrictedControllers/BlockingHttpPatchController.cs | 2 ++ .../RestrictedControllers/BlockingHttpPostController.cs | 2 ++ .../RestrictedControllers/BlockingWritesController.cs | 2 ++ .../IntegrationTests/RestrictedControllers/Chair.cs | 2 ++ .../RestrictedControllers/DisableQueryStringTests.cs | 2 ++ .../RestrictedControllers/HttpReadOnlyTests.cs | 2 ++ .../RestrictedControllers/NoHttpDeleteTests.cs | 2 ++ .../RestrictedControllers/NoHttpPatchTests.cs | 2 ++ .../IntegrationTests/RestrictedControllers/NoHttpPostTests.cs | 2 ++ .../RestrictedControllers/RestrictionDbContext.cs | 2 ++ .../RestrictedControllers/RestrictionFakers.cs | 2 ++ .../SkipCacheQueryStringParameterReader.cs | 2 ++ .../IntegrationTests/RestrictedControllers/Sofa.cs | 2 ++ .../IntegrationTests/RestrictedControllers/Table.cs | 2 ++ .../IntegrationTests/Serialization/ETagTests.cs | 2 ++ .../IntegrationTests/Serialization/Meeting.cs | 2 ++ .../IntegrationTests/Serialization/MeetingAttendee.cs | 2 ++ .../Serialization/MeetingAttendeesController.cs | 2 ++ .../IntegrationTests/Serialization/MeetingLocation.cs | 2 ++ .../IntegrationTests/Serialization/MeetingsController.cs | 2 ++ .../IntegrationTests/Serialization/SerializationDbContext.cs | 2 ++ .../IntegrationTests/Serialization/SerializationFakers.cs | 2 ++ .../IntegrationTests/Serialization/SerializationTests.cs | 2 ++ .../IntegrationTests/SoftDeletion/CompaniesController.cs | 2 ++ .../IntegrationTests/SoftDeletion/Company.cs | 2 ++ .../IntegrationTests/SoftDeletion/Department.cs | 2 ++ .../IntegrationTests/SoftDeletion/DepartmentsController.cs | 2 ++ .../IntegrationTests/SoftDeletion/ISoftDeletable.cs | 2 ++ .../SoftDeletion/SoftDeletionAwareResourceService.cs | 2 ++ .../IntegrationTests/SoftDeletion/SoftDeletionDbContext.cs | 2 ++ .../IntegrationTests/SoftDeletion/SoftDeletionFakers.cs | 2 ++ .../IntegrationTests/SoftDeletion/SoftDeletionTests.cs | 2 ++ .../IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs | 2 ++ test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Game.cs | 2 ++ .../IntegrationTests/ZeroKeys/GamesController.cs | 2 ++ test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Map.cs | 2 ++ .../IntegrationTests/ZeroKeys/MapsController.cs | 2 ++ .../IntegrationTests/ZeroKeys/Player.cs | 2 ++ .../IntegrationTests/ZeroKeys/PlayersController.cs | 2 ++ .../IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs | 2 ++ .../IntegrationTests/ZeroKeys/ZeroKeyDbContext.cs | 2 ++ .../IntegrationTests/ZeroKeys/ZeroKeyFakers.cs | 2 ++ .../Startups/AbsoluteLinksInApiNamespaceStartup.cs | 2 ++ .../Startups/AbsoluteLinksNoNamespaceStartup.cs | 2 ++ .../Startups/ModelStateValidationStartup.cs | 2 ++ .../Startups/RelativeLinksInApiNamespaceStartup.cs | 2 ++ .../Startups/RelativeLinksNoNamespaceStartup.cs | 2 ++ .../Configuration/DependencyContainerRegistrationTests.cs | 2 ++ .../UnitTests/Links/LinkInclusionTests.cs | 2 ++ .../UnitTests/QueryStringParameters/BaseParseTests.cs | 2 ++ .../UnitTests/QueryStringParameters/FilterParseTests.cs | 2 ++ .../UnitTests/QueryStringParameters/IncludeParseTests.cs | 2 ++ .../UnitTests/QueryStringParameters/LegacyFilterParseTests.cs | 2 ++ .../UnitTests/QueryStringParameters/PaginationParseTests.cs | 2 ++ .../UnitTests/QueryStringParameters/SortParseTests.cs | 2 ++ .../QueryStringParameters/SparseFieldSetParseTests.cs | 2 ++ .../UnitTests/Serialization/InputConversionTests.cs | 2 ++ .../UnitTests/Serialization/Response/Models/Article.cs | 2 ++ .../UnitTests/Serialization/Response/Models/Blog.cs | 2 ++ .../UnitTests/Serialization/Response/Models/Food.cs | 2 ++ .../UnitTests/Serialization/Response/Models/Person.cs | 2 ++ .../UnitTests/Serialization/Response/Models/Song.cs | 2 ++ .../Serialization/Response/ResponseModelAdapterTests.cs | 4 +++- test/MultiDbContextTests/ResourceTests.cs | 2 ++ test/NoEntityFrameworkTests/WorkItemTests.cs | 2 ++ test/TestBuildingBlocks/AssemblyInfo.cs | 2 ++ test/TestBuildingBlocks/DateTimeExtensions.cs | 2 ++ test/TestBuildingBlocks/DbContextExtensions.cs | 2 ++ test/TestBuildingBlocks/DummyTest.cs | 2 ++ test/TestBuildingBlocks/FakeLoggerFactory.cs | 2 ++ test/TestBuildingBlocks/FakerContainer.cs | 2 ++ test/TestBuildingBlocks/FrozenSystemClock.cs | 2 ++ test/TestBuildingBlocks/HttpResponseMessageExtensions.cs | 2 ++ test/TestBuildingBlocks/IntegrationTest.cs | 2 ++ test/TestBuildingBlocks/IntegrationTestContext.cs | 2 ++ test/TestBuildingBlocks/JsonApiStringConverter.cs | 2 ++ test/TestBuildingBlocks/NeverSameResourceChangeTracker.cs | 2 ++ test/TestBuildingBlocks/ObjectAssertionsExtensions.cs | 2 ++ test/TestBuildingBlocks/QueryableExtensions.cs | 2 ++ test/TestBuildingBlocks/ServiceCollectionExtensions.cs | 2 ++ test/TestBuildingBlocks/TestControllerProvider.cs | 2 ++ test/TestBuildingBlocks/TestableStartup.cs | 2 ++ test/TestBuildingBlocks/Unknown.cs | 2 ++ test/UnitTests/Builders/ResourceGraphBuilderTests.cs | 2 ++ test/UnitTests/Controllers/BaseJsonApiControllerTests.cs | 2 ++ test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs | 2 ++ test/UnitTests/Graph/BaseType.cs | 2 ++ test/UnitTests/Graph/DerivedType.cs | 2 ++ test/UnitTests/Graph/IGenericInterface.cs | 2 ++ test/UnitTests/Graph/Implementation.cs | 2 ++ test/UnitTests/Graph/Model.cs | 2 ++ test/UnitTests/Graph/ResourceDescriptorAssemblyCacheTests.cs | 2 ++ test/UnitTests/Graph/TypeLocatorTests.cs | 2 ++ test/UnitTests/Internal/ErrorObjectTests.cs | 2 ++ test/UnitTests/Internal/ResourceGraphBuilderTests.cs | 2 ++ test/UnitTests/Internal/RuntimeTypeConverterTests.cs | 2 ++ test/UnitTests/Internal/TypeExtensionsTests.cs | 2 ++ test/UnitTests/Middleware/JsonApiMiddlewareTests.cs | 2 ++ test/UnitTests/Middleware/JsonApiRequestTests.cs | 2 ++ test/UnitTests/Models/AttributesEqualsTests.cs | 2 ++ test/UnitTests/Models/IdentifiableTests.cs | 2 ++ test/UnitTests/Models/ResourceConstructionExpressionTests.cs | 2 ++ test/UnitTests/Models/ResourceWithStringConstructor.cs | 2 ++ test/UnitTests/Models/ResourceWithThrowingConstructor.cs | 2 ++ test/UnitTests/Models/ResourceWithoutConstructor.cs | 2 ++ test/UnitTests/TestModels/Article.cs | 2 ++ test/UnitTests/TestModels/BaseModel.cs | 2 ++ test/UnitTests/TestModels/Blog.cs | 2 ++ test/UnitTests/TestModels/ComplexType.cs | 2 ++ test/UnitTests/TestModels/FirstDerivedModel.cs | 2 ++ test/UnitTests/TestModels/Food.cs | 2 ++ test/UnitTests/TestModels/IdentifiableWithAttribute.cs | 2 ++ .../TestModels/MultipleRelationshipsDependentPart.cs | 2 ++ .../TestModels/MultipleRelationshipsPrincipalPart.cs | 2 ++ test/UnitTests/TestModels/OneToManyDependent.cs | 2 ++ test/UnitTests/TestModels/OneToManyPrincipal.cs | 2 ++ test/UnitTests/TestModels/OneToManyRequiredDependent.cs | 2 ++ test/UnitTests/TestModels/OneToOneDependent.cs | 2 ++ test/UnitTests/TestModels/OneToOnePrincipal.cs | 2 ++ test/UnitTests/TestModels/OneToOneRequiredDependent.cs | 2 ++ test/UnitTests/TestModels/Person.cs | 2 ++ test/UnitTests/TestModels/SecondDerivedModel.cs | 2 ++ test/UnitTests/TestModels/Song.cs | 2 ++ test/UnitTests/TestModels/TestResource.cs | 2 ++ .../TestModels/TestResourceWithAbstractRelationship.cs | 2 ++ test/UnitTests/TestModels/TestResourceWithList.cs | 2 ++ 876 files changed, 1757 insertions(+), 5 deletions(-) diff --git a/benchmarks/BenchmarkResource.cs b/benchmarks/BenchmarkResource.cs index ad18d999c7..3b91436bac 100644 --- a/benchmarks/BenchmarkResource.cs +++ b/benchmarks/BenchmarkResource.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/benchmarks/BenchmarkResourcePublicNames.cs b/benchmarks/BenchmarkResourcePublicNames.cs index 84b63e7668..02175e2a14 100644 --- a/benchmarks/BenchmarkResourcePublicNames.cs +++ b/benchmarks/BenchmarkResourcePublicNames.cs @@ -1,3 +1,5 @@ +#nullable disable + #pragma warning disable AV1008 // Class should not be static namespace Benchmarks diff --git a/benchmarks/DependencyFactory.cs b/benchmarks/DependencyFactory.cs index 184ba5a082..98440c6263 100644 --- a/benchmarks/DependencyFactory.cs +++ b/benchmarks/DependencyFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using Microsoft.Extensions.Logging.Abstractions; diff --git a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs index 5ceff85a2d..85fa662c35 100644 --- a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs +++ b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.Design; diff --git a/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs b/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs index c09b7c77c7..b66f860d12 100644 --- a/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs +++ b/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json; using BenchmarkDotNet.Attributes; diff --git a/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs b/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs index d3fe50ffa6..dcf0f09a03 100644 --- a/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs +++ b/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json; using BenchmarkDotNet.Attributes; diff --git a/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs b/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs index 400fc0dbcf..7feb1d52ea 100644 --- a/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs +++ b/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text; using BenchmarkDotNet.Attributes; diff --git a/benchmarks/Program.cs b/benchmarks/Program.cs index 995538eb76..bc01304374 100644 --- a/benchmarks/Program.cs +++ b/benchmarks/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using BenchmarkDotNet.Running; using Benchmarks.Deserialization; using Benchmarks.LinkBuilding; diff --git a/benchmarks/Query/QueryParserBenchmarks.cs b/benchmarks/Query/QueryParserBenchmarks.cs index bb6cec20e8..c47ee9e130 100644 --- a/benchmarks/Query/QueryParserBenchmarks.cs +++ b/benchmarks/Query/QueryParserBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.Design; diff --git a/benchmarks/Serialization/OperationsSerializationBenchmarks.cs b/benchmarks/Serialization/OperationsSerializationBenchmarks.cs index fbcdf0b0a9..f6360235f2 100644 --- a/benchmarks/Serialization/OperationsSerializationBenchmarks.cs +++ b/benchmarks/Serialization/OperationsSerializationBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Text.Json; diff --git a/benchmarks/Serialization/ResourceSerializationBenchmarks.cs b/benchmarks/Serialization/ResourceSerializationBenchmarks.cs index 8f538cc9a2..0e302fe7cf 100644 --- a/benchmarks/Serialization/ResourceSerializationBenchmarks.cs +++ b/benchmarks/Serialization/ResourceSerializationBenchmarks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/benchmarks/Serialization/SerializationBenchmarkBase.cs b/benchmarks/Serialization/SerializationBenchmarkBase.cs index 41fa9776b6..61f95355ef 100644 --- a/benchmarks/Serialization/SerializationBenchmarkBase.cs +++ b/benchmarks/Serialization/SerializationBenchmarkBase.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/benchmarks/SubResource.cs b/benchmarks/SubResource.cs index 9d0f95bbcf..add3a0dac9 100644 --- a/benchmarks/SubResource.cs +++ b/benchmarks/SubResource.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/Examples/GettingStarted/Controllers/BooksController.cs b/src/Examples/GettingStarted/Controllers/BooksController.cs index 928dddc82b..17f990ae41 100644 --- a/src/Examples/GettingStarted/Controllers/BooksController.cs +++ b/src/Examples/GettingStarted/Controllers/BooksController.cs @@ -1,3 +1,5 @@ +#nullable disable + using GettingStarted.Models; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/GettingStarted/Controllers/PeopleController.cs b/src/Examples/GettingStarted/Controllers/PeopleController.cs index cef47189ae..f73a95bde6 100644 --- a/src/Examples/GettingStarted/Controllers/PeopleController.cs +++ b/src/Examples/GettingStarted/Controllers/PeopleController.cs @@ -1,3 +1,5 @@ +#nullable disable + using GettingStarted.Models; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/GettingStarted/Data/SampleDbContext.cs b/src/Examples/GettingStarted/Data/SampleDbContext.cs index b54011ff14..81312ca1c1 100644 --- a/src/Examples/GettingStarted/Data/SampleDbContext.cs +++ b/src/Examples/GettingStarted/Data/SampleDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using GettingStarted.Models; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/src/Examples/GettingStarted/Models/Book.cs b/src/Examples/GettingStarted/Models/Book.cs index f636dd54e1..8629e41ba1 100644 --- a/src/Examples/GettingStarted/Models/Book.cs +++ b/src/Examples/GettingStarted/Models/Book.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/Examples/GettingStarted/Models/Person.cs b/src/Examples/GettingStarted/Models/Person.cs index 52a95ac330..1511bd8e1d 100644 --- a/src/Examples/GettingStarted/Models/Person.cs +++ b/src/Examples/GettingStarted/Models/Person.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/Examples/GettingStarted/Program.cs b/src/Examples/GettingStarted/Program.cs index 68bca0ae86..a34a179b11 100644 --- a/src/Examples/GettingStarted/Program.cs +++ b/src/Examples/GettingStarted/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/GettingStarted/Startup.cs b/src/Examples/GettingStarted/Startup.cs index 13beab63fe..6077819ece 100644 --- a/src/Examples/GettingStarted/Startup.cs +++ b/src/Examples/GettingStarted/Startup.cs @@ -1,3 +1,5 @@ +#nullable disable + using GettingStarted.Data; using GettingStarted.Models; using JetBrains.Annotations; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs index b26b82d27d..ab1e781560 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs index 4851336a9a..8c4411ab0e 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs index 36c772b29b..5d83153fe9 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs index 98b5051774..5a6dfe1106 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs index 0eaa59b1ca..be9d354f54 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs b/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs index cc59628fc6..2f01267d2b 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCoreExample.Models; using Microsoft.EntityFrameworkCore; diff --git a/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs b/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs index ddf19c5a43..e0fcbe9003 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.ComponentModel; using System.Threading; using System.Threading.Tasks; diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs b/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs index 4d7d3369fa..aa452e1d4d 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs b/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs index 03fb527c4b..087cccc599 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs index cc6341bdb2..bc8c5191d9 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs index 5f8687a064..28fbd94c3b 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCoreExample.Models diff --git a/src/Examples/JsonApiDotNetCoreExample/Program.cs b/src/Examples/JsonApiDotNetCoreExample/Program.cs index e185c3b4c2..029844ecc8 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Program.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/JsonApiDotNetCoreExample/Startup.cs b/src/Examples/JsonApiDotNetCoreExample/Startup.cs index f14c1df8ce..a5cc6d9f4d 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Startup.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Startup.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json.Serialization; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs index 6fc542cf1d..d74bdd1ea8 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs index 0316fbde1b..12b7511ad0 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/MultiDbContextExample/Data/DbContextA.cs b/src/Examples/MultiDbContextExample/Data/DbContextA.cs index cb6000e051..64194b2127 100644 --- a/src/Examples/MultiDbContextExample/Data/DbContextA.cs +++ b/src/Examples/MultiDbContextExample/Data/DbContextA.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using MultiDbContextExample.Models; diff --git a/src/Examples/MultiDbContextExample/Data/DbContextB.cs b/src/Examples/MultiDbContextExample/Data/DbContextB.cs index b3e4e6e47f..f644fb7b74 100644 --- a/src/Examples/MultiDbContextExample/Data/DbContextB.cs +++ b/src/Examples/MultiDbContextExample/Data/DbContextB.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using MultiDbContextExample.Models; diff --git a/src/Examples/MultiDbContextExample/Models/ResourceA.cs b/src/Examples/MultiDbContextExample/Models/ResourceA.cs index f536237f14..0b3ce45873 100644 --- a/src/Examples/MultiDbContextExample/Models/ResourceA.cs +++ b/src/Examples/MultiDbContextExample/Models/ResourceA.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/Examples/MultiDbContextExample/Models/ResourceB.cs b/src/Examples/MultiDbContextExample/Models/ResourceB.cs index 55a3d79a59..a595589e5a 100644 --- a/src/Examples/MultiDbContextExample/Models/ResourceB.cs +++ b/src/Examples/MultiDbContextExample/Models/ResourceB.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/Examples/MultiDbContextExample/Program.cs b/src/Examples/MultiDbContextExample/Program.cs index d5800d95e8..4ec0e37bfc 100644 --- a/src/Examples/MultiDbContextExample/Program.cs +++ b/src/Examples/MultiDbContextExample/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs b/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs index 820c78f241..448c290cc5 100644 --- a/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs +++ b/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs b/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs index 98156a7295..3ff8781d2e 100644 --- a/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs +++ b/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Startup.cs b/src/Examples/MultiDbContextExample/Startup.cs index 705bf8ef4c..216eb2cf66 100644 --- a/src/Examples/MultiDbContextExample/Startup.cs +++ b/src/Examples/MultiDbContextExample/Startup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; diff --git a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs index d50fa1183f..844d41189d 100644 --- a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs +++ b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs b/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs index 336951eec3..1c12914981 100644 --- a/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs +++ b/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using NoEntityFrameworkExample.Models; diff --git a/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs b/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs index 98aa8a9fd9..b183bc0e54 100644 --- a/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs +++ b/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/Examples/NoEntityFrameworkExample/Program.cs b/src/Examples/NoEntityFrameworkExample/Program.cs index 6653408dc7..d0f0310b96 100755 --- a/src/Examples/NoEntityFrameworkExample/Program.cs +++ b/src/Examples/NoEntityFrameworkExample/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs b/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs index 45c1b9a83a..26df89e999 100644 --- a/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs +++ b/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Data; diff --git a/src/Examples/NoEntityFrameworkExample/Startup.cs b/src/Examples/NoEntityFrameworkExample/Startup.cs index 14642d408f..5139ad91c9 100644 --- a/src/Examples/NoEntityFrameworkExample/Startup.cs +++ b/src/Examples/NoEntityFrameworkExample/Startup.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/ReportsExample/Controllers/ReportsController.cs b/src/Examples/ReportsExample/Controllers/ReportsController.cs index db1b73ec57..d7c0a07ed5 100644 --- a/src/Examples/ReportsExample/Controllers/ReportsController.cs +++ b/src/Examples/ReportsExample/Controllers/ReportsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/ReportsExample/Models/Report.cs b/src/Examples/ReportsExample/Models/Report.cs index ef4a360a22..8691f22a8e 100644 --- a/src/Examples/ReportsExample/Models/Report.cs +++ b/src/Examples/ReportsExample/Models/Report.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/Examples/ReportsExample/Models/ReportStatistics.cs b/src/Examples/ReportsExample/Models/ReportStatistics.cs index 53c2c2d2ee..3ed44772b2 100644 --- a/src/Examples/ReportsExample/Models/ReportStatistics.cs +++ b/src/Examples/ReportsExample/Models/ReportStatistics.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace ReportsExample.Models diff --git a/src/Examples/ReportsExample/Program.cs b/src/Examples/ReportsExample/Program.cs index 6356b0f52a..aef7d0e578 100644 --- a/src/Examples/ReportsExample/Program.cs +++ b/src/Examples/ReportsExample/Program.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/ReportsExample/Services/ReportService.cs b/src/Examples/ReportsExample/Services/ReportService.cs index 62c5dc22b9..cc9c3fae03 100644 --- a/src/Examples/ReportsExample/Services/ReportService.cs +++ b/src/Examples/ReportsExample/Services/ReportService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/Examples/ReportsExample/Startup.cs b/src/Examples/ReportsExample/Startup.cs index a030441258..4ae6472748 100644 --- a/src/Examples/ReportsExample/Startup.cs +++ b/src/Examples/ReportsExample/Startup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; diff --git a/src/JsonApiDotNetCore/ArgumentGuard.cs b/src/JsonApiDotNetCore/ArgumentGuard.cs index c9f9e2d6a7..fd15a9c6a7 100644 --- a/src/JsonApiDotNetCore/ArgumentGuard.cs +++ b/src/JsonApiDotNetCore/ArgumentGuard.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/ArrayFactory.cs b/src/JsonApiDotNetCore/ArrayFactory.cs index a33102cbdd..c9adab3125 100644 --- a/src/JsonApiDotNetCore/ArrayFactory.cs +++ b/src/JsonApiDotNetCore/ArrayFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + #pragma warning disable AV1008 // Class should not be static #pragma warning disable AV1130 // Return type in method signature should be a collection interface instead of a concrete type diff --git a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs index df87d1c546..3cad1973c7 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs index 3d30ebe089..5172d8921b 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs b/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs index eb61e41371..497f8135a1 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.AtomicOperations { /// diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs index 693bd6098b..2ec8c5b740 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.AtomicOperations.Processors; diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs index 839d0d6cb0..cf89fc2003 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs index 4eed23455d..c20e666de9 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs index f9b752381b..6a543c15e3 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs b/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs index 972440c4bc..a119e5d9ca 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Errors; diff --git a/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs b/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs index 5fd790a318..02e0cb23ba 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs index 75c327c0f2..d9203243af 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs b/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs index 68cfb752b2..a9c38b58eb 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs index be266286db..28dee098ed 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs index 775e896ebc..a629a67b4e 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs index 4a408f368e..7307804822 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs index 929ffe73a9..e33e8f0f54 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs index 2f7c10a3f7..9773515c1b 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs index 0f747a9dd0..f166b92633 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs index 4e5206054d..6c8849b4b4 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs index 6b51694260..52da2c6977 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs index 02ce98d21d..acecd39251 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs index 8dafc839a4..62fe465c08 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs index 48847f6ddb..99961c212a 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs index 74197f417f..e696ad11cc 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs index 92bd69942e..fea44221f3 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs index 151d91adfe..660ebb2540 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs b/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs index 8c2e150a23..7352c9f21b 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/CollectionConverter.cs b/src/JsonApiDotNetCore/CollectionConverter.cs index 1f403b4ccd..68c9b0d29b 100644 --- a/src/JsonApiDotNetCore/CollectionConverter.cs +++ b/src/JsonApiDotNetCore/CollectionConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/JsonApiDotNetCore/CollectionExtensions.cs b/src/JsonApiDotNetCore/CollectionExtensions.cs index 863b22d5fd..010f648298 100644 --- a/src/JsonApiDotNetCore/CollectionExtensions.cs +++ b/src/JsonApiDotNetCore/CollectionExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs b/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs index 740cbdac0f..8007020310 100644 --- a/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs +++ b/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Middleware; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; diff --git a/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs b/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs index 4a7aac4ec2..bf1850a8e8 100644 --- a/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs +++ b/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs b/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs index 53b84e36d1..170d448dd3 100644 --- a/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Microsoft.AspNetCore.Mvc; diff --git a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs index 6e8e2d981e..23bb88b336 100644 --- a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs +++ b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Data; using System.Text.Json; diff --git a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs index eee6e08d5a..6dc376fccc 100644 --- a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs b/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs index a3461cfdcf..9a05444d5d 100644 --- a/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs +++ b/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs b/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs index 5b6f479ba3..d7082459d1 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs b/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs index 07f15db8a6..9d561dad8b 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs index 322e2cd725..8344327369 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Data; using System.Text.Encodings.Web; diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs b/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs index 208167fa2b..fc90245381 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using JsonApiDotNetCore.Middleware; diff --git a/src/JsonApiDotNetCore/Configuration/PageNumber.cs b/src/JsonApiDotNetCore/Configuration/PageNumber.cs index 9f094a1423..257f187956 100644 --- a/src/JsonApiDotNetCore/Configuration/PageNumber.cs +++ b/src/JsonApiDotNetCore/Configuration/PageNumber.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Configuration/PageSize.cs b/src/JsonApiDotNetCore/Configuration/PageSize.cs index 4533461502..af71d3c279 100644 --- a/src/JsonApiDotNetCore/Configuration/PageSize.cs +++ b/src/JsonApiDotNetCore/Configuration/PageSize.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs b/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs index d673fe11a7..45bbbe9f42 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Configuration diff --git a/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs b/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs index 3eaa0d828d..ad6a0c01bd 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs index 1bcb2c0fc9..48b2ba5225 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs b/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs index 4e19bed130..0fe2a260a3 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs b/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs index d968c8eda7..7a9f6ab3ec 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Reflection; using System.Text.Json; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceType.cs b/src/JsonApiDotNetCore/Configuration/ResourceType.cs index d4d92290f7..873cc63ead 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceType.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceType.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs index 5fdbfb0e2d..932bdea361 100644 --- a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs +++ b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs b/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs index cdd6a65031..149e4338e2 100644 --- a/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs +++ b/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs index 47c54bf9a3..7266fbee23 100644 --- a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs +++ b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs index 3323ba13a5..11b4bd02e0 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs index 5cd68b2e6f..07bbec73ec 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs index b4c0fb7675..68db2d9aba 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs index c2534471f9..45393f9d77 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net.Http; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs index 93733d6885..818efaa4f6 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs index 29a84b386a..6ad64044ad 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs index 1d47890739..6eadafab59 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs index 463432c82c..c8908fdb22 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net.Http; using System.Threading; diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs index 2960b23447..19fdb101ea 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs index 0f7ae00488..24bafa80df 100644 --- a/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs index bae72fb615..9ae033e399 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index 3d06d695f8..3d1e2356c4 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs index 7e8e4956ac..e4cf8a4be0 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs index 05446ca2b1..558764c64e 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs b/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs index 49a935a7ef..dc27a0b534 100644 --- a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs +++ b/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.ModelBinding; diff --git a/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs index 2cfca080a1..17129f81d8 100644 --- a/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; diff --git a/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs index 5da5a33b01..2b9be7fc86 100644 --- a/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs b/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs index 47e64d8338..9f34cc5e46 100644 --- a/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs +++ b/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs index b56eeab962..7d69d6e961 100644 --- a/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; diff --git a/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs index 1739ed3e81..9d422d8ff5 100644 --- a/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs index 9e8abfe9e1..41502c3237 100644 --- a/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs index 5da473c38d..c4d9ec7e9f 100644 --- a/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs b/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs index 4fd42b2e30..7cdfe56337 100644 --- a/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs +++ b/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs @@ -1,3 +1,5 @@ +#nullable disable + #pragma warning disable AV1008 // Class should not be static namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs b/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs index 4a7c6b5e66..fa00da1ffa 100644 --- a/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs +++ b/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs b/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs index ebf9a2fadd..38428ed885 100644 --- a/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs +++ b/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs @@ -1,4 +1,6 @@ -using System.Net; +#nullable disable + +using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/FailedOperationException.cs b/src/JsonApiDotNetCore/Errors/FailedOperationException.cs index 4ae21ef469..faa9ec85c2 100644 --- a/src/JsonApiDotNetCore/Errors/FailedOperationException.cs +++ b/src/JsonApiDotNetCore/Errors/FailedOperationException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs b/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs index 9b2e46357c..520db772e4 100644 --- a/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs +++ b/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs b/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs index ae46c9bad5..2891fc3bcd 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs index 44066d430e..8795f98607 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs b/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs index fb02f2a5e4..f22dc5466c 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs b/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs index 949710d62a..5cd6710a1f 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs b/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs index a508a82ad2..e080506583 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/src/JsonApiDotNetCore/Errors/JsonApiException.cs b/src/JsonApiDotNetCore/Errors/JsonApiException.cs index ae2cbcdca0..c12ceb9645 100644 --- a/src/JsonApiDotNetCore/Errors/JsonApiException.cs +++ b/src/JsonApiDotNetCore/Errors/JsonApiException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs b/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs index 8dfa1bd842..69122c8477 100644 --- a/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs +++ b/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs @@ -1,4 +1,6 @@ -using System.Net; +#nullable disable + +using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs b/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs index 7afe5b04cc..9c6b1a5733 100644 --- a/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs +++ b/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Errors diff --git a/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs b/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs index 81e13baeda..462b83b35d 100644 --- a/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs +++ b/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs b/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs index 909f4a047d..de7ecdf066 100644 --- a/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs +++ b/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs b/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs index 07b5d0e25a..36cdb50e3e 100644 --- a/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs b/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs index a4edbc0d5f..06e630d43b 100644 --- a/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs +++ b/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs b/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs index 384289576d..d7140b0957 100644 --- a/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs b/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs index 50a05b70ff..84177b156e 100644 --- a/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs b/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs index 0cb1f9cecb..887a7e4980 100644 --- a/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs b/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs index 418acac662..a6995621d2 100644 --- a/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs +++ b/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs @@ -1,4 +1,6 @@ -using System.Net; +#nullable disable + +using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs b/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs index 34f3faafc4..1a118a9bd1 100644 --- a/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs +++ b/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs index efe5a54f00..b6d87e3969 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs index d82cbddeed..14854f2ae9 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs index 7a72874e5b..2de156a824 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Reflection; using System.Threading.Tasks; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/EndpointKind.cs b/src/JsonApiDotNetCore/Middleware/EndpointKind.cs index 6123aa09f9..134fff6ff5 100644 --- a/src/JsonApiDotNetCore/Middleware/EndpointKind.cs +++ b/src/JsonApiDotNetCore/Middleware/EndpointKind.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Middleware { public enum EndpointKind diff --git a/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs b/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs index 3d7630b9bf..985cf87a72 100644 --- a/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs +++ b/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs b/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs index 6bd345d99d..ceff524e9d 100644 --- a/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs +++ b/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using Microsoft.AspNetCore.Http; diff --git a/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs b/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs index 621aca493d..5f4e9c2d6c 100644 --- a/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs +++ b/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using Microsoft.AspNetCore.WebUtilities; diff --git a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs index c860204c52..f6e005fc14 100644 --- a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs +++ b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; #pragma warning disable AV1008 // Class should not be static diff --git a/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs b/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs index b77cf79a2a..79ea6d1084 100644 --- a/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs +++ b/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Http; diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs index 8e0f8b394e..602aeba13d 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs index 7ae6981c77..af0faaa136 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs index 4ad18fcf35..79e4e8b7f2 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs index 805a81aa17..19d828580b 100644 --- a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs +++ b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs b/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs index a962d8cfdd..bdbacded80 100644 --- a/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs +++ b/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs index 268c0a2697..f88c173569 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs index 725accb03f..139ab37911 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs index f3f7dfcf81..349c101e76 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs index d5db22efa6..e800e97a71 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.ApplicationModels; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs b/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs index d22904bebc..03714afe28 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using JsonApiDotNetCore.Serialization.Request; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs index ca65cdd7f2..69f4ac3a55 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Net; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs b/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs index 93d531dc58..6056e040f3 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using JsonApiDotNetCore.Serialization.Response; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs index 0c61b7ff38..517fd4bb9b 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs index 3b79c8811e..bbef85d9c5 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs b/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs index 2ed2dbab48..9bfd4abeec 100644 --- a/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs +++ b/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Reflection; using System.Runtime.CompilerServices; diff --git a/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs b/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs index aeec6c1cab..6e3154f75e 100644 --- a/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs +++ b/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Middleware { /// diff --git a/src/JsonApiDotNetCore/ObjectExtensions.cs b/src/JsonApiDotNetCore/ObjectExtensions.cs index 8657b64e96..538498aeef 100644 --- a/src/JsonApiDotNetCore/ObjectExtensions.cs +++ b/src/JsonApiDotNetCore/ObjectExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; #pragma warning disable AV1130 // Return type in method signature should be a collection interface instead of a concrete type diff --git a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs index e4f127b725..43686533a9 100644 --- a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs +++ b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Benchmarks")] diff --git a/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs b/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs index 5475baed85..2403696e7d 100644 --- a/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs +++ b/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Queries.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs index 3c049e86b4..42d28bef17 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs index ab06961738..d74051d1e5 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Humanizer; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs index fbe12f1b0c..de958f7d2b 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { public enum ComparisonOperator diff --git a/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs index 57163936f7..bedb5a0c30 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs index 1ed0ed1de0..6e6fc852a0 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs index 6d7990a16a..d494e12474 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs index 97f3bb5544..4c1e8d9d1d 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs index 974c4892de..9efb0b7d4b 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs index d1c097676b..a2672b91bb 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs index 648986fe18..b5ad900d6f 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs index 632e04af30..d0f0192b0a 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs index 019301e40c..7365fc3f95 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Expressions diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs index 30d77e8a5b..a9be545228 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs b/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs index 3514820f86..6ebf9fb916 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { public enum LogicalOperator diff --git a/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs index 0df64dbb44..04cc1cce7f 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text; using Humanizer; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs index 3ac97b46bc..64e350f5f9 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs index 1041be47dd..fc8ab5efc3 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs index d62ca621e0..fdec803648 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs index 3d8f2c5870..bfdd80223b 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs index 706d3d9e15..26c5aeca57 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs index 44d5311b19..7c61620a87 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq.Expressions; namespace JsonApiDotNetCore.Queries.Expressions diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs index e2049795f9..7e6733802c 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Immutable; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs index dad2958931..fc9a7ba9ee 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Expressions diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs index 7a6071e450..c8d9b8d4fa 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs index 9ebf5f0c2b..9ba6ffef44 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs index 502cd03976..804fc93326 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs index d84564ae9b..f00b2cc9bf 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs index 38f68df707..63a96e60aa 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs index bf96dad409..7372d57086 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs index 35aff8b711..95bd428a36 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs index 4f1bca8127..42f82f0563 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Text; diff --git a/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs b/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs index e51436b252..67d9727cdc 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Expressions { public enum TextMatchKind diff --git a/src/JsonApiDotNetCore/Queries/IPaginationContext.cs b/src/JsonApiDotNetCore/Queries/IPaginationContext.cs index fb249cfbec..d5dcc318a7 100644 --- a/src/JsonApiDotNetCore/Queries/IPaginationContext.cs +++ b/src/JsonApiDotNetCore/Queries/IPaginationContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; namespace JsonApiDotNetCore.Queries diff --git a/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs b/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs index c9a82a7b36..c56dea7959 100644 --- a/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs +++ b/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; namespace JsonApiDotNetCore.Queries diff --git a/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs b/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs index a6ef61605d..1756f409a7 100644 --- a/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs +++ b/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Queries.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs b/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs index 1e9202827b..98b67a2a03 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Queries.Expressions; namespace JsonApiDotNetCore.Queries.Internal diff --git a/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs b/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs index d7c924f066..31d773893b 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Queries.Expressions; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs b/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs index cb3ab1f2d3..fbf3e43548 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Immutable; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs index 5864c18d3e..2b24cb990a 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs index 390c1fe891..9d69aaa0e3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs index 1646c3bcb0..5d59adcf67 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs index 0bf32ff17e..20714577d3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; #pragma warning disable AV1008 // Class should not be static diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs index 980ec8450a..6989eeb689 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs index b33e01aaf3..ac5e0a7ff9 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs index 26010e3528..b952624fc1 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs index 7d9f848862..72c224d03e 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs index f050d9f7b0..a4af56886c 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs index 0d026c7d3d..1dab835c05 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs index 4b14f2d996..b018135668 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs index be8daf350c..648c9dd551 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs index bf867c2884..e47d2b6053 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Immutable; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs index c8c8623a67..c4dc21cdc0 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Internal.Parsing diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs index 3658c82f18..3b82043d17 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries.Internal.Parsing { public enum TokenKind diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs index 6df4be7495..5a2cdacd63 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs index 4dce446d7c..18a05852d7 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs index c1050a9d8a..8b936aaae7 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using Humanizer; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs index 6d555ed23e..77a93b3e0a 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs index 8fb8b96b2f..031a49f303 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq.Expressions; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs index 26e8059ca8..62e34d8673 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq.Expressions; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs index bdbff2bb19..af5ba41dbf 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs index ba2df82b58..9e1521e8ac 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs index d1412eee39..49ccd07fad 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs index 2fc9c773fc..0452d92b18 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs index 3b66d20903..cb854ebe36 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs index 41778636a9..cc7bf7db96 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs b/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs index b6759bdcae..13bdcc78e3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Queries/PaginationContext.cs b/src/JsonApiDotNetCore/Queries/PaginationContext.cs index beb760555c..54656f3d86 100644 --- a/src/JsonApiDotNetCore/Queries/PaginationContext.cs +++ b/src/JsonApiDotNetCore/Queries/PaginationContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Queries/QueryLayer.cs b/src/JsonApiDotNetCore/Queries/QueryLayer.cs index e8fa0e6cfa..c12b7b901f 100644 --- a/src/JsonApiDotNetCore/Queries/QueryLayer.cs +++ b/src/JsonApiDotNetCore/Queries/QueryLayer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Text; diff --git a/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs b/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs index d5203ff537..c6e888146e 100644 --- a/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs +++ b/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Queries { /// diff --git a/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs index 49caf84786..2039dd7f5b 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs index e348f3635c..4747acc83e 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs index c41f417435..32e8d82ab8 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs index 024ee564f2..772789d399 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Controllers.Annotations; using Microsoft.Extensions.Primitives; diff --git a/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs b/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs index 39c07ec036..4e763b8d17 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Controllers.Annotations; namespace JsonApiDotNetCore.QueryStrings diff --git a/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs b/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs index 52a5a5eace..bfefc9ab0d 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Http; namespace JsonApiDotNetCore.QueryStrings diff --git a/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs index baea3e2938..1d655baead 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs index 1fe5f4cb51..2232dd1a71 100644 --- a/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs index 7a307f1f40..28a25d39b1 100644 --- a/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs index 9cf8ede3dc..65a9a9248a 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs index 9bdf16851a..0080eb36f9 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs index d3cfaec888..59c2662758 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs index e54d9617b0..ffe1ebbb73 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs index 615bf8ced8..8845554f1b 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Queries.Expressions; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs index 28aabb53e5..cc57263aa8 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs index fef422d2ac..68454bf991 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.AspNetCore.Http; namespace JsonApiDotNetCore.QueryStrings.Internal diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs index 98994c4c6c..bd644b0af3 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs index c9583b5edf..b11ada6694 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs index 007cd8553f..762c4c0656 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs b/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs index 9c220686ac..74438c2005 100644 --- a/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs +++ b/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs b/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs index 80a1b85a77..25c845ecc5 100644 --- a/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs +++ b/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs b/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs index f80bb3833c..5ac890dae8 100644 --- a/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs +++ b/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs b/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs index 61dfcb388d..d7f2ace320 100644 --- a/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs +++ b/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs index f8c79d7a12..624ee223b8 100644 --- a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs b/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs index 0a38f2dfcc..2bb2604ec9 100644 --- a/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs +++ b/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.EntityFrameworkCore; namespace JsonApiDotNetCore.Repositories diff --git a/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs b/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs index e654d288b7..6bdcd62633 100644 --- a/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs +++ b/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Repositories diff --git a/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs index 438a9c9390..d38553730c 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs index 4f20bcaca1..578acd834d 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs b/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs index bf67a0a480..6bddd4d48b 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs index 9b92f951d1..28f058d509 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs b/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs index 975a26805c..e351809168 100644 --- a/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs +++ b/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs index 23461fc3dd..7ce775bc15 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs b/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs index 9eb93c9377..3e27a58936 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Resources.Annotations diff --git a/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs index 623e7eeeb2..bd6789dabc 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs index 166112baed..734ac65e4e 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs index e0ce2ecc47..5d8f6fde85 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs b/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs index d655a8b882..eacdbf7887 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCore.Resources.Annotations diff --git a/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs index 732da4c4fc..8ae1d45bc6 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Reflection; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs index 501d085d57..6935e49b2d 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs index 93efe49696..0e177608db 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Reflection; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs index f4d3a1ffc7..d8eb3f764f 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Resources/IIdentifiable.cs b/src/JsonApiDotNetCore/Resources/IIdentifiable.cs index fb377cf8de..3bcf809cac 100644 --- a/src/JsonApiDotNetCore/Resources/IIdentifiable.cs +++ b/src/JsonApiDotNetCore/Resources/IIdentifiable.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Resources { /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs b/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs index df16dc603f..b6abf1cf57 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Resources { /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs b/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs index fa79da4f2c..99cd2bf996 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; diff --git a/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs b/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs index c4b91365bd..ff8a5d74fc 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Resources/IResourceFactory.cs b/src/JsonApiDotNetCore/Resources/IResourceFactory.cs index 1e37304528..b51160cc92 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceFactory.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Resources/ITargetedFields.cs b/src/JsonApiDotNetCore/Resources/ITargetedFields.cs index 1498f96744..23f764c366 100644 --- a/src/JsonApiDotNetCore/Resources/ITargetedFields.cs +++ b/src/JsonApiDotNetCore/Resources/ITargetedFields.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Identifiable.cs b/src/JsonApiDotNetCore/Resources/Identifiable.cs index 5ca96dfb2b..4fa8eaf59b 100644 --- a/src/JsonApiDotNetCore/Resources/Identifiable.cs +++ b/src/JsonApiDotNetCore/Resources/Identifiable.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using JsonApiDotNetCore.Resources.Internal; diff --git a/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs b/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs index 5cffe890c2..97fd7f9f3e 100644 --- a/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs +++ b/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs b/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs index d9456e5014..683d3a7bb0 100644 --- a/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs +++ b/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs b/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs index 826b375bd3..5236ddf179 100644 --- a/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs +++ b/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs b/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs index 21a2f6cccf..892b726ba0 100644 --- a/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs +++ b/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Resources/OperationContainer.cs b/src/JsonApiDotNetCore/Resources/OperationContainer.cs index ada612de59..a61553edce 100644 --- a/src/JsonApiDotNetCore/Resources/OperationContainer.cs +++ b/src/JsonApiDotNetCore/Resources/OperationContainer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Middleware; diff --git a/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs b/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs index 1f5d412252..d2390a2ab4 100644 --- a/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs +++ b/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs b/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs index 1158df6183..a3e3980ac9 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs b/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs index b5982ceb4d..db308e33a9 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Resources/ResourceFactory.cs b/src/JsonApiDotNetCore/Resources/ResourceFactory.cs index dd5a03306e..400175b046 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceFactory.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Resources/TargetedFields.cs b/src/JsonApiDotNetCore/Resources/TargetedFields.cs index 4e2d571e5c..c904c6ec61 100644 --- a/src/JsonApiDotNetCore/Resources/TargetedFields.cs +++ b/src/JsonApiDotNetCore/Resources/TargetedFields.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs index 51f19ac274..0dc8ac31ed 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json; using System.Text.Json.Serialization; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs index bd6a5ea9e5..36d4018454 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs index 0ca65c237e..14a97b4c65 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs index 65d8f36d12..0f0668c6dc 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs index d80fcee5bd..c7e0e6aacb 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs index c016299024..ec9edef235 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; namespace JsonApiDotNetCore.Serialization.Objects diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs index 27c3f58c44..6ed97b1cd4 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs index bff24ad299..452606e01d 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs index 14f67a5247..38059475a0 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/Document.cs b/src/JsonApiDotNetCore/Serialization/Objects/Document.cs index 995b2070e8..64dadf11eb 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/Document.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/Document.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs index 3b03f68cda..8ad40e801a 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs index 38326d2ae5..28ad10815f 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs index ebd8ee49bd..86aa9dd1a2 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs b/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs index ff936f4d46..1c4510bedb 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCore.Serialization.Objects { public interface IResourceIdentity diff --git a/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs index 11b214b434..5ee074b8d0 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs index b66f33daa8..e7d9056d3c 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs index fb4296d70d..c92a960c19 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs index de4104d28a..227b9ee094 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs index 7ab1f6861e..164318ebf5 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs index f418a63ed1..280c4a4fca 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs b/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs index c2a6c23876..ad12eacd60 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Text.Json; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs index 0817e56d8a..d61107787c 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs index 317404fafe..8d4f30b891 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs index 3b590f9df4..f51bfef56c 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs index 1b85f7021b..f2eea0242b 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs index 2dffca2653..57c67b3444 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs index eea4c7849b..b13bf0b9a5 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs index 0c283e9bf0..eeb2576515 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs index 2a0080cc4b..b200e442cd 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs index 5fb2c1d680..4ee1f946ee 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs index bd4a12b2de..81208557cd 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs index 3f13b25685..f09ea5f84c 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs index de39fa6c91..57fc24747b 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs index da6222e166..9cf8eb70e8 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs index cc4da5bc5e..b887b0ef83 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs index e7dd737cfb..b87b50dac5 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs index 38a841d45d..d2d5fbb79f 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs index 3105143908..4430200842 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs index 8245444e08..274189ef54 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs index ebdd76945a..c60494e22a 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs index ad5aebac9e..76c176b128 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs index 4c2d34b28d..8927087cc5 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs index 2730bcbf9b..1e59c68f2c 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.AtomicOperations; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs index f1747fffc8..9babd21699 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs index b0e59b6afd..d7ab594356 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs index fc5cbfc3e4..268fcf15eb 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs index e61e8a6d64..57f2312369 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs index 601212ec93..58d4b53e0e 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs index 822cf215e7..07cb32659c 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Request/IJsonApiReader.cs b/src/JsonApiDotNetCore/Serialization/Request/IJsonApiReader.cs index aab4712844..c6f83d3829 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/IJsonApiReader.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/IJsonApiReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; diff --git a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs index 96831014c3..7a45cc1895 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Text; diff --git a/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs b/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs index 5c448613a6..e562ffbe01 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text.Json; diff --git a/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs b/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs index c9922e855b..2c0fbb6eaf 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs index f2a78adb65..dcdce0bbb8 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.Net.Http.Headers; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs b/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs index a06e4b76c3..809f984741 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs index 9835bf5de3..c0a75b4220 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs index 5fc5070129..7a195121b5 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs @@ -1,3 +1,5 @@ +#nullable disable + using Microsoft.Net.Http.Headers; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs index 7b18e7db19..ae5da11f20 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs b/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs index e8c0e6dab4..727faf6dd2 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; diff --git a/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs index ce3e027410..6f9336aed5 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs index c94b0150da..b82a8f8875 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs b/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs index ca13ceaad2..95c6b9ac20 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs b/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs index 960d541cd4..d31af6db44 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs b/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs index 57d33276a1..d978ef66c1 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.IO; diff --git a/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs index c6103bb6dd..2536ae390e 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs index 265154cca4..924d1d402a 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs index 5137f62716..0cc6c6fb78 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs b/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs index df19cb6f70..755ee2fb67 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs b/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs index e93b294a22..80db52b92a 100644 --- a/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs +++ b/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs b/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs index bc0ae069ff..524f8697b9 100644 --- a/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/ICreateService.cs b/src/JsonApiDotNetCore/Services/ICreateService.cs index a030622f97..43fc45e4a2 100644 --- a/src/JsonApiDotNetCore/Services/ICreateService.cs +++ b/src/JsonApiDotNetCore/Services/ICreateService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IDeleteService.cs b/src/JsonApiDotNetCore/Services/IDeleteService.cs index a509f10caa..6e920e652e 100644 --- a/src/JsonApiDotNetCore/Services/IDeleteService.cs +++ b/src/JsonApiDotNetCore/Services/IDeleteService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IGetAllService.cs b/src/JsonApiDotNetCore/Services/IGetAllService.cs index a81caadd80..235ce108e0 100644 --- a/src/JsonApiDotNetCore/Services/IGetAllService.cs +++ b/src/JsonApiDotNetCore/Services/IGetAllService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IGetByIdService.cs b/src/JsonApiDotNetCore/Services/IGetByIdService.cs index 3d942e15ce..b4dcc9963f 100644 --- a/src/JsonApiDotNetCore/Services/IGetByIdService.cs +++ b/src/JsonApiDotNetCore/Services/IGetByIdService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs b/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs index b8305105ec..6c127a8792 100644 --- a/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs b/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs index a1ebbc5c75..2300717552 100644 --- a/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs +++ b/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs b/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs index 923753ba44..4062d26625 100644 --- a/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IResourceCommandService.cs b/src/JsonApiDotNetCore/Services/IResourceCommandService.cs index 06ad5af8ca..ea407bbd52 100644 --- a/src/JsonApiDotNetCore/Services/IResourceCommandService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceCommandService.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/IResourceQueryService.cs b/src/JsonApiDotNetCore/Services/IResourceQueryService.cs index 55b210a7cc..1d687dec54 100644 --- a/src/JsonApiDotNetCore/Services/IResourceQueryService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceQueryService.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/IResourceService.cs b/src/JsonApiDotNetCore/Services/IResourceService.cs index d6910c93b8..6e344e9306 100644 --- a/src/JsonApiDotNetCore/Services/IResourceService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceService.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs b/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs index bf7f377dba..90812f8c11 100644 --- a/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IUpdateService.cs b/src/JsonApiDotNetCore/Services/IUpdateService.cs index 068a6c9b50..3c4fab60a0 100644 --- a/src/JsonApiDotNetCore/Services/IUpdateService.cs +++ b/src/JsonApiDotNetCore/Services/IUpdateService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs index 798d6c8423..7b5a3d25aa 100644 --- a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs +++ b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections; using System.Collections.Generic; diff --git a/src/JsonApiDotNetCore/TypeExtensions.cs b/src/JsonApiDotNetCore/TypeExtensions.cs index 50514f3128..60e313b438 100644 --- a/src/JsonApiDotNetCore/TypeExtensions.cs +++ b/src/JsonApiDotNetCore/TypeExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; diff --git a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs index 649f8b3f03..e6ae057aff 100644 --- a/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs +++ b/test/DiscoveryTests/ServiceDiscoveryFacadeTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using FluentAssertions; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; diff --git a/test/DiscoveryTests/TestResource.cs b/test/DiscoveryTests/TestResource.cs index 187e018176..957104efca 100644 --- a/test/DiscoveryTests/TestResource.cs +++ b/test/DiscoveryTests/TestResource.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/DiscoveryTests/TestResourceDefinition.cs b/test/DiscoveryTests/TestResourceDefinition.cs index 318a36642b..e6bd39d94b 100644 --- a/test/DiscoveryTests/TestResourceDefinition.cs +++ b/test/DiscoveryTests/TestResourceDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/test/DiscoveryTests/TestResourceRepository.cs b/test/DiscoveryTests/TestResourceRepository.cs index 00644e14d7..eeeec3e5de 100644 --- a/test/DiscoveryTests/TestResourceRepository.cs +++ b/test/DiscoveryTests/TestResourceRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/test/DiscoveryTests/TestResourceService.cs b/test/DiscoveryTests/TestResourceService.cs index f308b403eb..26d4d439f2 100644 --- a/test/DiscoveryTests/TestResourceService.cs +++ b/test/DiscoveryTests/TestResourceService.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/ArchiveTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/ArchiveTests.cs index 2634ffae2a..154c203e75 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/ArchiveTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/ArchiveTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastComment.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastComment.cs index 82f658ea8a..19d36270c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastComment.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastComment.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs index 8cfbb4cdbf..9ffcaafcfe 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcast.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcast.cs index 5304c6135f..a1a540cfc1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcast.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcast.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs index 88dc9dbf43..ba0ac5eb48 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs index bd3b9832f6..ebef1678b5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs index 9566f3b424..454564e81a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionFakers.cs index 84f7be5288..360a105296 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetwork.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetwork.cs index cdf0b64195..ecd4d13f9d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetwork.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetwork.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs index 3c9c89dbd0..dcf1dc3c3c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStation.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStation.cs index 2c6a73307c..cbfed17cee 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStation.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStation.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs index aef39f7a94..a957641ee4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs index d00cda4a39..04cef8087c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/AtomicConstrainedOperationsControllerTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs index c0b8319fac..4e61e01d42 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs index ad9ab8197d..3e8d8308e2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs index 1574e20095..8772d90886 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithClientGeneratedIdTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs index c3952cf1c6..0eec1bd9ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs index 51c9dc27c9..a37bb0c6f0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Creating/AtomicCreateResourceWithToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs index 5eef754388..f09c4bdfea 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Deleting/AtomicDeleteResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ImplicitlyChangingTextLanguageDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ImplicitlyChangingTextLanguageDefinition.cs index 3f5aadc2b3..0d12762c35 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ImplicitlyChangingTextLanguageDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ImplicitlyChangingTextLanguageDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs index fb3246013a..a62eb7a622 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicAbsoluteLinksTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs index 176b7162dc..e1249b8ca6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Links/AtomicRelativeLinksWithNamespaceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs index a683635358..0060e45529 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LocalIds/AtomicLocalIdTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Lyric.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Lyric.cs index 84b9a2c108..5f1ccc10e4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Lyric.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Lyric.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs index 12d83708d9..9b61e09a67 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs index a13c92eb2c..2b651e1257 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResourceMetaTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Text.Json; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMeta.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMeta.cs index a1f67e0bb2..3927f53373 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMeta.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMeta.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Serialization.Response; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs index e1469b3454..662b5adfe8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/AtomicResponseMetaTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/MusicTrackMetaDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/MusicTrackMetaDefinition.cs index b2b9ae37fc..fab716c619 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/MusicTrackMetaDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/MusicTrackMetaDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/TextLanguageMetaDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/TextLanguageMetaDefinition.cs index 28a0322e91..336cbb8223 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/TextLanguageMetaDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Meta/TextLanguageMetaDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicLoggingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicLoggingTests.cs index eb3bae022b..96fdb0b4c6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicLoggingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicLoggingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs index 0b61701084..402f33df39 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicRequestBodyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicSerializationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicSerializationTests.cs index f034fb9411..a8adc90bc0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicSerializationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/AtomicSerializationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs index 199f91f6ae..6096d6d45a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Mixed/MaximumOperationsPerRequestTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs index 39b43ecf01..c8a4d1b69d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTrack.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTrack.cs index 5cca1995b5..8402525aed 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTrack.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTrack.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs index c7c17f0c43..7a4d0086ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs index 851a0eceb2..388b9e4de3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs index 6c62dfaa0f..f95aad4803 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsFakers.cs index 1632eb6af8..1b57a476bd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Globalization; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Performer.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Performer.cs index 99485daa63..8801b5d5a2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Performer.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Performer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs index 79921bc122..9ebefcbaf2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Playlist.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Playlist.cs index c63467b3ec..e8086a39c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Playlist.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Playlist.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs index e5da241908..1659a78c1b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs index cd63f41dd1..01dac35107 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/AtomicQueryStringTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/MusicTrackReleaseDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/MusicTrackReleaseDefinition.cs index 7544515cbc..7cd295ecd6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/MusicTrackReleaseDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/QueryStrings/MusicTrackReleaseDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs index a2fff83748..65f6e0223e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompany.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompany.cs index 3a4611cbeb..765bbeecb7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompany.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompany.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/AtomicSerializationResourceDefinitionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/AtomicSerializationResourceDefinitionTests.cs index fbde96e586..e0d8f5e0d5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/AtomicSerializationResourceDefinitionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/AtomicSerializationResourceDefinitionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/RecordCompanyDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/RecordCompanyDefinition.cs index fed5e96b21..ff26482aaf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/RecordCompanyDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/Serialization/RecordCompanyDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/AtomicSparseFieldSetResourceDefinitionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/AtomicSparseFieldSetResourceDefinitionTests.cs index 4c6df1fc48..7bd5f7130b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/AtomicSparseFieldSetResourceDefinitionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/AtomicSparseFieldSetResourceDefinitionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricPermissionProvider.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricPermissionProvider.cs index 070ced4646..5c8967db75 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricPermissionProvider.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricPermissionProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations.ResourceDefinitions.SparseFieldSets { public sealed class LyricPermissionProvider diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricTextDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricTextDefinition.cs index 094338a329..ea824fedc5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricTextDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ResourceDefinitions/SparseFieldSets/LyricTextDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Queries.Expressions; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguage.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguage.cs index d78ddd55a0..2699ee90c0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguage.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguage.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs index 6da4f35d38..7f7b8ee3cd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs index 542a6971b3..ee39ffb8b0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicRollbackTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs index 245af3c761..d7882ba4bc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/AtomicTransactionConsistencyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs index 2808f95c28..4181197bdf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/LyricRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/LyricRepository.cs index fd9dd6afa3..df78b5f656 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/LyricRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/LyricRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/MusicTrackRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/MusicTrackRepository.cs index b6268ee068..9659397c7f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/MusicTrackRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/MusicTrackRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs index da6f3c9539..0a273dff81 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs index c234c09182..2b77a58957 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicAddToToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs index 95840ff95d..c16d611175 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicRemoveFromToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs index c7b6972438..e73eeda6b4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicReplaceToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs index 30640ad32a..3f19724d74 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Relationships/AtomicUpdateToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs index 3e8e8f9740..f41201e4b3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicReplaceToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs index f3892baa47..3cfc464ad7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs index 1ec00d4b48..eeb5beb547 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Updating/Resources/AtomicUpdateToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Car.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Car.cs index 74ebc3a865..a4c13d5d57 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Car.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Car.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.ComponentModel.DataAnnotations.Schema; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs index 6f0543fd2f..ec784cb5f8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarExpressionRewriter.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarExpressionRewriter.cs index 392d71703f..c52f5e40cf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarExpressionRewriter.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarExpressionRewriter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs index ad0dbb18ce..9fa0da7a8e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs index 62418ba2c2..b6f91ce7a8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs index 70ba5c4539..e6e6afbc82 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeKeyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Dealership.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Dealership.cs index 2c6d312ecd..e535e07290 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Dealership.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Dealership.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs index 8c108f0396..35643c8d10 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Engine.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Engine.cs index dd4f38a97f..e04af2665e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Engine.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/Engine.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs index aa0a08c48d..d22c23b954 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs index cca76a2e53..88298ac18b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/AcceptHeaderTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs index 1ae336c663..ee9e5d3817 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/ContentTypeHeaderTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs index 9d2a3df6f3..6fe7ba91a5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs index f690f676c4..2c24e37a7e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/Policy.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/Policy.cs index e92f0978a9..fd43bb489e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/Policy.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/Policy.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs index 8fafc120b7..0b30c85b3f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs index b678e21fde..5c5d56c67e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs index bb7fe9fe33..ed2bb03eee 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/Toothbrush.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/Toothbrush.cs index 674513f910..46321e7682 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/Toothbrush.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/Toothbrush.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs index 5795f074c5..47f9b47027 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs index f49c18ad9d..883e4731eb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/ApiControllerAttributeTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Civilian.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Civilian.cs index 046220d59e..efb9978de8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Civilian.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Civilian.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs index 562b778669..c3e72e1c0b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs index c3e3b9063d..242b0487cf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteFakers.cs index 6d32e44da8..76d3f8cde1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs index 05b7c0214d..1ab630208c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Town.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Town.cs index 1f586d0521..cb697723e1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Town.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/Town.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs index b9d63cd03f..559f181de1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Building.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Building.cs index 17abe93afc..8a5303abb7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Building.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Building.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingRepository.cs index a822baebd2..1411b63d89 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs index 85aafbfb22..7ca155d8b4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/City.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/City.cs index fafa1b85d5..eb2989cd6f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/City.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/City.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Door.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Door.cs index 73b50af911..e9197622e3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Door.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Door.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs index bc9e95c9e9..678390ad52 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingFakers.cs index 608ae1c034..a7fb6a9bab 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs index 0e0482dbce..8311b88cd8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/State.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/State.cs index 7e63c968eb..a639a42e23 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/State.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/State.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs index 5187a1a061..c66f00b23d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Street.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Street.cs index 1910b8b773..bfa2d7bae3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Street.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Street.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs index 828ffa47af..469601ed85 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Window.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Window.cs index 2e447e5d59..8c11c5df2f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Window.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/Window.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/AlternateExceptionHandler.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/AlternateExceptionHandler.cs index 0ccbcf7947..8438eab2c8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/AlternateExceptionHandler.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/AlternateExceptionHandler.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Configuration; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticle.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticle.cs index 244a0dec5a..3a2a21f68d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticle.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticle.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleIsNoLongerAvailableException.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleIsNoLongerAvailableException.cs index 78260204d7..833b47a512 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleIsNoLongerAvailableException.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleIsNoLongerAvailableException.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using JsonApiDotNetCore.Errors; using JsonApiDotNetCore.Serialization.Objects; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleService.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleService.cs index ce66e0575f..27c24f927f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleService.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticleService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs index 9841432bd6..36f7e15739 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs index ed118f4862..ae05caac44 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs index a7dcd3329a..6dc3becca4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ExceptionHandlerTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticle.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticle.cs index d0a3ce819a..0b86c56447 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticle.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticle.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.ComponentModel.DataAnnotations.Schema; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs index 4c519bea9b..3d48b6d767 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs index 07496253a4..5b96e1be2b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGallery.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGallery.cs index 856551aacf..5b60f76bed 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGallery.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGallery.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs index 19077c24a2..47a3c951e5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingFakers.cs index 027ba2d61e..581b614b49 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingStartup.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingStartup.cs index 07ff57f515..bf35aba8fc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingStartup.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingTests.cs index 02073c4bdf..e3b5b23f4c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/Painting.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/Painting.cs index bc6820ddbd..2debe85a1f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/Painting.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/Painting.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs index 76b222eceb..ea973ce4b3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccount.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccount.cs index 2b1b713ecf..473c05572a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccount.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccount.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs index 03cdf37d67..ef8ab5f48b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Services; using Microsoft.Extensions.Logging; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCard.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCard.cs index bd6f12ca27..310c739c5d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCard.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCard.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs index e023036a82..b499b05303 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Services; using Microsoft.Extensions.Logging; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs index 4d7c5b64ea..dcfdd65417 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Globalization; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs index 8c81bee08b..cd90aab39e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/IdObfuscationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiable.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiable.cs index 41bf98c51c..02a096c8fe 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiable.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiable.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs index 245e565359..e94ca1e38a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs index a4af915fc5..bf71249024 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationFakers.cs index 3b82da0e5d..d9dc342629 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs index 627d044ba2..18ce9458f1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs index 5e819e5ce6..b4ed7c9e88 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs index bbf49d0b73..8b646394a1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs index b427470fd2..2a48a98f53 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs index e0accf3621..1ff01da705 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFile.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFile.cs index 16ed4b6925..4419bfe3e5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFile.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFile.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs index ccc70687fd..db91d37299 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/Workflow.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/Workflow.cs index 127d66355a..d61e5b36a3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/Workflow.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/Workflow.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs index 2eb55a784d..0a9fbe796f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDefinition.cs index 912bd9c9ac..336c8d07e6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowStage.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowStage.cs index feea8f6748..2082f1ac21 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowStage.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowStage.cs @@ -1,4 +1,6 @@ -namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.RequestBody +#nullable disable + +namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.RequestBody { public enum WorkflowStage { diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowTests.cs index d3cc69efb6..655c918229 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs index 737cfc2a08..882f02ad99 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs index 7f03363f30..9f507f252f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithNamespaceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs index 26d5dcc46a..d71824846c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/AbsoluteLinksWithoutNamespaceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinkInclusionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinkInclusionTests.cs index e7aee555c3..59eea22448 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinkInclusionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinkInclusionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs index e672034fce..76a4a8202c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksFakers.cs index dfe263c43b..a80651a938 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/Photo.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/Photo.cs index b3ef35a541..44e4591565 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/Photo.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/Photo.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbum.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbum.cs index 89d79a3353..4b5b9dcd2a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbum.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbum.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs index 065d14432c..05ec748f37 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocation.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocation.cs index ad28db953d..3ac71b09c3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocation.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocation.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs index 9e63f1d4f3..0b8366d676 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs index 5029d96932..95baaa379d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs index effa2b0d8c..99e9410ad2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithNamespaceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs index 6256adf66d..3c4cd94247 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/RelativeLinksWithoutNamespaceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs index 670b97dcbc..3b3faef94a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs index 9255ee4ab4..825dd30456 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntry.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntry.cs index 958787ea34..aed5c770b7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntry.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntry.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditFakers.cs index ff8fc1b2a8..b3548dbbd6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/LoggingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/LoggingTests.cs index d9858db4f3..d1359e91c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/LoggingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/LoggingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs index 38d2cdd749..9bb013a3a2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamily.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamily.cs index 4728385036..4da8b3f98a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamily.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamily.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResourceMetaTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResourceMetaTests.cs index fbd9892f9a..064eb06409 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResourceMetaTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResourceMetaTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResponseMetaTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResponseMetaTests.cs index ed5e3da83f..1a77cae70f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResponseMetaTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ResponseMetaTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs index 0db9f2cc95..9bac1c7c76 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportFakers.cs index d20016a8d6..81cf3cda43 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportResponseMeta.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportResponseMeta.cs index 1f7eee1262..9bc2a5b973 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportResponseMeta.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportResponseMeta.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Serialization.Response; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicket.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicket.cs index 1691f4371a..2bf4deadcf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicket.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicket.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketDefinition.cs index 234a9049de..e4c8e335e5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs index bfaac2b81e..87063a0bca 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/TopLevelCountTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/TopLevelCountTests.cs index a449e1799b..893347f091 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/TopLevelCountTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/TopLevelCountTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Text.Json; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainFakers.cs index 8f8a9168db..ba47474371 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroup.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroup.cs index 1d7b797884..b58836cb4e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroup.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroup.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs index a175e8773e..e4f9b951ff 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUser.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUser.cs index a9bfd19c15..ec9ea38f1e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUser.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUser.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs index 1908da2667..78e3c435c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs index f2ab748564..b3d7e6c5d7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetGroupDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetGroupDefinition.cs index e8abb064dd..969fa6ceab 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetGroupDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetGroupDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.Group.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.Group.cs index bf762c857b..0092e674ad 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.Group.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.Group.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.User.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.User.cs index fe40df6188..8c502f0403 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.User.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.User.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.cs index 391ff96781..f04def7644 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetUserDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetUserDefinition.cs index aaa5414f35..85306b6bfb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetUserDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetUserDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/MessageBroker.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/MessageBroker.cs index 1fbf64df46..67872ace75 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/MessageBroker.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/MessageBroker.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupCreatedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupCreatedContent.cs index 11541b5133..b1d0fe7881 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupCreatedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupCreatedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupDeletedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupDeletedContent.cs index d3bb447513..36114358e2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupDeletedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupDeletedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupRenamedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupRenamedContent.cs index 21044b4bcf..36a1ca5265 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupRenamedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/GroupRenamedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/IMessageContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/IMessageContent.cs index 74fc43ab80..24b48cb173 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/IMessageContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/IMessageContent.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices.Messages { public interface IMessageContent diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/OutgoingMessage.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/OutgoingMessage.cs index fccf23a8ef..994c9b66a0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/OutgoingMessage.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/OutgoingMessage.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserAddedToGroupContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserAddedToGroupContent.cs index 0dd40a8ecc..7c319cb6df 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserAddedToGroupContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserAddedToGroupContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserCreatedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserCreatedContent.cs index eff26c683f..2cae73424f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserCreatedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserCreatedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDeletedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDeletedContent.cs index d48fd1dedd..aae6036e6a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDeletedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDeletedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDisplayNameChangedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDisplayNameChangedContent.cs index d9f00f533a..377eb84afd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDisplayNameChangedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserDisplayNameChangedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserLoginNameChangedContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserLoginNameChangedContent.cs index 56015fbe13..0ab8749567 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserLoginNameChangedContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserLoginNameChangedContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserMovedToGroupContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserMovedToGroupContent.cs index 29ed680283..e887f6efa2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserMovedToGroupContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserMovedToGroupContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserRemovedFromGroupContent.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserRemovedFromGroupContent.cs index 8f2599e8ae..215103c037 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserRemovedFromGroupContent.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/Messages/UserRemovedFromGroupContent.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingGroupDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingGroupDefinition.cs index 7c85223bd2..69f9329529 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingGroupDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingGroupDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingUserDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingUserDefinition.cs index bea8286624..9fa64b67fd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingUserDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/MessagingUserDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs index 42e96e1d00..e10dd9ab1d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCoreTests.IntegrationTests.Microservices.Messages; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxGroupDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxGroupDefinition.cs index 19fa2e72f6..a334674db8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxGroupDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxGroupDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.Group.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.Group.cs index eda25094b2..31d311e9a6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.Group.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.Group.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.User.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.User.cs index 219da42053..dfc5992465 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.User.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.User.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.cs index 68af373b9d..3d024b1c9f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxUserDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxUserDefinition.cs index 82d02736b2..9c649251ab 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxUserDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxUserDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/IHasTenant.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/IHasTenant.cs index a936cf9de1..f3e367edd5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/IHasTenant.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/IHasTenant.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/ITenantProvider.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/ITenantProvider.cs index d3bef58692..160caf0033 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/ITenantProvider.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/ITenantProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace JsonApiDotNetCoreTests.IntegrationTests.MultiTenancy diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs index fed46351e1..0093ac784d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyFakers.cs index 669ad84200..98f20a4303 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyTests.cs index 02de41e5dd..f993a85751 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenantResourceService.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenantResourceService.cs index eb67a5f690..dc58ea3729 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenantResourceService.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenantResourceService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/RouteTenantProvider.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/RouteTenantProvider.cs index e373e1bcb6..f0738dc69b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/RouteTenantProvider.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/RouteTenantProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using Microsoft.AspNetCore.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProduct.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProduct.cs index 4e852aa772..4544b07c72 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProduct.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProduct.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs index 75297898b1..e099c0e68f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShop.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShop.cs index 04e87b939f..e53b0c9f7a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShop.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShop.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs index 0758f91554..ad50a657ab 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoard.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoard.cs index 9dcd5091f7..35e01ea643 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoard.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoard.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs index 87256faa2e..f4202962d1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/JsonKebabCaseNamingPolicy.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/JsonKebabCaseNamingPolicy.cs index 1c50a67fb8..406aeccdf6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/JsonKebabCaseNamingPolicy.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/JsonKebabCaseNamingPolicy.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Text; using System.Text.Json; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingConventionStartup.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingConventionStartup.cs index 952ffd7a14..e62a9faccf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingConventionStartup.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingConventionStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingTests.cs index de91ad49fb..8b957a6ba5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/KebabCasingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingConventionStartup.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingConventionStartup.cs index 65deafe3bc..f3d153f156 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingConventionStartup.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingConventionStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingTests.cs index d1c511bda9..89a1b5d595 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/PascalCasingTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs index c250e90f22..f08055f81e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingFakers.cs index 7733a120b8..b822fcfc20 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPool.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPool.cs index e4c8e82faf..555e707aaa 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPool.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPool.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs index 2de9b97e03..2c64cc9716 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/WaterSlide.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/WaterSlide.cs index 7c436bb5e4..0e80e53e33 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/WaterSlide.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/WaterSlide.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs index 3f108548ac..47599d1ad3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiControllerTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiControllerTests.cs index 1b6fa12d8f..cd794974bf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiControllerTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiControllerTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Net.Http.Headers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs index 5fb6d1d42e..25d58d67e9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/AccountPreferences.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/AccountPreferences.cs index 17b0d478e8..2936dc0b4a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/AccountPreferences.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/AccountPreferences.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Appointment.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Appointment.cs index 99c28d8649..25633b9a19 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Appointment.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Appointment.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Blog.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Blog.cs index ff9c6ae459..886e4aabd0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Blog.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Blog.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPost.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPost.cs index 0916eb2a1d..f700cdf5e6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPost.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPost.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs index 2a2ee3119a..35a2d44abc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs index 51d4dfeb13..e8362b5a0d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Calendar.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Calendar.cs index cca8b961b8..64609c931c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Calendar.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Calendar.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs index 4edc4c8717..4ba6c962bf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Comment.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Comment.cs index b2568b2e8f..a7a76a8bc0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Comment.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Comment.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs index 03fe435b7a..4c5284df7b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs index f021dd27e7..9612b76aed 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDataTypeTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs index 26c59823cf..dde5e97ff6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs index 807f104a15..64f2b7957b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDepthTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs index 842a26b5f0..f2128a42fe 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterOperatorTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs index cc6a6cc372..ddf0ce3443 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs index d9188a1dfe..4d724a4c37 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResource.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs index 9bd506f13f..aaf1bc8e85 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs index d6efa22782..fad601350f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Includes/IncludeTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Label.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Label.cs index cd1d2c5142..b80a8e9329 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Label.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Label.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LabelColor.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LabelColor.cs index 5c888227e7..c404f2792f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LabelColor.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LabelColor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LoginAttempt.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LoginAttempt.cs index dcdb2bae95..bfefb7e54d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LoginAttempt.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/LoginAttempt.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs index 5c5eb11f6d..685e95d8ad 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithTotalCountTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs index 89ebae123e..578c1f5e01 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/PaginationWithoutTotalCountTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs index 6186df580e..4036d29b98 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs index 6d10840d7f..9a4ba247fb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Pagination/RangeValidationWithMaximumTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs index af11134b1c..e481eb0b43 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringFakers.cs index 54bf83fb01..c5122e5f16 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringTests.cs index eae4e173f3..103337a16b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SerializerIgnoreConditionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SerializerIgnoreConditionTests.cs index e8d790446c..28b2af9ea1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SerializerIgnoreConditionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SerializerIgnoreConditionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs index c719961d58..ec2f1b3590 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Sorting/SortTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResourceCaptureStore.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResourceCaptureStore.cs index 8a94831480..96620908fb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResourceCaptureStore.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResourceCaptureStore.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs index 55f8f7a0b0..5c077783f2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs index 083dcf8e4f..16166e2dd2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/SparseFieldSetTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccount.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccount.cs index 3f9f89487f..5c245976bd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccount.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccount.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs index e765cfa10c..55550c5f10 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs index d66a02f5e4..3e5e2726ef 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs index 1f438e7eb8..3ee3117d57 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithClientGeneratedIdTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs index 037ef0cb92..582acf4d06 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs index fd7472958c..b174da1421 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Creating/CreateResourceWithToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs index 4db422d5e8..7e636fa697 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Deleting/DeleteResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs index 8e89e052d1..cc32f0f2b8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs index fbfa714995..665e3cf813 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Fetching/FetchResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemDefinition.cs index 6f8a90b69c..fce8dc00ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemGroupDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemGroupDefinition.cs index a5762b761c..2253ba0307 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemGroupDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ImplicitlyChangingWorkItemGroupDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteDbContext.cs index 92d7c28888..6f38c9a61e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteFakers.cs index fda5ba9218..d30b1cc203 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/ReadWriteFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColor.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColor.cs index 71e32d6618..cec2e226ef 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColor.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs index ced6497481..c2719f7781 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs index d827b58e4a..32171b423c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/AddToToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs index 6d076a10f0..3cfd8a6eb7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/RemoveFromToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs index ab4e3fc2bb..7202a0bbad 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/ReplaceToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs index a7cd13c53c..7156137d61 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Relationships/UpdateToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs index da348514cf..4a4cc30211 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/ReplaceToManyRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs index 916e2f2f28..890ef4891e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs index 7ee8e988bd..d622cbe31a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/Updating/Resources/UpdateToOneRelationshipTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccount.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccount.cs index 957882a09f..7779de0422 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccount.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccount.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs index 4d928d7ad5..b93c0d667d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItem.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItem.cs index 51f83556d4..fdcc900892 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItem.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItem.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroup.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroup.cs index de97a74176..d385cd6786 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroup.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroup.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs index 5a15706245..23031258bd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemPriority.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemPriority.cs index e7a5a113bf..e1d7e013d6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemPriority.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemPriority.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemToWorkItem.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemToWorkItem.cs index 564ec9b497..98d9d4d60b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemToWorkItem.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemToWorkItem.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs index 596d90ac20..a9e96279c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkTag.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkTag.cs index 2d08ef3cac..b7e0e5f0ef 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkTag.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkTag.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Customer.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Customer.cs index c36e588f1f..6dcfe3edb1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Customer.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Customer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs index 19f64705b0..65dd76ef73 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorDbContext.cs index 9e2a89163a..8f115d5391 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorFakers.cs index b561b479e4..04c48f5422 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs index 0fe047f5b5..0016ec7db0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Order.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Order.cs index 5507dc8701..d014fa86cb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Order.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Order.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs index 3641c46fa2..3fc62992ec 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Shipment.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Shipment.cs index d57bb4c008..0f19c87c2e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Shipment.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/Shipment.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs index 2741bd4976..a0572212ca 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificate.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificate.cs index 8b56a2523d..a6ae49aaf1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificate.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificate.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.ComponentModel.DataAnnotations.Schema; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs index 0a52142cfc..d720f8a6bc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionDbContext.cs index c885fc6cac..77cfa63a77 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore; using Microsoft.AspNetCore.Authentication; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionFakers.cs index 12d1f05145..1f98c1149b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/InjectionFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using JsonApiDotNetCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOffice.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOffice.cs index 06c2dbc32a..b6635675d6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOffice.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOffice.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs index 96a4f682b5..ee3ef0ebd9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs index 97716b7812..295cd78ab9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/ResourceInjectionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitionHitCounter.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitionHitCounter.cs index 3bbe48baea..a05daaf61a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitionHitCounter.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitionHitCounter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/IClientSettingsProvider.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/IClientSettingsProvider.cs index ef79f15157..449674d0d7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/IClientSettingsProvider.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/IClientSettingsProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { public interface IClientSettingsProvider diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Moon.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Moon.cs index e2dc3c3b8e..53b9e2b47b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Moon.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Moon.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs index 5cc3594e0c..e8c9048729 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Immutable; using System.Linq; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs index 7d8f04afde..6c6780f6a4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Planet.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Planet.cs index fc17df16bf..cbe2d75c65 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Planet.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Planet.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs index dbffc76cb7..627858c35c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Immutable; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs index 7339ca3b11..70ac77ecca 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/ResourceDefinitionReadTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/ResourceDefinitionReadTests.cs index aa837c689b..6c7e230e58 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/ResourceDefinitionReadTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/ResourceDefinitionReadTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Star.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Star.cs index 4baab0ae04..b05be6b152 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Star.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/Star.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarDefinition.cs index 9f56700299..ad9aa0e0d2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.ComponentModel; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarKind.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarKind.cs index d3c4685d1c..225d544e6d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarKind.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarKind.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs index c3b3c27b19..d223451796 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/TestClientSettingsProvider.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/TestClientSettingsProvider.cs index d975f4a85b..21c11c5786 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/TestClientSettingsProvider.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/TestClientSettingsProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { internal sealed class TestClientSettingsProvider : IClientSettingsProvider diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseDbContext.cs index 94f2065d07..74a2b78703 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseFakers.cs index de46186008..d5016b37e3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/UniverseFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/AesEncryptionService.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/AesEncryptionService.cs index 5074d86359..2712db69ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/AesEncryptionService.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/AesEncryptionService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Security.Cryptography; using System.Text; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/IEncryptionService.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/IEncryptionService.cs index 2500137339..f24da9869d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/IEncryptionService.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/IEncryptionService.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Serialization { public interface IEncryptionService diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ResourceDefinitionSerializationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ResourceDefinitionSerializationTests.cs index 216de1a998..f67c124bfb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ResourceDefinitionSerializationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ResourceDefinitionSerializationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using System.Net; using System.Net.Http; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Scholarship.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Scholarship.cs index 196ad46b7c..cebff96ebf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Scholarship.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Scholarship.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs index 9b31290bff..ca04389d8d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationDbContext.cs index dc9a7f8614..53288800ec 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationFakers.cs index 814474a4ed..868a0599fe 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/SerializationFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using Bogus.Extensions.UnitedStates; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Student.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Student.cs index 995095ab3c..892cdfbf5c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Student.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/Student.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentDefinition.cs index fa1a2d2bf9..8b011b8dc7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentDefinition.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs index 4cab2a0eba..bfbef34a7e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceDbContext.cs index dc6e2f1533..b9ba3bcd51 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCoreTests.IntegrationTests.ResourceInheritance.Models; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceTests.cs index 477b450167..e4c457047c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/InheritanceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs index 0aafe62ffa..93c0ae618f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Book.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Book.cs index 6c0e11eeee..400f6c42b4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Book.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Book.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/CompanyHealthInsurance.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/CompanyHealthInsurance.cs index 7b2a38715d..5fd4da12cf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/CompanyHealthInsurance.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/CompanyHealthInsurance.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/ContentItem.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/ContentItem.cs index 250d6b90e6..2022679690 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/ContentItem.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/ContentItem.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/FamilyHealthInsurance.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/FamilyHealthInsurance.cs index aaefbbf074..82d57efb3f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/FamilyHealthInsurance.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/FamilyHealthInsurance.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/HealthInsurance.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/HealthInsurance.cs index 2a1ce62919..2f2488e59c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/HealthInsurance.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/HealthInsurance.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Human.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Human.cs index efb5a524c8..e3deb48112 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Human.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Human.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Man.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Man.cs index 2621c7008f..9910089c63 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Man.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Man.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Video.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Video.cs index 2c315151dc..a1b99c6a63 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Video.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Video.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Woman.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Woman.cs index b66f965666..86dfdd6f01 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Woman.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/Models/Woman.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Bed.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Bed.cs index 5c229c796d..a7fffd8133 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Bed.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Bed.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs index 276da8391c..f2bd333d07 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs index 633e01339a..48142e595b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs index 2ae093edb6..2265786efb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs index be140f6643..15c4268f37 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Chair.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Chair.cs index 62e2358d1b..5f29cbcbc4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Chair.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Chair.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs index 54356a48f7..0f16c03b4a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/DisableQueryStringTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs index 8a307b1de7..89104eec67 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/HttpReadOnlyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs index fb7ceadc45..bffafd29bf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpDeleteTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs index 5be0254212..b5b1975ed1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPatchTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs index a6f16a1cb0..4a3631512d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/NoHttpPostTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionDbContext.cs index 02fd1482f1..d08eefd103 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionFakers.cs index a811193dfb..4418199cae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/RestrictionFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/SkipCacheQueryStringParameterReader.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/SkipCacheQueryStringParameterReader.cs index 43fe12f42a..35a57a7dd4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/SkipCacheQueryStringParameterReader.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/SkipCacheQueryStringParameterReader.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Controllers.Annotations; using JsonApiDotNetCore.Errors; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Sofa.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Sofa.cs index c110b5d0d8..091044892b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Sofa.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Sofa.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Table.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Table.cs index a2ed9e0734..9107681fc0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Table.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/Table.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/ETagTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/ETagTests.cs index 8763390bd9..dbe5aa29e3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/ETagTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/ETagTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Net; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/Meeting.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/Meeting.cs index 148391d0d4..dcaae7bcdf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/Meeting.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/Meeting.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendee.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendee.cs index 410f0710d1..10b7e9f414 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendee.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendee.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs index 822908bc98..ba49ceb126 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingLocation.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingLocation.cs index 8ca431bc1c..98e051b164 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingLocation.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingLocation.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Text.Json.Serialization; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs index 216b1081cd..77e103e270 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationDbContext.cs index 31a6f3f8c6..2a941747d7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationFakers.cs index 3453c0f98e..edfb588de9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationTests.cs index 42817f2798..98f05f076a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/SerializationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Globalization; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs index 2f29996efa..23243327c8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Company.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Company.cs index f0e9283a7f..93b1193bbc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Company.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Company.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Department.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Department.cs index 307ab8f483..ff7f75b623 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Department.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/Department.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs index f4ce9e82d8..4295b55600 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/ISoftDeletable.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/ISoftDeletable.cs index 5b575288f9..917ef2b713 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/ISoftDeletable.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/ISoftDeletable.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionAwareResourceService.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionAwareResourceService.cs index e1947b03bd..a17bb11768 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionAwareResourceService.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionAwareResourceService.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionDbContext.cs index 843e5d9aeb..20ad147c8a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionFakers.cs index 85ddfd20e5..496d26486b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs index 2aabd08bb1..889c4c57b0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/SoftDeletionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs index 5fa4761150..8dd2d4a1d6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/EmptyGuidAsKeyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Game.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Game.cs index eb67acb164..e364f8b2dd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Game.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Game.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs index 21d9e8b7e7..68d9e6cd5e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Map.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Map.cs index 15b2c93491..f291e7ca7b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Map.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Map.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs index 537de1425b..48f55c061b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Player.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Player.cs index fec2c0cc08..014cdef493 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Player.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/Player.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs index d22143619a..e59181cc68 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs index 04133f348b..b6bdb115f5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroAsKeyTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyDbContext.cs index b9a32cbad7..9d66e69fab 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyDbContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyFakers.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyFakers.cs index 9a6306bbfe..6b601bfd13 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyFakers.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/ZeroKeyFakers.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Bogus; using TestBuildingBlocks; diff --git a/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksInApiNamespaceStartup.cs b/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksInApiNamespaceStartup.cs index 98c36e57a9..83b9ff0d27 100644 --- a/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksInApiNamespaceStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksInApiNamespaceStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksNoNamespaceStartup.cs b/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksNoNamespaceStartup.cs index cce765bee7..3ddb95f452 100644 --- a/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksNoNamespaceStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/AbsoluteLinksNoNamespaceStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs b/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs index 374392ce5c..b66284d40e 100644 --- a/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/Startups/RelativeLinksInApiNamespaceStartup.cs b/test/JsonApiDotNetCoreTests/Startups/RelativeLinksInApiNamespaceStartup.cs index 7057ead134..ae13dc35d6 100644 --- a/test/JsonApiDotNetCoreTests/Startups/RelativeLinksInApiNamespaceStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/RelativeLinksInApiNamespaceStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/Startups/RelativeLinksNoNamespaceStartup.cs b/test/JsonApiDotNetCoreTests/Startups/RelativeLinksNoNamespaceStartup.cs index f6bea55b88..58b8350ba0 100644 --- a/test/JsonApiDotNetCoreTests/Startups/RelativeLinksNoNamespaceStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/RelativeLinksNoNamespaceStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Configuration/DependencyContainerRegistrationTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Configuration/DependencyContainerRegistrationTests.cs index e7ddc9ce11..158789081a 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Configuration/DependencyContainerRegistrationTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Configuration/DependencyContainerRegistrationTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using FluentAssertions; using JetBrains.Annotations; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs index d39e6b01e6..4dae4d8195 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using FluentAssertions; using JsonApiDotNetCore.Configuration; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/BaseParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/BaseParseTests.cs index 193a5c1ea9..d356a37261 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/BaseParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/BaseParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCoreTests.IntegrationTests.QueryStrings; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs index 966c6ef1ae..d329faccff 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.Design; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs index afa922ebcc..c920d80b53 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs index 0210db3140..8cbfb3b994 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.Design; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs index 924569618d..51edf3a482 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs index 4c4d29acbb..8c46b87738 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs index 8142160429..5015e2874b 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/InputConversionTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/InputConversionTests.cs index 76182c4467..38ce8f1709 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/InputConversionTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/InputConversionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.ComponentModel.Design; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Article.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Article.cs index 78caec3f5e..6c69e72705 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Article.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Article.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Blog.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Blog.cs index b7cebea94a..b736837d41 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Blog.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Blog.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Food.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Food.cs index 93abc38148..1e5e51fb14 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Food.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Food.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Person.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Person.cs index 6121996fe8..26d6de5cd6 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Person.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Person.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Song.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Song.cs index 45f75f0346..3fe707ff0b 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Song.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/Models/Song.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/ResponseModelAdapterTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/ResponseModelAdapterTests.cs index c19a40fc79..558ed7b2ae 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/ResponseModelAdapterTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Serialization/Response/ResponseModelAdapterTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -600,7 +602,7 @@ public ResourceLinks GetResourceLinks(ResourceType resourceType, string id) return null; } - public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, IIdentifiable leftResource) + public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, string leftId) { return null; } diff --git a/test/MultiDbContextTests/ResourceTests.cs b/test/MultiDbContextTests/ResourceTests.cs index 27b2049e07..4c11973b46 100644 --- a/test/MultiDbContextTests/ResourceTests.cs +++ b/test/MultiDbContextTests/ResourceTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using System.Text.Json; diff --git a/test/NoEntityFrameworkTests/WorkItemTests.cs b/test/NoEntityFrameworkTests/WorkItemTests.cs index e1b6dbafe6..9563814d31 100644 --- a/test/NoEntityFrameworkTests/WorkItemTests.cs +++ b/test/NoEntityFrameworkTests/WorkItemTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/TestBuildingBlocks/AssemblyInfo.cs b/test/TestBuildingBlocks/AssemblyInfo.cs index 82d12912a4..9ad18c9630 100644 --- a/test/TestBuildingBlocks/AssemblyInfo.cs +++ b/test/TestBuildingBlocks/AssemblyInfo.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Diagnostics.CodeAnalysis; // https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/MSBuildIntegration.md#excluding-from-coverage diff --git a/test/TestBuildingBlocks/DateTimeExtensions.cs b/test/TestBuildingBlocks/DateTimeExtensions.cs index e6678995da..18f7eeaec7 100644 --- a/test/TestBuildingBlocks/DateTimeExtensions.cs +++ b/test/TestBuildingBlocks/DateTimeExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; namespace TestBuildingBlocks diff --git a/test/TestBuildingBlocks/DbContextExtensions.cs b/test/TestBuildingBlocks/DbContextExtensions.cs index 389038f7d1..35b0289b6f 100644 --- a/test/TestBuildingBlocks/DbContextExtensions.cs +++ b/test/TestBuildingBlocks/DbContextExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; diff --git a/test/TestBuildingBlocks/DummyTest.cs b/test/TestBuildingBlocks/DummyTest.cs index 82313a7f29..fdbe055741 100644 --- a/test/TestBuildingBlocks/DummyTest.cs +++ b/test/TestBuildingBlocks/DummyTest.cs @@ -1,3 +1,5 @@ +#nullable disable + using Xunit; namespace TestBuildingBlocks diff --git a/test/TestBuildingBlocks/FakeLoggerFactory.cs b/test/TestBuildingBlocks/FakeLoggerFactory.cs index 0bcc047546..983d184210 100644 --- a/test/TestBuildingBlocks/FakeLoggerFactory.cs +++ b/test/TestBuildingBlocks/FakeLoggerFactory.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/test/TestBuildingBlocks/FakerContainer.cs b/test/TestBuildingBlocks/FakerContainer.cs index 2dbfb441b8..500bd63e8f 100644 --- a/test/TestBuildingBlocks/FakerContainer.cs +++ b/test/TestBuildingBlocks/FakerContainer.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Diagnostics; using System.Linq; diff --git a/test/TestBuildingBlocks/FrozenSystemClock.cs b/test/TestBuildingBlocks/FrozenSystemClock.cs index f60e00344f..f63743c8f8 100644 --- a/test/TestBuildingBlocks/FrozenSystemClock.cs +++ b/test/TestBuildingBlocks/FrozenSystemClock.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using Microsoft.AspNetCore.Authentication; diff --git a/test/TestBuildingBlocks/HttpResponseMessageExtensions.cs b/test/TestBuildingBlocks/HttpResponseMessageExtensions.cs index 4803600dec..cfe3f82ecf 100644 --- a/test/TestBuildingBlocks/HttpResponseMessageExtensions.cs +++ b/test/TestBuildingBlocks/HttpResponseMessageExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Net; using System.Net.Http; using FluentAssertions; diff --git a/test/TestBuildingBlocks/IntegrationTest.cs b/test/TestBuildingBlocks/IntegrationTest.cs index 61601c0f6f..dc620ae31c 100644 --- a/test/TestBuildingBlocks/IntegrationTest.cs +++ b/test/TestBuildingBlocks/IntegrationTest.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net.Http; using System.Net.Http.Headers; diff --git a/test/TestBuildingBlocks/IntegrationTestContext.cs b/test/TestBuildingBlocks/IntegrationTestContext.cs index e909699aa9..e84fca4ea4 100644 --- a/test/TestBuildingBlocks/IntegrationTestContext.cs +++ b/test/TestBuildingBlocks/IntegrationTestContext.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net.Http; using System.Text.Json; diff --git a/test/TestBuildingBlocks/JsonApiStringConverter.cs b/test/TestBuildingBlocks/JsonApiStringConverter.cs index 40b334cac1..aa9090fbe0 100644 --- a/test/TestBuildingBlocks/JsonApiStringConverter.cs +++ b/test/TestBuildingBlocks/JsonApiStringConverter.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using System.Text.Json; diff --git a/test/TestBuildingBlocks/NeverSameResourceChangeTracker.cs b/test/TestBuildingBlocks/NeverSameResourceChangeTracker.cs index 16ae8e1454..8fea0a9315 100644 --- a/test/TestBuildingBlocks/NeverSameResourceChangeTracker.cs +++ b/test/TestBuildingBlocks/NeverSameResourceChangeTracker.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace TestBuildingBlocks diff --git a/test/TestBuildingBlocks/ObjectAssertionsExtensions.cs b/test/TestBuildingBlocks/ObjectAssertionsExtensions.cs index 90edc1a544..4924fc1f9c 100644 --- a/test/TestBuildingBlocks/ObjectAssertionsExtensions.cs +++ b/test/TestBuildingBlocks/ObjectAssertionsExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.IO; using System.Text; diff --git a/test/TestBuildingBlocks/QueryableExtensions.cs b/test/TestBuildingBlocks/QueryableExtensions.cs index 7fb767cdce..b5c79aa90f 100644 --- a/test/TestBuildingBlocks/QueryableExtensions.cs +++ b/test/TestBuildingBlocks/QueryableExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Threading; using System.Threading.Tasks; diff --git a/test/TestBuildingBlocks/ServiceCollectionExtensions.cs b/test/TestBuildingBlocks/ServiceCollectionExtensions.cs index d3ede9b68c..5ac305f826 100644 --- a/test/TestBuildingBlocks/ServiceCollectionExtensions.cs +++ b/test/TestBuildingBlocks/ServiceCollectionExtensions.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Reflection; using JsonApiDotNetCore; diff --git a/test/TestBuildingBlocks/TestControllerProvider.cs b/test/TestBuildingBlocks/TestControllerProvider.cs index d8790269ef..9cd3b6a0e8 100644 --- a/test/TestBuildingBlocks/TestControllerProvider.cs +++ b/test/TestBuildingBlocks/TestControllerProvider.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; diff --git a/test/TestBuildingBlocks/TestableStartup.cs b/test/TestBuildingBlocks/TestableStartup.cs index 7b0c927645..470c03e174 100644 --- a/test/TestBuildingBlocks/TestableStartup.cs +++ b/test/TestBuildingBlocks/TestableStartup.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; diff --git a/test/TestBuildingBlocks/Unknown.cs b/test/TestBuildingBlocks/Unknown.cs index 58ed6da14a..e03ce57849 100644 --- a/test/TestBuildingBlocks/Unknown.cs +++ b/test/TestBuildingBlocks/Unknown.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/Builders/ResourceGraphBuilderTests.cs b/test/UnitTests/Builders/ResourceGraphBuilderTests.cs index 634bc6d4a3..968a3bd77a 100644 --- a/test/UnitTests/Builders/ResourceGraphBuilderTests.cs +++ b/test/UnitTests/Builders/ResourceGraphBuilderTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs index 7f504edab0..858d1a6bd8 100644 --- a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs +++ b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Net; using System.Net.Http; diff --git a/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs b/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs index cae850fadc..a380405c15 100644 --- a/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs +++ b/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Collections.Immutable; diff --git a/test/UnitTests/Graph/BaseType.cs b/test/UnitTests/Graph/BaseType.cs index 5b901cabcd..ad2a4a136e 100644 --- a/test/UnitTests/Graph/BaseType.cs +++ b/test/UnitTests/Graph/BaseType.cs @@ -1,3 +1,5 @@ +#nullable disable + // ReSharper disable UnusedTypeParameter namespace UnitTests.Graph diff --git a/test/UnitTests/Graph/DerivedType.cs b/test/UnitTests/Graph/DerivedType.cs index badc401e21..cc790a08a6 100644 --- a/test/UnitTests/Graph/DerivedType.cs +++ b/test/UnitTests/Graph/DerivedType.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace UnitTests.Graph { internal sealed class DerivedType : BaseType diff --git a/test/UnitTests/Graph/IGenericInterface.cs b/test/UnitTests/Graph/IGenericInterface.cs index 9b2e6a8f78..31c76fbc7d 100644 --- a/test/UnitTests/Graph/IGenericInterface.cs +++ b/test/UnitTests/Graph/IGenericInterface.cs @@ -1,3 +1,5 @@ +#nullable disable + // ReSharper disable UnusedTypeParameter namespace UnitTests.Graph diff --git a/test/UnitTests/Graph/Implementation.cs b/test/UnitTests/Graph/Implementation.cs index 5709063009..d502c6154c 100644 --- a/test/UnitTests/Graph/Implementation.cs +++ b/test/UnitTests/Graph/Implementation.cs @@ -1,3 +1,5 @@ +#nullable disable + namespace UnitTests.Graph { internal sealed class Implementation : IGenericInterface diff --git a/test/UnitTests/Graph/Model.cs b/test/UnitTests/Graph/Model.cs index 8144871b2e..60f6e2b795 100644 --- a/test/UnitTests/Graph/Model.cs +++ b/test/UnitTests/Graph/Model.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace UnitTests.Graph diff --git a/test/UnitTests/Graph/ResourceDescriptorAssemblyCacheTests.cs b/test/UnitTests/Graph/ResourceDescriptorAssemblyCacheTests.cs index c602c368a0..86655d7c97 100644 --- a/test/UnitTests/Graph/ResourceDescriptorAssemblyCacheTests.cs +++ b/test/UnitTests/Graph/ResourceDescriptorAssemblyCacheTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/UnitTests/Graph/TypeLocatorTests.cs b/test/UnitTests/Graph/TypeLocatorTests.cs index 4ff9625ebc..c56c32cebb 100644 --- a/test/UnitTests/Graph/TypeLocatorTests.cs +++ b/test/UnitTests/Graph/TypeLocatorTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Reflection; diff --git a/test/UnitTests/Internal/ErrorObjectTests.cs b/test/UnitTests/Internal/ErrorObjectTests.cs index d60520df84..40a9ee35d6 100644 --- a/test/UnitTests/Internal/ErrorObjectTests.cs +++ b/test/UnitTests/Internal/ErrorObjectTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Linq; using System.Net; using FluentAssertions; diff --git a/test/UnitTests/Internal/ResourceGraphBuilderTests.cs b/test/UnitTests/Internal/ResourceGraphBuilderTests.cs index 3aaf096ded..d93480e32d 100644 --- a/test/UnitTests/Internal/ResourceGraphBuilderTests.cs +++ b/test/UnitTests/Internal/ResourceGraphBuilderTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Linq; using Castle.DynamicProxy; diff --git a/test/UnitTests/Internal/RuntimeTypeConverterTests.cs b/test/UnitTests/Internal/RuntimeTypeConverterTests.cs index b2162841b6..0abe07926b 100644 --- a/test/UnitTests/Internal/RuntimeTypeConverterTests.cs +++ b/test/UnitTests/Internal/RuntimeTypeConverterTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using JsonApiDotNetCore.Resources.Internal; diff --git a/test/UnitTests/Internal/TypeExtensionsTests.cs b/test/UnitTests/Internal/TypeExtensionsTests.cs index 274dc50da7..f4459f1d95 100644 --- a/test/UnitTests/Internal/TypeExtensionsTests.cs +++ b/test/UnitTests/Internal/TypeExtensionsTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JsonApiDotNetCore; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs b/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs index e753221785..9785d27050 100644 --- a/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs +++ b/test/UnitTests/Middleware/JsonApiMiddlewareTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.IO; using System.Linq; diff --git a/test/UnitTests/Middleware/JsonApiRequestTests.cs b/test/UnitTests/Middleware/JsonApiRequestTests.cs index 6ae428232d..eeb384c704 100644 --- a/test/UnitTests/Middleware/JsonApiRequestTests.cs +++ b/test/UnitTests/Middleware/JsonApiRequestTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.Collections.Generic; using System.Linq; diff --git a/test/UnitTests/Models/AttributesEqualsTests.cs b/test/UnitTests/Models/AttributesEqualsTests.cs index 9da552e77a..abb8068b4e 100644 --- a/test/UnitTests/Models/AttributesEqualsTests.cs +++ b/test/UnitTests/Models/AttributesEqualsTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources.Annotations; using Xunit; diff --git a/test/UnitTests/Models/IdentifiableTests.cs b/test/UnitTests/Models/IdentifiableTests.cs index ae932f9a3c..6d38f555c3 100644 --- a/test/UnitTests/Models/IdentifiableTests.cs +++ b/test/UnitTests/Models/IdentifiableTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; using Xunit; diff --git a/test/UnitTests/Models/ResourceConstructionExpressionTests.cs b/test/UnitTests/Models/ResourceConstructionExpressionTests.cs index 2f01d3d353..6284a4dd2b 100644 --- a/test/UnitTests/Models/ResourceConstructionExpressionTests.cs +++ b/test/UnitTests/Models/ResourceConstructionExpressionTests.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using System.ComponentModel.Design; using System.Linq.Expressions; diff --git a/test/UnitTests/Models/ResourceWithStringConstructor.cs b/test/UnitTests/Models/ResourceWithStringConstructor.cs index b1bec7637c..880051a901 100644 --- a/test/UnitTests/Models/ResourceWithStringConstructor.cs +++ b/test/UnitTests/Models/ResourceWithStringConstructor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/Models/ResourceWithThrowingConstructor.cs b/test/UnitTests/Models/ResourceWithThrowingConstructor.cs index cc446db11d..29457f3031 100644 --- a/test/UnitTests/Models/ResourceWithThrowingConstructor.cs +++ b/test/UnitTests/Models/ResourceWithThrowingConstructor.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/Models/ResourceWithoutConstructor.cs b/test/UnitTests/Models/ResourceWithoutConstructor.cs index 0b16902023..de59d0a6a7 100644 --- a/test/UnitTests/Models/ResourceWithoutConstructor.cs +++ b/test/UnitTests/Models/ResourceWithoutConstructor.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace UnitTests.Models diff --git a/test/UnitTests/TestModels/Article.cs b/test/UnitTests/TestModels/Article.cs index 200ec5f5b9..40e32b1f5a 100644 --- a/test/UnitTests/TestModels/Article.cs +++ b/test/UnitTests/TestModels/Article.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/BaseModel.cs b/test/UnitTests/TestModels/BaseModel.cs index 27372cc429..5185ce1eaa 100644 --- a/test/UnitTests/TestModels/BaseModel.cs +++ b/test/UnitTests/TestModels/BaseModel.cs @@ -1,3 +1,5 @@ +#nullable disable + using JsonApiDotNetCore.Resources; namespace UnitTests.TestModels diff --git a/test/UnitTests/TestModels/Blog.cs b/test/UnitTests/TestModels/Blog.cs index 1c5c192117..103c78b84e 100644 --- a/test/UnitTests/TestModels/Blog.cs +++ b/test/UnitTests/TestModels/Blog.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/ComplexType.cs b/test/UnitTests/TestModels/ComplexType.cs index a8748203e6..50935cc0cd 100644 --- a/test/UnitTests/TestModels/ComplexType.cs +++ b/test/UnitTests/TestModels/ComplexType.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; namespace UnitTests.TestModels diff --git a/test/UnitTests/TestModels/FirstDerivedModel.cs b/test/UnitTests/TestModels/FirstDerivedModel.cs index 4ba1985713..40038de629 100644 --- a/test/UnitTests/TestModels/FirstDerivedModel.cs +++ b/test/UnitTests/TestModels/FirstDerivedModel.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/Food.cs b/test/UnitTests/TestModels/Food.cs index 07f9c884fa..e335a849e3 100644 --- a/test/UnitTests/TestModels/Food.cs +++ b/test/UnitTests/TestModels/Food.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/IdentifiableWithAttribute.cs b/test/UnitTests/TestModels/IdentifiableWithAttribute.cs index c2317695b9..b2f8101972 100644 --- a/test/UnitTests/TestModels/IdentifiableWithAttribute.cs +++ b/test/UnitTests/TestModels/IdentifiableWithAttribute.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/MultipleRelationshipsDependentPart.cs b/test/UnitTests/TestModels/MultipleRelationshipsDependentPart.cs index 6428ca6801..440474a9aa 100644 --- a/test/UnitTests/TestModels/MultipleRelationshipsDependentPart.cs +++ b/test/UnitTests/TestModels/MultipleRelationshipsDependentPart.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/MultipleRelationshipsPrincipalPart.cs b/test/UnitTests/TestModels/MultipleRelationshipsPrincipalPart.cs index 707ffbeb59..2a23b3618d 100644 --- a/test/UnitTests/TestModels/MultipleRelationshipsPrincipalPart.cs +++ b/test/UnitTests/TestModels/MultipleRelationshipsPrincipalPart.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToManyDependent.cs b/test/UnitTests/TestModels/OneToManyDependent.cs index 79ba4f597c..428321a214 100644 --- a/test/UnitTests/TestModels/OneToManyDependent.cs +++ b/test/UnitTests/TestModels/OneToManyDependent.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToManyPrincipal.cs b/test/UnitTests/TestModels/OneToManyPrincipal.cs index ad5bfef9e1..f349551b77 100644 --- a/test/UnitTests/TestModels/OneToManyPrincipal.cs +++ b/test/UnitTests/TestModels/OneToManyPrincipal.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToManyRequiredDependent.cs b/test/UnitTests/TestModels/OneToManyRequiredDependent.cs index 58e58b5ed7..c42f523547 100644 --- a/test/UnitTests/TestModels/OneToManyRequiredDependent.cs +++ b/test/UnitTests/TestModels/OneToManyRequiredDependent.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToOneDependent.cs b/test/UnitTests/TestModels/OneToOneDependent.cs index 4d5f542ebd..301a48778b 100644 --- a/test/UnitTests/TestModels/OneToOneDependent.cs +++ b/test/UnitTests/TestModels/OneToOneDependent.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToOnePrincipal.cs b/test/UnitTests/TestModels/OneToOnePrincipal.cs index 4de043b036..bf94139517 100644 --- a/test/UnitTests/TestModels/OneToOnePrincipal.cs +++ b/test/UnitTests/TestModels/OneToOnePrincipal.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/OneToOneRequiredDependent.cs b/test/UnitTests/TestModels/OneToOneRequiredDependent.cs index 6025ed5688..c5d4bff327 100644 --- a/test/UnitTests/TestModels/OneToOneRequiredDependent.cs +++ b/test/UnitTests/TestModels/OneToOneRequiredDependent.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/Person.cs b/test/UnitTests/TestModels/Person.cs index cfdf45263a..48c5d888e1 100644 --- a/test/UnitTests/TestModels/Person.cs +++ b/test/UnitTests/TestModels/Person.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/TestModels/SecondDerivedModel.cs b/test/UnitTests/TestModels/SecondDerivedModel.cs index 1c4b2c61a5..0acc0842bd 100644 --- a/test/UnitTests/TestModels/SecondDerivedModel.cs +++ b/test/UnitTests/TestModels/SecondDerivedModel.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/Song.cs b/test/UnitTests/TestModels/Song.cs index fdf6a837d6..e629d52204 100644 --- a/test/UnitTests/TestModels/Song.cs +++ b/test/UnitTests/TestModels/Song.cs @@ -1,3 +1,5 @@ +#nullable disable + using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; diff --git a/test/UnitTests/TestModels/TestResource.cs b/test/UnitTests/TestModels/TestResource.cs index 4ff805e4da..4a7cbc7b2d 100644 --- a/test/UnitTests/TestModels/TestResource.cs +++ b/test/UnitTests/TestModels/TestResource.cs @@ -1,3 +1,5 @@ +#nullable disable + using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/TestModels/TestResourceWithAbstractRelationship.cs b/test/UnitTests/TestModels/TestResourceWithAbstractRelationship.cs index 06970c7fc4..e40e985ebb 100644 --- a/test/UnitTests/TestModels/TestResourceWithAbstractRelationship.cs +++ b/test/UnitTests/TestModels/TestResourceWithAbstractRelationship.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/test/UnitTests/TestModels/TestResourceWithList.cs b/test/UnitTests/TestModels/TestResourceWithList.cs index 12cb5eb3ec..dab6d54805 100644 --- a/test/UnitTests/TestModels/TestResourceWithList.cs +++ b/test/UnitTests/TestModels/TestResourceWithList.cs @@ -1,3 +1,5 @@ +#nullable disable + using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; From 6cc336c76c33e15c631ae58c097e63da5731d490 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 11 Oct 2021 12:53:52 +0200 Subject: [PATCH 03/32] Turn on NRT globally --- Directory.Build.props | 1 + 1 file changed, 1 insertion(+) diff --git a/Directory.Build.props b/Directory.Build.props index bec8ba912e..e1064577ae 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,6 +6,7 @@ 5.0.* $(MSBuildThisFileDirectory)CodingGuidelines.ruleset 9999 + enable From 0f01b9d779b7b515594aef7761e11fee57e766d9 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 11 Oct 2021 15:30:37 +0200 Subject: [PATCH 04/32] Annotated JsonApiDotNetCore library --- .../SerializationBenchmarkBase.cs | 2 +- src/JsonApiDotNetCore/ArgumentGuard.cs | 13 +- src/JsonApiDotNetCore/ArrayFactory.cs | 2 - .../EntityFrameworkCoreTransaction.cs | 2 - .../EntityFrameworkCoreTransactionFactory.cs | 2 - .../AtomicOperations/ILocalIdTracker.cs | 2 - .../IOperationProcessorAccessor.cs | 4 +- .../AtomicOperations/IOperationsProcessor.cs | 4 +- .../IOperationsTransaction.cs | 2 - .../IOperationsTransactionFactory.cs | 2 - .../AtomicOperations/LocalIdTracker.cs | 4 +- .../AtomicOperations/LocalIdValidator.cs | 6 +- .../MissingTransactionFactory.cs | 2 - .../OperationProcessorAccessor.cs | 6 +- .../AtomicOperations/OperationsProcessor.cs | 12 +- .../Processors/AddToRelationshipProcessor.cs | 6 +- .../Processors/CreateProcessor.cs | 10 +- .../Processors/DeleteProcessor.cs | 4 +- .../Processors/IAddToRelationshipProcessor.cs | 2 - .../Processors/ICreateProcessor.cs | 2 - .../Processors/IDeleteProcessor.cs | 2 - .../Processors/IOperationProcessor.cs | 4 +- .../IRemoveFromRelationshipProcessor.cs | 2 - .../Processors/ISetRelationshipProcessor.cs | 2 - .../Processors/IUpdateProcessor.cs | 2 - .../RemoveFromRelationshipProcessor.cs | 6 +- .../Processors/SetRelationshipProcessor.cs | 14 +- .../Processors/UpdateProcessor.cs | 6 +- .../RevertRequestStateOnDispose.cs | 6 +- src/JsonApiDotNetCore/CollectionConverter.cs | 12 +- src/JsonApiDotNetCore/CollectionExtensions.cs | 18 +- .../ApplicationBuilderExtensions.cs | 2 - .../IInverseNavigationResolver.cs | 2 - .../IJsonApiApplicationBuilder.cs | 4 +- .../Configuration/IJsonApiOptions.cs | 10 +- .../Configuration/IResourceGraph.cs | 12 +- .../InverseNavigationResolver.cs | 4 +- .../JsonApiApplicationBuilder.cs | 14 +- .../JsonApiModelMetadataProvider.cs | 2 - .../Configuration/JsonApiOptions.cs | 10 +- .../Configuration/JsonApiValidationFilter.cs | 9 +- .../Configuration/PageNumber.cs | 6 +- .../Configuration/PageSize.cs | 6 +- .../Configuration/ResourceDescriptor.cs | 5 +- .../ResourceDescriptorAssemblyCache.cs | 8 +- .../Configuration/ResourceGraph.cs | 30 ++- .../Configuration/ResourceGraphBuilder.cs | 44 ++-- .../Configuration/ResourceNameFormatter.cs | 8 +- .../Configuration/ResourceType.cs | 32 ++- .../ServiceCollectionExtensions.cs | 26 +- .../Configuration/ServiceDiscoveryFacade.cs | 2 - .../Configuration/TypeLocator.cs | 17 +- .../DisableQueryStringAttribute.cs | 2 - .../DisableRoutingConventionAttribute.cs | 2 - .../Annotations/HttpReadOnlyAttribute.cs | 2 - .../Annotations/HttpRestrictAttribute.cs | 2 - .../Annotations/NoHttpDeleteAttribute.cs | 2 - .../Annotations/NoHttpPatchAttribute.cs | 2 - .../Annotations/NoHttpPostAttribute.cs | 2 - .../Controllers/BaseJsonApiController.cs | 54 ++-- .../BaseJsonApiOperationsController.cs | 4 +- .../Controllers/CoreJsonApiController.cs | 16 +- .../Controllers/JsonApiCommandController.cs | 4 +- .../Controllers/JsonApiController.cs | 16 +- .../JsonApiOperationsController.cs | 2 - .../Controllers/JsonApiQueryController.cs | 2 - .../Controllers/ModelStateViolation.cs | 2 - .../Diagnostics/AspNetCodeTimerSession.cs | 20 +- .../Diagnostics/CascadingCodeTimer.cs | 6 +- .../Diagnostics/CodeTimingSessionManager.cs | 8 +- .../Diagnostics/DefaultCodeTimerSession.cs | 8 +- .../Diagnostics/DisabledCodeTimer.cs | 2 - .../Diagnostics/ICodeTimer.cs | 2 - .../Diagnostics/ICodeTimerSession.cs | 2 - .../Diagnostics/MeasurementSettings.cs | 2 - ...annotClearRequiredRelationshipException.cs | 2 - .../Errors/DuplicateLocalIdValueException.cs | 2 - .../Errors/FailedOperationException.cs | 2 - .../IncompatibleLocalIdTypeException.cs | 2 - .../Errors/InvalidConfigurationException.cs | 4 +- .../Errors/InvalidModelStateException.cs | 26 +- .../Errors/InvalidQueryException.cs | 8 +- .../InvalidQueryStringParameterException.cs | 10 +- .../Errors/InvalidRequestBodyException.cs | 8 +- .../Errors/JsonApiException.cs | 13 +- .../Errors/LocalIdSingleOperationException.cs | 2 - .../Errors/MissingResourceInRelationship.cs | 2 - .../MissingTransactionSupportException.cs | 2 - .../NonParticipatingTransactionException.cs | 2 - .../Errors/RelationshipNotFoundException.cs | 2 - .../RequestMethodNotAllowedException.cs | 2 - .../Errors/ResourceAlreadyExistsException.cs | 2 - .../Errors/ResourceNotFoundException.cs | 2 - ...sourcesInRelationshipsNotFoundException.cs | 2 - .../Errors/UnknownLocalIdValueException.cs | 2 - .../UnsuccessfulActionResultException.cs | 2 - .../AsyncConvertEmptyActionResultFilter.cs | 2 - .../Middleware/AsyncJsonApiExceptionFilter.cs | 2 - .../AsyncQueryStringActionFilter.cs | 2 - .../Middleware/EndpointKind.cs | 2 - .../Middleware/ExceptionHandler.cs | 4 +- .../Middleware/FixedQueryFeature.cs | 16 +- .../Middleware/FixedQueryHelpers.cs | 4 +- .../Middleware/HeaderConstants.cs | 2 - .../Middleware/HttpContextExtensions.cs | 4 +- .../IAsyncConvertEmptyActionResultFilter.cs | 2 - .../IAsyncJsonApiExceptionFilter.cs | 2 - .../IAsyncQueryStringActionFilter.cs | 2 - .../Middleware/IControllerResourceMapping.cs | 6 +- .../Middleware/IExceptionHandler.cs | 2 - .../Middleware/IJsonApiInputFormatter.cs | 2 - .../Middleware/IJsonApiOutputFormatter.cs | 2 - .../Middleware/IJsonApiRequest.cs | 27 +- .../Middleware/IJsonApiRoutingConvention.cs | 2 - .../Middleware/JsonApiInputFormatter.cs | 4 +- .../Middleware/JsonApiMiddleware.cs | 31 +-- .../Middleware/JsonApiOutputFormatter.cs | 2 - .../Middleware/JsonApiRequest.cs | 12 +- .../Middleware/JsonApiRoutingConvention.cs | 30 ++- .../Middleware/TraceLogWriter.cs | 14 +- .../Middleware/WriteOperationKind.cs | 2 - src/JsonApiDotNetCore/ObjectExtensions.cs | 2 - .../Properties/AssemblyInfo.cs | 2 - .../Queries/ExpressionInScope.cs | 6 +- .../Queries/Expressions/AnyExpression.cs | 4 +- .../Expressions/ComparisonExpression.cs | 4 +- .../Queries/Expressions/ComparisonOperator.cs | 2 - .../Queries/Expressions/CountExpression.cs | 4 +- .../Queries/Expressions/FilterExpression.cs | 2 - .../Queries/Expressions/FunctionExpression.cs | 2 - .../Queries/Expressions/HasExpression.cs | 8 +- .../Expressions/IdentifierExpression.cs | 2 - .../Expressions/IncludeChainConverter.cs | 10 +- .../Expressions/IncludeElementExpression.cs | 4 +- .../Queries/Expressions/IncludeExpression.cs | 4 +- .../Expressions/LiteralConstantExpression.cs | 4 +- .../Queries/Expressions/LogicalExpression.cs | 4 +- .../Queries/Expressions/LogicalOperator.cs | 2 - .../Expressions/MatchTextExpression.cs | 4 +- .../Queries/Expressions/NotExpression.cs | 4 +- .../Expressions/NullConstantExpression.cs | 10 +- ...nationElementQueryStringValueExpression.cs | 8 +- .../Expressions/PaginationExpression.cs | 8 +- .../PaginationQueryStringValueExpression.cs | 4 +- .../Queries/Expressions/QueryExpression.cs | 2 - .../Expressions/QueryExpressionRewriter.cs | 238 +++++++----------- .../Expressions/QueryExpressionVisitor.cs | 4 +- .../QueryStringParameterScopeExpression.cs | 8 +- .../Expressions/QueryableHandlerExpression.cs | 4 +- .../ResourceFieldChainExpression.cs | 4 +- .../Expressions/SortElementExpression.cs | 10 +- .../Queries/Expressions/SortExpression.cs | 4 +- .../Expressions/SparseFieldSetExpression.cs | 4 +- .../SparseFieldSetExpressionExtensions.cs | 18 +- .../Expressions/SparseFieldTableExpression.cs | 4 +- .../Queries/Expressions/TextMatchKind.cs | 2 - .../Queries/IPaginationContext.cs | 4 +- .../Queries/IQueryConstraintProvider.cs | 2 - .../Queries/IQueryLayerComposer.cs | 4 +- .../Queries/Internal/EvaluatedIncludeCache.cs | 8 +- .../Internal/IEvaluatedIncludeCache.cs | 4 +- .../Queries/Internal/ISparseFieldSetCache.cs | 2 - .../Parsing/FieldChainRequirements.cs | 2 - .../Queries/Internal/Parsing/FilterParser.cs | 50 ++-- .../Queries/Internal/Parsing/IncludeParser.cs | 10 +- .../Queries/Internal/Parsing/Keywords.cs | 2 - .../Internal/Parsing/PaginationParser.cs | 14 +- .../Internal/Parsing/QueryExpressionParser.cs | 25 +- .../Internal/Parsing/QueryParseException.cs | 2 - .../QueryStringParameterScopeParser.cs | 20 +- .../Internal/Parsing/QueryTokenizer.cs | 10 +- .../Parsing/ResourceFieldChainResolver.cs | 18 +- .../Queries/Internal/Parsing/SortParser.cs | 16 +- .../Internal/Parsing/SparseFieldSetParser.cs | 18 +- .../Internal/Parsing/SparseFieldTypeParser.cs | 10 +- .../Queries/Internal/Parsing/Token.cs | 6 +- .../Queries/Internal/Parsing/TokenKind.cs | 2 - .../Queries/Internal/QueryLayerComposer.cs | 69 +++-- .../QueryableBuilding/IncludeClauseBuilder.cs | 12 +- .../LambdaParameterNameFactory.cs | 2 - .../LambdaParameterNameScope.cs | 2 - .../Internal/QueryableBuilding/LambdaScope.cs | 4 +- .../QueryableBuilding/LambdaScopeFactory.cs | 4 +- .../QueryableBuilding/OrderClauseBuilder.cs | 14 +- .../QueryableBuilding/QueryClauseBuilder.cs | 12 +- .../QueryableBuilding/QueryableBuilder.cs | 6 +- .../QueryableBuilding/SelectClauseBuilder.cs | 16 +- .../SkipTakeClauseBuilder.cs | 6 +- .../QueryableBuilding/WhereClauseBuilder.cs | 51 ++-- .../Queries/Internal/SparseFieldSetCache.cs | 10 +- .../Queries/PaginationContext.cs | 6 +- src/JsonApiDotNetCore/Queries/QueryLayer.cs | 18 +- .../Queries/TopFieldSelection.cs | 2 - .../IFilterQueryStringParameterReader.cs | 2 - .../IIncludeQueryStringParameterReader.cs | 2 - .../IPaginationQueryStringParameterReader.cs | 2 - .../IQueryStringParameterReader.cs | 2 - .../QueryStrings/IQueryStringReader.cs | 4 +- .../IRequestQueryStringAccessor.cs | 2 - ...ourceDefinitionQueryableParameterReader.cs | 2 - .../ISortQueryStringParameterReader.cs | 2 - ...parseFieldSetQueryStringParameterReader.cs | 2 - .../FilterQueryStringParameterReader.cs | 16 +- .../IncludeQueryStringParameterReader.cs | 8 +- .../Internal/LegacyFilterNotationConverter.cs | 12 +- .../PaginationQueryStringParameterReader.cs | 16 +- .../Internal/QueryStringParameterReader.cs | 7 +- .../Internal/QueryStringReader.cs | 6 +- .../Internal/RequestQueryStringAccessor.cs | 16 +- ...ourceDefinitionQueryableParameterReader.cs | 12 +- .../SortQueryStringParameterReader.cs | 12 +- ...parseFieldSetQueryStringParameterReader.cs | 8 +- .../JsonApiQueryStringParameters.cs | 2 - .../Repositories/DataStoreUpdateException.cs | 6 +- .../Repositories/DbContextExtensions.cs | 12 +- .../Repositories/DbContextResolver.cs | 2 - .../EntityFrameworkCoreRepository.cs | 84 ++++--- .../Repositories/IDbContextResolver.cs | 2 - .../IRepositorySupportsTransaction.cs | 4 +- .../Repositories/IResourceReadRepository.cs | 6 +- .../Repositories/IResourceRepository.cs | 2 - .../IResourceRepositoryAccessor.cs | 12 +- .../Repositories/IResourceWriteRepository.cs | 6 +- .../ResourceRepositoryAccessor.cs | 16 +- .../Resources/Annotations/AttrAttribute.cs | 35 +-- .../Resources/Annotations/AttrCapabilities.cs | 2 - .../Annotations/EagerLoadAttribute.cs | 8 +- .../Resources/Annotations/HasManyAttribute.cs | 4 +- .../Resources/Annotations/HasOneAttribute.cs | 4 +- .../Resources/Annotations/LinkTypes.cs | 2 - .../Annotations/RelationshipAttribute.cs | 34 +-- .../Annotations/ResourceAttribute.cs | 2 - .../Annotations/ResourceFieldAttribute.cs | 78 +++++- .../Annotations/ResourceLinksAttribute.cs | 2 - .../Resources/IIdentifiable.cs | 6 +- .../Resources/IResourceChangeTracker.cs | 2 - .../Resources/IResourceDefinition.cs | 16 +- .../Resources/IResourceDefinitionAccessor.cs | 18 +- .../Resources/IResourceFactory.cs | 2 - .../Resources/ITargetedFields.cs | 2 - .../Resources/Identifiable.cs | 16 +- .../Resources/IdentifiableComparer.cs | 14 +- .../Resources/IdentifiableExtensions.cs | 21 +- .../Internal/RuntimeTypeConverter.cs | 8 +- .../Resources/JsonApiResourceDefinition.cs | 24 +- .../Resources/OperationContainer.cs | 4 +- .../Resources/QueryStringParameterHandlers.cs | 2 - .../Resources/ResourceChangeTracker.cs | 43 ++-- .../Resources/ResourceDefinitionAccessor.cs | 20 +- .../Resources/ResourceFactory.cs | 4 +- .../Resources/TargetedFields.cs | 2 - .../JsonConverters/JsonObjectConverter.cs | 8 +- .../JsonConverters/ResourceObjectConverter.cs | 30 ++- .../SingleOrManyDataConverterFactory.cs | 20 +- .../WriteOnlyDocumentConverter.cs | 2 - .../WriteOnlyRelationshipObjectConverter.cs | 2 - .../Objects/AtomicOperationCode.cs | 2 - .../Objects/AtomicOperationObject.cs | 8 +- .../Serialization/Objects/AtomicReference.cs | 10 +- .../Objects/AtomicResultObject.cs | 4 +- .../Serialization/Objects/Document.cs | 16 +- .../Serialization/Objects/ErrorLinks.cs | 6 +- .../Serialization/Objects/ErrorObject.cs | 16 +- .../Serialization/Objects/ErrorSource.cs | 8 +- .../Objects/IResourceIdentity.cs | 8 +- .../Serialization/Objects/JsonApiObject.cs | 10 +- .../Objects/RelationshipLinks.cs | 6 +- .../Objects/RelationshipObject.cs | 6 +- .../Objects/ResourceIdentifierObject.cs | 10 +- .../Serialization/Objects/ResourceLinks.cs | 4 +- .../Serialization/Objects/ResourceObject.cs | 16 +- .../Serialization/Objects/SingleOrManyData.cs | 16 +- .../Serialization/Objects/TopLevelLinks.cs | 16 +- .../Adapters/AtomicOperationObjectAdapter.cs | 20 +- .../Adapters/AtomicReferenceAdapter.cs | 8 +- .../Request/Adapters/AtomicReferenceResult.cs | 6 +- .../Request/Adapters/BaseDataAdapter.cs | 8 +- .../Request/Adapters/DocumentAdapter.cs | 4 +- .../DocumentInOperationsRequestAdapter.cs | 17 +- ...tInResourceOrRelationshipRequestAdapter.cs | 4 +- .../Adapters/IAtomicOperationObjectAdapter.cs | 2 - .../Adapters/IAtomicReferenceAdapter.cs | 2 - .../Request/Adapters/IDocumentAdapter.cs | 4 +- .../IDocumentInOperationsRequestAdapter.cs | 2 - ...tInResourceOrRelationshipRequestAdapter.cs | 4 +- .../Adapters/IRelationshipDataAdapter.cs | 6 +- .../Request/Adapters/IResourceDataAdapter.cs | 2 - ...IResourceDataInOperationsRequestAdapter.cs | 4 +- .../IResourceIdentifierObjectAdapter.cs | 2 - .../Adapters/IResourceObjectAdapter.cs | 2 - .../Request/Adapters/JsonElementConstraint.cs | 2 - .../Adapters/RelationshipDataAdapter.cs | 12 +- .../Adapters/RequestAdapterPosition.cs | 4 +- .../Request/Adapters/RequestAdapterState.cs | 8 +- .../Request/Adapters/ResourceDataAdapter.cs | 4 +- .../ResourceDataInOperationsRequestAdapter.cs | 4 +- .../ResourceIdentifierObjectAdapter.cs | 2 - .../Adapters/ResourceIdentityAdapter.cs | 23 +- .../Adapters/ResourceIdentityRequirements.cs | 10 +- .../Request/Adapters/ResourceObjectAdapter.cs | 37 ++- .../Serialization/Request/IJsonApiReader.cs | 4 +- .../Serialization/Request/JsonApiReader.cs | 18 +- .../Request/JsonInvalidAttributeInfo.cs | 6 +- .../Request/ModelConversionException.cs | 10 +- .../Serialization/Response/ETagGenerator.cs | 2 - .../Response/EmptyResponseMeta.cs | 4 +- .../Response/FingerprintGenerator.cs | 2 - .../Serialization/Response/IETagGenerator.cs | 2 - .../Response/IFingerprintGenerator.cs | 2 - .../Serialization/Response/IJsonApiWriter.cs | 4 +- .../Serialization/Response/ILinkBuilder.cs | 9 +- .../Serialization/Response/IMetaBuilder.cs | 6 +- .../Serialization/Response/IResponseMeta.cs | 4 +- .../Response/IResponseModelAdapter.cs | 6 +- .../Serialization/Response/JsonApiWriter.cs | 23 +- .../Serialization/Response/LinkBuilder.cs | 80 +++--- .../Serialization/Response/MetaBuilder.cs | 10 +- .../Response/ResourceObjectTreeNode.cs | 27 +- .../Response/ResponseModelAdapter.cs | 43 ++-- .../Services/AsyncCollectionExtensions.cs | 2 - .../Services/IAddToRelationshipService.cs | 2 - .../Services/ICreateService.cs | 4 +- .../Services/IDeleteService.cs | 2 - .../Services/IGetAllService.cs | 2 - .../Services/IGetByIdService.cs | 2 - .../Services/IGetRelationshipService.cs | 4 +- .../Services/IGetSecondaryService.cs | 4 +- .../IRemoveFromRelationshipService.cs | 2 - .../Services/IResourceCommandService.cs | 2 - .../Services/IResourceQueryService.cs | 2 - .../Services/IResourceService.cs | 2 - .../Services/ISetRelationshipService.cs | 4 +- .../Services/IUpdateService.cs | 4 +- .../Services/JsonApiResourceService.cs | 89 +++++-- src/JsonApiDotNetCore/TypeExtensions.cs | 4 +- .../TelevisionBroadcastDefinition.cs | 2 +- .../Transactions/PerformerRepository.cs | 2 +- .../CarCompositeKeyAwareRepository.cs | 6 +- .../IdObfuscation/HexadecimalCodec.cs | 2 +- .../ResultCapturingRepository.cs | 4 +- .../Reading/PlanetDefinition.cs | 2 +- .../UnitTests/Links/LinkInclusionTests.cs | 2 +- .../QueryStringParameters/FilterParseTests.cs | 2 +- .../IncludeParseTests.cs | 2 +- .../LegacyFilterParseTests.cs | 2 +- .../PaginationParseTests.cs | 4 +- .../QueryStringParameters/SortParseTests.cs | 2 +- .../SparseFieldSetParseTests.cs | 2 +- .../ServiceCollectionExtensionsTests.cs | 4 +- 349 files changed, 1358 insertions(+), 1890 deletions(-) diff --git a/benchmarks/Serialization/SerializationBenchmarkBase.cs b/benchmarks/Serialization/SerializationBenchmarkBase.cs index 61f95355ef..e8d2d683c7 100644 --- a/benchmarks/Serialization/SerializationBenchmarkBase.cs +++ b/benchmarks/Serialization/SerializationBenchmarkBase.cs @@ -239,7 +239,7 @@ public ResourceLinks GetResourceLinks(ResourceType resourceType, string id) }; } - public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, IIdentifiable leftResource) + public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, string leftId) { return new() { diff --git a/src/JsonApiDotNetCore/ArgumentGuard.cs b/src/JsonApiDotNetCore/ArgumentGuard.cs index fd15a9c6a7..1877078df9 100644 --- a/src/JsonApiDotNetCore/ArgumentGuard.cs +++ b/src/JsonApiDotNetCore/ArgumentGuard.cs @@ -1,9 +1,8 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; +using SysNotNull = System.Diagnostics.CodeAnalysis.NotNullAttribute; #pragma warning disable AV1008 // Class should not be static @@ -12,8 +11,7 @@ namespace JsonApiDotNetCore internal static class ArgumentGuard { [AssertionMethod] - [ContractAnnotation("value: null => halt")] - public static void NotNull([CanBeNull] [NoEnumeration] T value, [NotNull] [InvokerParameterName] string name) + public static void NotNull([NoEnumeration] [SysNotNull] T? value, [InvokerParameterName] string name) where T : class { if (value is null) @@ -23,9 +21,7 @@ public static void NotNull([CanBeNull] [NoEnumeration] T value, [NotNull] [In } [AssertionMethod] - [ContractAnnotation("value: null => halt")] - public static void NotNullNorEmpty([CanBeNull] IEnumerable value, [NotNull] [InvokerParameterName] string name, - [CanBeNull] string collectionName = null) + public static void NotNullNorEmpty([SysNotNull] IEnumerable? value, [InvokerParameterName] string name, string? collectionName = null) { NotNull(value, name); @@ -36,8 +32,7 @@ public static void NotNullNorEmpty([CanBeNull] IEnumerable value, [NotNull } [AssertionMethod] - [ContractAnnotation("value: null => halt")] - public static void NotNullNorEmpty([CanBeNull] string value, [NotNull] [InvokerParameterName] string name) + public static void NotNullNorEmpty([SysNotNull] string? value, [InvokerParameterName] string name) { NotNull(value, name); diff --git a/src/JsonApiDotNetCore/ArrayFactory.cs b/src/JsonApiDotNetCore/ArrayFactory.cs index c9adab3125..a33102cbdd 100644 --- a/src/JsonApiDotNetCore/ArrayFactory.cs +++ b/src/JsonApiDotNetCore/ArrayFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - #pragma warning disable AV1008 // Class should not be static #pragma warning disable AV1130 // Return type in method signature should be a collection interface instead of a concrete type diff --git a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs index 3cad1973c7..df87d1c546 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransaction.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs index 5172d8921b..3d30ebe089 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/EntityFrameworkCoreTransactionFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs b/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs index 497f8135a1..eb61e41371 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/ILocalIdTracker.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.AtomicOperations { /// diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs index 2ec8c5b740..d35d6e6154 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationProcessorAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.AtomicOperations.Processors; @@ -15,6 +13,6 @@ public interface IOperationProcessorAccessor /// /// Invokes on a processor compatible with the operation kind. /// - Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken); + Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs index cf89fc2003..f6c736ee9d 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -15,6 +13,6 @@ public interface IOperationsProcessor /// /// Processes the list of specified operations. /// - Task> ProcessAsync(IList operations, CancellationToken cancellationToken); + Task> ProcessAsync(IList operations, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs index c20e666de9..4eed23455d 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransaction.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs index 6a543c15e3..f9b752381b 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/IOperationsTransactionFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs b/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs index a119e5d9ca..408553529e 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/LocalIdTracker.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JsonApiDotNetCore.Errors; @@ -96,7 +94,7 @@ private static void AssertSameResourceType(string currentType, string declaredTy private sealed class LocalIdState { public string ResourceType { get; } - public string ServerId { get; set; } + public string? ServerId { get; set; } public LocalIdState(string resourceType) { diff --git a/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs b/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs index 02e0cb23ba..f08c1bc44c 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/LocalIdValidator.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; @@ -61,7 +59,7 @@ private void ValidateOperation(OperationContainer operation) { if (operation.Request.WriteOperation == WriteOperationKind.CreateResource) { - DeclareLocalId(operation.Resource, operation.Request.PrimaryResourceType); + DeclareLocalId(operation.Resource, operation.Request.PrimaryResourceType!); } else { @@ -75,7 +73,7 @@ private void ValidateOperation(OperationContainer operation) if (operation.Request.WriteOperation == WriteOperationKind.CreateResource) { - AssignLocalId(operation, operation.Request.PrimaryResourceType); + AssignLocalId(operation, operation.Request.PrimaryResourceType!); } } diff --git a/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs b/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs index d9203243af..75c327c0f2 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/MissingTransactionFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs b/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs index a9c38b58eb..2639608766 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/OperationProcessorAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; using System.Threading.Tasks; @@ -26,7 +24,7 @@ public OperationProcessorAccessor(IServiceProvider serviceProvider) } /// - public Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); @@ -37,7 +35,7 @@ public Task ProcessAsync(OperationContainer operation, Cance protected virtual IOperationProcessor ResolveProcessor(OperationContainer operation) { Type processorInterface = GetProcessorInterface(operation.Request.WriteOperation.GetValueOrDefault()); - ResourceType resourceType = operation.Request.PrimaryResourceType; + ResourceType resourceType = operation.Request.PrimaryResourceType!; Type processorType = processorInterface.MakeGenericType(resourceType.ClrType, resourceType.IdentityClrType); return (IOperationProcessor)_serviceProvider.GetRequiredService(processorType); diff --git a/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs index 28dee098ed..b9cbe983e0 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/OperationsProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Threading; @@ -50,14 +48,14 @@ public OperationsProcessor(IOperationProcessorAccessor operationProcessorAccesso } /// - public virtual async Task> ProcessAsync(IList operations, CancellationToken cancellationToken) + public virtual async Task> ProcessAsync(IList operations, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operations, nameof(operations)); _localIdValidator.Validate(operations); _localIdTracker.Reset(); - var results = new List(); + var results = new List(); await using IOperationsTransaction transaction = await _operationsTransactionFactory.BeginTransactionAsync(cancellationToken); @@ -71,7 +69,7 @@ public virtual async Task> ProcessAsync(IList> ProcessAsync(IList ProcessOperationAsync(OperationContainer operation, CancellationToken cancellationToken) + protected virtual async Task ProcessOperationAsync(OperationContainer operation, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); @@ -121,7 +119,7 @@ protected void TrackLocalIdsForOperation(OperationContainer operation) { if (operation.Request.WriteOperation == WriteOperationKind.CreateResource) { - DeclareLocalId(operation.Resource, operation.Request.PrimaryResourceType); + DeclareLocalId(operation.Resource, operation.Request.PrimaryResourceType!); } else { diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs index a629a67b4e..1b6025cf40 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/AddToRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -24,14 +22,14 @@ public AddToRelationshipProcessor(IAddToRelationshipService serv } /// - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); var leftId = (TId)operation.Resource.GetTypedId(); ISet rightResourceIds = operation.GetSecondaryResources(); - await _service.AddToToManyRelationshipAsync(leftId, operation.Request.Relationship.PublicName, rightResourceIds, cancellationToken); + await _service.AddToToManyRelationshipAsync(leftId, operation.Request.Relationship!.PublicName, rightResourceIds, cancellationToken); return null; } diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs index 7307804822..36cb8c573f 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/CreateProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; @@ -27,16 +25,16 @@ public CreateProcessor(ICreateService service, ILocalIdTracker l } /// - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); - TResource newResource = await _service.CreateAsync((TResource)operation.Resource, cancellationToken); + TResource? newResource = await _service.CreateAsync((TResource)operation.Resource, cancellationToken); if (operation.Resource.LocalId != null) { - string serverId = newResource != null ? newResource.StringId : operation.Resource.StringId; - ResourceType resourceType = operation.Request.PrimaryResourceType; + string serverId = newResource != null ? newResource.StringId! : operation.Resource.StringId!; + ResourceType resourceType = operation.Request.PrimaryResourceType!; _localIdTracker.Assign(operation.Resource.LocalId, resourceType.PublicName, serverId); } diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs index e33e8f0f54..29750b395b 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/DeleteProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; @@ -23,7 +21,7 @@ public DeleteProcessor(IDeleteService service) } /// - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs index 9773515c1b..2f7c10a3f7 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IAddToRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs index f166b92633..0f747a9dd0 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/ICreateProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs index 6c8849b4b4..4e5206054d 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IDeleteProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs index 52da2c6977..559bd4cbf4 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IOperationProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -14,6 +12,6 @@ public interface IOperationProcessor /// /// Processes the specified operation. /// - Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken); + Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs index acecd39251..02ce98d21d 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IRemoveFromRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs index 62fe465c08..8dafc839a4 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/ISetRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs index 99961c212a..48847f6ddb 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/IUpdateProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs index e696ad11cc..a186967cf0 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/RemoveFromRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -24,14 +22,14 @@ public RemoveFromRelationshipProcessor(IRemoveFromRelationshipService - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); var leftId = (TId)operation.Resource.GetTypedId(); ISet rightResourceIds = operation.GetSecondaryResources(); - await _service.RemoveFromToManyRelationshipAsync(leftId, operation.Request.Relationship.PublicName, rightResourceIds, cancellationToken); + await _service.RemoveFromToManyRelationshipAsync(leftId, operation.Request.Relationship!.PublicName, rightResourceIds, cancellationToken); return null; } diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs index fea44221f3..bec2a47854 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/SetRelationshipProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Threading; @@ -27,22 +25,22 @@ public SetRelationshipProcessor(ISetRelationshipService service) } /// - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); var leftId = (TId)operation.Resource.GetTypedId(); - object rightValue = GetRelationshipRightValue(operation); + object? rightValue = GetRelationshipRightValue(operation); - await _service.SetRelationshipAsync(leftId, operation.Request.Relationship.PublicName, rightValue, cancellationToken); + await _service.SetRelationshipAsync(leftId, operation.Request.Relationship!.PublicName, rightValue, cancellationToken); return null; } - private object GetRelationshipRightValue(OperationContainer operation) + private object? GetRelationshipRightValue(OperationContainer operation) { - RelationshipAttribute relationship = operation.Request.Relationship; - object rightValue = relationship.GetValue(operation.Resource); + RelationshipAttribute relationship = operation.Request.Relationship!; + object? rightValue = relationship.GetValue(operation.Resource); if (relationship is HasManyAttribute) { diff --git a/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs b/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs index 660ebb2540..f88bf086df 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/Processors/UpdateProcessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JetBrains.Annotations; @@ -23,12 +21,12 @@ public UpdateProcessor(IUpdateService service) } /// - public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) + public virtual async Task ProcessAsync(OperationContainer operation, CancellationToken cancellationToken) { ArgumentGuard.NotNull(operation, nameof(operation)); var resource = (TResource)operation.Resource; - TResource updated = await _service.UpdateAsync(resource.Id, resource, cancellationToken); + TResource? updated = await _service.UpdateAsync(resource.Id, resource, cancellationToken); return updated == null ? null : operation.WithResource(updated); } diff --git a/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs b/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs index 7352c9f21b..b2a1a8daa5 100644 --- a/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs +++ b/src/JsonApiDotNetCore/AtomicOperations/RevertRequestStateOnDispose.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Resources; @@ -12,12 +10,12 @@ namespace JsonApiDotNetCore.AtomicOperations internal sealed class RevertRequestStateOnDispose : IDisposable { private readonly IJsonApiRequest _sourceRequest; - private readonly ITargetedFields _sourceTargetedFields; + private readonly ITargetedFields? _sourceTargetedFields; private readonly IJsonApiRequest _backupRequest = new JsonApiRequest(); private readonly ITargetedFields _backupTargetedFields = new TargetedFields(); - public RevertRequestStateOnDispose(IJsonApiRequest request, ITargetedFields targetedFields) + public RevertRequestStateOnDispose(IJsonApiRequest request, ITargetedFields? targetedFields) { ArgumentGuard.NotNull(request, nameof(request)); diff --git a/src/JsonApiDotNetCore/CollectionConverter.cs b/src/JsonApiDotNetCore/CollectionConverter.cs index 68c9b0d29b..637fbdc6e1 100644 --- a/src/JsonApiDotNetCore/CollectionConverter.cs +++ b/src/JsonApiDotNetCore/CollectionConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -35,11 +33,11 @@ public IEnumerable CopyToTypedCollection(IEnumerable source, Type collectionType ArgumentGuard.NotNull(collectionType, nameof(collectionType)); Type concreteCollectionType = ToConcreteCollectionType(collectionType); - dynamic concreteCollectionInstance = Activator.CreateInstance(concreteCollectionType); + dynamic concreteCollectionInstance = Activator.CreateInstance(concreteCollectionType)!; foreach (object item in source) { - concreteCollectionInstance!.Add((dynamic)item); + concreteCollectionInstance.Add((dynamic)item); } return concreteCollectionInstance; @@ -71,7 +69,7 @@ private Type ToConcreteCollectionType(Type collectionType) /// /// Returns a collection that contains zero, one or multiple resources, depending on the specified value. /// - public ICollection ExtractResources(object value) + public ICollection ExtractResources(object? value) { if (value is ICollection resourceCollection) { @@ -94,7 +92,7 @@ public ICollection ExtractResources(object value) /// /// Returns the element type if the specified type is a generic collection, for example: IList{string} -> string or IList -> null. /// - public Type TryGetCollectionElementType(Type type) + public Type? TryGetCollectionElementType(Type? type) { if (type != null) { @@ -116,6 +114,8 @@ public Type TryGetCollectionElementType(Type type) /// public bool TypeCanContainHashSet(Type collectionType) { + ArgumentGuard.NotNull(collectionType, nameof(collectionType)); + if (collectionType.IsGenericType) { Type openCollectionType = collectionType.GetGenericTypeDefinition(); diff --git a/src/JsonApiDotNetCore/CollectionExtensions.cs b/src/JsonApiDotNetCore/CollectionExtensions.cs index 010f648298..b258fa866d 100644 --- a/src/JsonApiDotNetCore/CollectionExtensions.cs +++ b/src/JsonApiDotNetCore/CollectionExtensions.cs @@ -1,17 +1,15 @@ -#nullable disable - using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.Contracts; using System.Linq; -using JetBrains.Annotations; namespace JsonApiDotNetCore { internal static class CollectionExtensions { [Pure] - [ContractAnnotation("source: null => true")] - public static bool IsNullOrEmpty(this IEnumerable source) + public static bool IsNullOrEmpty([NotNullWhen(false)] this IEnumerable? source) { if (source == null) { @@ -37,10 +35,10 @@ public static int FindIndex(this IReadOnlyList source, Predicate match) return -1; } - public static bool DictionaryEqual(this IReadOnlyDictionary first, IReadOnlyDictionary second, - IEqualityComparer valueComparer = null) + public static bool DictionaryEqual(this IReadOnlyDictionary? first, IReadOnlyDictionary? second, + IEqualityComparer? valueComparer = null) { - if (first == second) + if (ReferenceEquals(first, second)) { return true; } @@ -59,7 +57,7 @@ public static bool DictionaryEqual(this IReadOnlyDictionary(this IReadOnlyDictionary EmptyIfNull(this IEnumerable source) + public static IEnumerable EmptyIfNull(this IEnumerable? source) { return source ?? Enumerable.Empty(); } diff --git a/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs b/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs index 8007020310..740cbdac0f 100644 --- a/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs +++ b/src/JsonApiDotNetCore/Configuration/ApplicationBuilderExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Middleware; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; diff --git a/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs b/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs index bf1850a8e8..4a7aac4ec2 100644 --- a/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs +++ b/src/JsonApiDotNetCore/Configuration/IInverseNavigationResolver.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs b/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs index 170d448dd3..b3f33a1b38 100644 --- a/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/IJsonApiApplicationBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using Microsoft.AspNetCore.Mvc; @@ -7,6 +5,6 @@ namespace JsonApiDotNetCore.Configuration { internal interface IJsonApiApplicationBuilder { - public Action ConfigureMvcOptions { set; } + public Action? ConfigureMvcOptions { set; } } } diff --git a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs index 23bb88b336..f56c49ccf9 100644 --- a/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs +++ b/src/JsonApiDotNetCore/Configuration/IJsonApiOptions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Data; using System.Text.Json; @@ -19,7 +17,7 @@ public interface IJsonApiOptions /// /// options.Namespace = "api/v1"; /// - string Namespace { get; } + string? Namespace { get; } /// /// Specifies the default query string capabilities that can be used on exposed JSON:API attributes. Defaults to . @@ -92,17 +90,17 @@ public interface IJsonApiOptions /// /// The page size (10 by default) that is used when not specified in query string. Set to null to not use paging by default. /// - PageSize DefaultPageSize { get; } + PageSize? DefaultPageSize { get; } /// /// The maximum page size that can be used, or null for unconstrained (default). /// - PageSize MaximumPageSize { get; } + PageSize? MaximumPageSize { get; } /// /// The maximum page number that can be used, or null for unconstrained (default). /// - PageNumber MaximumPageNumber { get; } + PageNumber? MaximumPageNumber { get; } /// /// Whether or not to enable ASP.NET Core model state validation. False by default. diff --git a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs index 6dc376fccc..89684e5d86 100644 --- a/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/IResourceGraph.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq.Expressions; @@ -40,12 +38,12 @@ ResourceType GetResourceType() /// /// Attempts to get the metadata for the resource that is publicly exposed by the specified name. Returns null when not found. /// - ResourceType FindResourceType(string publicName); + ResourceType? FindResourceType(string publicName); /// /// Attempts to get metadata for the resource of the specified CLR type. Returns null when not found. /// - ResourceType FindResourceType(Type resourceClrType); + ResourceType? FindResourceType(Type resourceClrType); /// /// Gets the fields (attributes and relationships) for that are targeted by the selector. @@ -58,7 +56,7 @@ ResourceType GetResourceType() /// (TResource resource) => new { resource.Attribute1, resource.Relationship2 } /// ]]> /// - IReadOnlyCollection GetFields(Expression> selector) + IReadOnlyCollection GetFields(Expression> selector) where TResource : class, IIdentifiable; /// @@ -72,7 +70,7 @@ IReadOnlyCollection GetFields(Expression new { resource.attribute1, resource.Attribute2 } /// ]]> /// - IReadOnlyCollection GetAttributes(Expression> selector) + IReadOnlyCollection GetAttributes(Expression> selector) where TResource : class, IIdentifiable; /// @@ -86,7 +84,7 @@ IReadOnlyCollection GetAttributes(Expression new { resource.Relationship1, resource.Relationship2 } /// ]]> /// - IReadOnlyCollection GetRelationships(Expression> selector) + IReadOnlyCollection GetRelationships(Expression> selector) where TResource : class, IIdentifiable; } } diff --git a/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs b/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs index 9a05444d5d..3814422da6 100644 --- a/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs +++ b/src/JsonApiDotNetCore/Configuration/InverseNavigationResolver.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; @@ -66,7 +64,7 @@ private void ResolveRelationships(IReadOnlyCollection rel { foreach (RelationshipAttribute relationship in relationships) { - if (navigationMap.TryGetValue(relationship.Property.Name, out INavigationBase navigation)) + if (navigationMap.TryGetValue(relationship.Property.Name, out INavigationBase? navigation)) { relationship.InverseNavigationProperty = navigation.Inverse?.PropertyInfo; } diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs b/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs index d7082459d1..31de9b9409 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiApplicationBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -40,7 +38,7 @@ internal sealed class JsonApiApplicationBuilder : IJsonApiApplicationBuilder, ID private readonly ServiceDiscoveryFacade _serviceDiscoveryFacade; private readonly ServiceProvider _intermediateProvider; - public Action ConfigureMvcOptions { get; set; } + public Action? ConfigureMvcOptions { get; set; } public JsonApiApplicationBuilder(IServiceCollection services, IMvcCoreBuilder mvcBuilder) { @@ -60,7 +58,7 @@ public JsonApiApplicationBuilder(IServiceCollection services, IMvcCoreBuilder mv /// /// Executes the action provided by the user to configure . /// - public void ConfigureJsonApiOptions(Action configureOptions) + public void ConfigureJsonApiOptions(Action? configureOptions) { configureOptions?.Invoke(_options); } @@ -68,7 +66,7 @@ public void ConfigureJsonApiOptions(Action configureOptions) /// /// Executes the action provided by the user to configure . /// - public void ConfigureAutoDiscovery(Action configureAutoDiscovery) + public void ConfigureAutoDiscovery(Action? configureAutoDiscovery) { configureAutoDiscovery?.Invoke(_serviceDiscoveryFacade); } @@ -76,8 +74,10 @@ public void ConfigureAutoDiscovery(Action configureAutoD /// /// Configures and builds the resource graph with resources from the provided sources and adds it to the DI container. /// - public void AddResourceGraph(ICollection dbContextTypes, Action configureResourceGraph) + public void ConfigureResourceGraph(ICollection dbContextTypes, Action? configureResourceGraph) { + ArgumentGuard.NotNull(dbContextTypes, nameof(dbContextTypes)); + _serviceDiscoveryFacade.DiscoverResources(); foreach (Type dbContextType in dbContextTypes) @@ -129,6 +129,8 @@ public void DiscoverInjectables() /// public void ConfigureServiceContainer(ICollection dbContextTypes) { + ArgumentGuard.NotNull(dbContextTypes, nameof(dbContextTypes)); + if (dbContextTypes.Any()) { _services.AddScoped(typeof(DbContextResolver<>)); diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs b/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs index 9d561dad8b..07f15db8a6 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiModelMetadataProvider.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ModelBinding; diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs index 8344327369..90585f4876 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiOptions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Data; using System.Text.Encodings.Web; @@ -29,7 +27,7 @@ public sealed class JsonApiOptions : IJsonApiOptions internal bool DisableChildrenPagination { get; set; } /// - public string Namespace { get; set; } + public string? Namespace { get; set; } /// public AttrCapabilities DefaultAttrCapabilities { get; set; } = AttrCapabilities.All; @@ -59,13 +57,13 @@ public sealed class JsonApiOptions : IJsonApiOptions public bool IncludeTotalResourceCount { get; set; } /// - public PageSize DefaultPageSize { get; set; } = new(10); + public PageSize? DefaultPageSize { get; set; } = new(10); /// - public PageSize MaximumPageSize { get; set; } + public PageSize? MaximumPageSize { get; set; } /// - public PageNumber MaximumPageNumber { get; set; } + public PageNumber? MaximumPageNumber { get; set; } /// public bool ValidateModelState { get; set; } diff --git a/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs b/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs index fc90245381..f7ab935b33 100644 --- a/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs +++ b/src/JsonApiDotNetCore/Configuration/JsonApiValidationFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using JsonApiDotNetCore.Middleware; @@ -43,7 +41,7 @@ public bool ShouldValidateEntry(ValidationEntry entry, ValidationEntry parentEnt return false; } - if (_httpContextAccessor.HttpContext!.Request.Method == HttpMethods.Patch || request.WriteOperation == WriteOperationKind.UpdateResource) + if (request.WriteOperation == WriteOperationKind.UpdateResource) { var targetedFields = serviceProvider.GetRequiredService(); return IsFieldTargeted(entry, targetedFields); @@ -54,7 +52,7 @@ public bool ShouldValidateEntry(ValidationEntry entry, ValidationEntry parentEnt private IServiceProvider GetScopedServiceProvider() { - HttpContext httpContext = _httpContextAccessor.HttpContext; + HttpContext? httpContext = _httpContextAccessor.HttpContext; if (httpContext == null) { @@ -76,7 +74,8 @@ private static bool IsAtPrimaryEndpoint(IJsonApiRequest request) private static bool IsFieldTargeted(ValidationEntry entry, ITargetedFields targetedFields) { - return targetedFields.Attributes.Any(attribute => attribute.Property.Name == entry.Key); + return targetedFields.Attributes.Any(attribute => attribute.Property.Name == entry.Key) || + targetedFields.Relationships.Any(relationship => relationship.Property.Name == entry.Key); } } } diff --git a/src/JsonApiDotNetCore/Configuration/PageNumber.cs b/src/JsonApiDotNetCore/Configuration/PageNumber.cs index 257f187956..729000e6f1 100644 --- a/src/JsonApiDotNetCore/Configuration/PageNumber.cs +++ b/src/JsonApiDotNetCore/Configuration/PageNumber.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -22,7 +20,7 @@ public PageNumber(int oneBasedValue) OneBasedValue = oneBasedValue; } - public bool Equals(PageNumber other) + public bool Equals(PageNumber? other) { if (ReferenceEquals(null, other)) { @@ -37,7 +35,7 @@ public bool Equals(PageNumber other) return OneBasedValue == other.OneBasedValue; } - public override bool Equals(object other) + public override bool Equals(object? other) { return Equals(other as PageNumber); } diff --git a/src/JsonApiDotNetCore/Configuration/PageSize.cs b/src/JsonApiDotNetCore/Configuration/PageSize.cs index af71d3c279..460658e064 100644 --- a/src/JsonApiDotNetCore/Configuration/PageSize.cs +++ b/src/JsonApiDotNetCore/Configuration/PageSize.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -20,7 +18,7 @@ public PageSize(int value) Value = value; } - public bool Equals(PageSize other) + public bool Equals(PageSize? other) { if (ReferenceEquals(null, other)) { @@ -35,7 +33,7 @@ public bool Equals(PageSize other) return Value == other.Value; } - public override bool Equals(object other) + public override bool Equals(object? other) { return Equals(other as PageSize); } diff --git a/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs b/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs index 45bbbe9f42..aaad96abb8 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceDescriptor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Configuration @@ -11,6 +9,9 @@ internal sealed class ResourceDescriptor public ResourceDescriptor(Type resourceClrType, Type idClrType) { + ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); + ArgumentGuard.NotNull(idClrType, nameof(idClrType)); + ResourceClrType = resourceClrType; IdClrType = idClrType; } diff --git a/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs b/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs index ad6a0c01bd..dc9d1a88b3 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceDescriptorAssemblyCache.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -13,7 +11,7 @@ namespace JsonApiDotNetCore.Configuration internal sealed class ResourceDescriptorAssemblyCache { private readonly TypeLocator _typeLocator = new(); - private readonly Dictionary> _resourceDescriptorsPerAssembly = new(); + private readonly Dictionary?> _resourceDescriptorsPerAssembly = new(); public void RegisterAssembly(Assembly assembly) { @@ -27,7 +25,7 @@ public IReadOnlyCollection GetResourceDescriptors() { EnsureAssembliesScanned(); - return _resourceDescriptorsPerAssembly.SelectMany(pair => pair.Value).ToArray(); + return _resourceDescriptorsPerAssembly.SelectMany(pair => pair.Value!).ToArray(); } public IReadOnlyCollection GetAssemblies() @@ -49,7 +47,7 @@ private IEnumerable ScanForResourceDescriptors(Assembly asse { foreach (Type type in assembly.GetTypes()) { - ResourceDescriptor resourceDescriptor = _typeLocator.TryGetResourceDescriptor(type); + ResourceDescriptor? resourceDescriptor = _typeLocator.TryGetResourceDescriptor(type); if (resourceDescriptor != null) { diff --git a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs index 48b2ba5225..418c1ba0b7 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceGraph.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -15,7 +13,7 @@ namespace JsonApiDotNetCore.Configuration [PublicAPI] public sealed class ResourceGraph : IResourceGraph { - private static readonly Type ProxyTargetAccessorType = Type.GetType("Castle.DynamicProxy.IProxyTargetAccessor, Castle.Core"); + private static readonly Type? ProxyTargetAccessorType = Type.GetType("Castle.DynamicProxy.IProxyTargetAccessor, Castle.Core"); private readonly IReadOnlySet _resourceTypeSet; private readonly Dictionary _resourceTypesByClrType = new(); @@ -43,7 +41,7 @@ public IReadOnlySet GetResourceTypes() /// public ResourceType GetResourceType(string publicName) { - ResourceType resourceType = FindResourceType(publicName); + ResourceType? resourceType = FindResourceType(publicName); if (resourceType == null) { @@ -54,17 +52,17 @@ public ResourceType GetResourceType(string publicName) } /// - public ResourceType FindResourceType(string publicName) + public ResourceType? FindResourceType(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); - return _resourceTypesByPublicName.TryGetValue(publicName, out ResourceType resourceType) ? resourceType : null; + return _resourceTypesByPublicName.TryGetValue(publicName, out ResourceType? resourceType) ? resourceType : null; } /// public ResourceType GetResourceType(Type resourceClrType) { - ResourceType resourceType = FindResourceType(resourceClrType); + ResourceType? resourceType = FindResourceType(resourceClrType); if (resourceType == null) { @@ -75,12 +73,12 @@ public ResourceType GetResourceType(Type resourceClrType) } /// - public ResourceType FindResourceType(Type resourceClrType) + public ResourceType? FindResourceType(Type resourceClrType) { ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); - Type typeToFind = IsLazyLoadingProxyForResourceType(resourceClrType) ? resourceClrType.BaseType : resourceClrType; - return _resourceTypesByClrType.TryGetValue(typeToFind!, out ResourceType resourceType) ? resourceType : null; + Type typeToFind = IsLazyLoadingProxyForResourceType(resourceClrType) ? resourceClrType.BaseType! : resourceClrType; + return _resourceTypesByClrType.TryGetValue(typeToFind, out ResourceType? resourceType) ? resourceType : null; } private bool IsLazyLoadingProxyForResourceType(Type resourceClrType) @@ -96,7 +94,7 @@ public ResourceType GetResourceType() } /// - public IReadOnlyCollection GetFields(Expression> selector) + public IReadOnlyCollection GetFields(Expression> selector) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(selector, nameof(selector)); @@ -105,7 +103,7 @@ public IReadOnlyCollection GetFields(Expressi } /// - public IReadOnlyCollection GetAttributes(Expression> selector) + public IReadOnlyCollection GetAttributes(Expression> selector) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(selector, nameof(selector)); @@ -114,7 +112,7 @@ public IReadOnlyCollection GetAttributes(Expression - public IReadOnlyCollection GetRelationships(Expression> selector) + public IReadOnlyCollection GetRelationships(Expression> selector) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(selector, nameof(selector)); @@ -122,7 +120,7 @@ public IReadOnlyCollection GetRelationships(Ex return FilterFields(selector); } - private IReadOnlyCollection FilterFields(Expression> selector) + private IReadOnlyCollection FilterFields(Expression> selector) where TResource : class, IIdentifiable where TField : ResourceFieldAttribute { @@ -131,7 +129,7 @@ private IReadOnlyCollection FilterFields(Expression field.Property.Name == memberName); + TField? matchingField = source.FirstOrDefault(field => field.Property.Name == memberName); if (matchingField == null) { @@ -162,7 +160,7 @@ private IReadOnlyCollection GetFieldsOfType() return (IReadOnlyCollection)resourceType.Fields; } - private IEnumerable ToMemberNames(Expression> selector) + private IEnumerable ToMemberNames(Expression> selector) { Expression selectorBody = RemoveConvert(selector.Body); diff --git a/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs b/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs index 0fe2a260a3..e9e0e3c04d 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceGraphBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -44,8 +42,8 @@ public IResourceGraph Build() foreach (RelationshipAttribute relationship in _resourceTypes.SelectMany(resourceType => resourceType.Relationships)) { - relationship.LeftType = resourceGraph.GetResourceType(relationship.LeftClrType); - relationship.RightType = resourceGraph.GetResourceType(relationship.RightClrType); + relationship.LeftType = resourceGraph.GetResourceType(relationship.LeftClrType!); + relationship.RightType = resourceGraph.GetResourceType(relationship.RightClrType!); } return resourceGraph; @@ -83,7 +81,7 @@ private static bool IsImplicitManyToManyJoinEntity(IEntityType entityType) /// The name under which the resource is publicly exposed by the API. If nothing is specified, the naming convention is applied on the pluralized CLR /// type name. /// - public ResourceGraphBuilder Add(string publicName = null) + public ResourceGraphBuilder Add(string? publicName = null) where TResource : class, IIdentifiable { return Add(publicName); @@ -102,7 +100,7 @@ public ResourceGraphBuilder Add(string publicName = null) /// The name under which the resource is publicly exposed by the API. If nothing is specified, the naming convention is applied on the pluralized CLR /// type name. /// - public ResourceGraphBuilder Add(string publicName = null) + public ResourceGraphBuilder Add(string? publicName = null) where TResource : class, IIdentifiable { return Add(typeof(TResource), typeof(TId), publicName); @@ -121,7 +119,7 @@ public ResourceGraphBuilder Add(string publicName = null) /// The name under which the resource is publicly exposed by the API. If nothing is specified, the naming convention is applied on the pluralized CLR /// type name. /// - public ResourceGraphBuilder Add(Type resourceClrType, Type idClrType = null, string publicName = null) + public ResourceGraphBuilder Add(Type resourceClrType, Type? idClrType = null, string? publicName = null) { ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); @@ -133,7 +131,7 @@ public ResourceGraphBuilder Add(Type resourceClrType, Type idClrType = null, str if (resourceClrType.IsOrImplementsInterface(typeof(IIdentifiable))) { string effectivePublicName = publicName ?? FormatResourceName(resourceClrType); - Type effectiveIdType = idClrType ?? _typeLocator.TryGetIdType(resourceClrType); + Type? effectiveIdType = idClrType ?? _typeLocator.TryGetIdType(resourceClrType); if (effectiveIdType == null) { @@ -157,7 +155,7 @@ private ResourceType CreateResourceType(string publicName, Type resourceClrType, IReadOnlyCollection relationships = GetRelationships(resourceClrType); IReadOnlyCollection eagerLoads = GetEagerLoads(resourceClrType); - var linksAttribute = (ResourceLinksAttribute)resourceClrType.GetCustomAttribute(typeof(ResourceLinksAttribute)); + var linksAttribute = (ResourceLinksAttribute?)resourceClrType.GetCustomAttribute(typeof(ResourceLinksAttribute)); return linksAttribute == null ? new ResourceType(publicName, resourceClrType, idClrType, attributes, relationships, eagerLoads) @@ -171,12 +169,10 @@ private IReadOnlyCollection GetAttributes(Type resourceClrType) foreach (PropertyInfo property in resourceClrType.GetProperties()) { - var attribute = (AttrAttribute)property.GetCustomAttribute(typeof(AttrAttribute)); - // Although strictly not correct, 'id' is added to the list of attributes for convenience. // For example, it enables to filter on ID, without the need to special-case existing logic. // And when using sparse fields, it silently adds 'id' to the set of attributes to retrieve. - if (property.Name == nameof(Identifiable.Id) && attribute == null) + if (property.Name == nameof(Identifiable.Id)) { var idAttr = new AttrAttribute { @@ -189,12 +185,14 @@ private IReadOnlyCollection GetAttributes(Type resourceClrType) continue; } + var attribute = (AttrAttribute?)property.GetCustomAttribute(typeof(AttrAttribute)); + if (attribute == null) { continue; } - attribute.PublicName ??= FormatPropertyName(property); + SetPublicName(attribute, property); attribute.Property = property; if (!attribute.HasExplicitCapabilities) @@ -215,12 +213,12 @@ private IReadOnlyCollection GetRelationships(Type resourc foreach (PropertyInfo property in properties) { - var relationship = (RelationshipAttribute)property.GetCustomAttribute(typeof(RelationshipAttribute)); + var relationship = (RelationshipAttribute?)property.GetCustomAttribute(typeof(RelationshipAttribute)); if (relationship != null) { relationship.Property = property; - relationship.PublicName ??= FormatPropertyName(property); + SetPublicName(relationship, property); relationship.LeftClrType = resourceClrType; relationship.RightClrType = GetRelationshipType(relationship, property); @@ -231,6 +229,12 @@ private IReadOnlyCollection GetRelationships(Type resourc return relationships; } + private void SetPublicName(ResourceFieldAttribute field, PropertyInfo property) + { + // ReSharper disable once ConstantNullCoalescingCondition + field.PublicName ??= FormatPropertyName(property); + } + private Type GetRelationshipType(RelationshipAttribute relationship, PropertyInfo property) { ArgumentGuard.NotNull(relationship, nameof(relationship)); @@ -248,18 +252,18 @@ private IReadOnlyCollection GetEagerLoads(Type resourceClrTy foreach (PropertyInfo property in properties) { - var attribute = (EagerLoadAttribute)property.GetCustomAttribute(typeof(EagerLoadAttribute)); + var eagerLoad = (EagerLoadAttribute?)property.GetCustomAttribute(typeof(EagerLoadAttribute)); - if (attribute == null) + if (eagerLoad == null) { continue; } Type innerType = TypeOrElementType(property.PropertyType); - attribute.Children = GetEagerLoads(innerType, recursionDepth + 1); - attribute.Property = property; + eagerLoad.Children = GetEagerLoads(innerType, recursionDepth + 1); + eagerLoad.Property = property; - attributes.Add(attribute); + attributes.Add(eagerLoad); } return attributes; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs b/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs index 7a9f6ab3ec..c6be029b1b 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceNameFormatter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Reflection; using System.Text.Json; @@ -10,9 +8,9 @@ namespace JsonApiDotNetCore.Configuration { internal sealed class ResourceNameFormatter { - private readonly JsonNamingPolicy _namingPolicy; + private readonly JsonNamingPolicy? _namingPolicy; - public ResourceNameFormatter(JsonNamingPolicy namingPolicy) + public ResourceNameFormatter(JsonNamingPolicy? namingPolicy) { _namingPolicy = namingPolicy; } @@ -22,6 +20,8 @@ public ResourceNameFormatter(JsonNamingPolicy namingPolicy) /// public string FormatResourceName(Type resourceClrType) { + ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); + if (resourceClrType.GetCustomAttribute(typeof(ResourceAttribute)) is ResourceAttribute attribute) { return attribute.PublicName; diff --git a/src/JsonApiDotNetCore/Configuration/ResourceType.cs b/src/JsonApiDotNetCore/Configuration/ResourceType.cs index 873cc63ead..2f71fa5d2b 100644 --- a/src/JsonApiDotNetCore/Configuration/ResourceType.cs +++ b/src/JsonApiDotNetCore/Configuration/ResourceType.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -80,8 +78,8 @@ public sealed class ResourceType /// public LinkTypes RelationshipLinks { get; } - public ResourceType(string publicName, Type clrType, Type identityClrType, IReadOnlyCollection attributes = null, - IReadOnlyCollection relationships = null, IReadOnlyCollection eagerLoads = null, + public ResourceType(string publicName, Type clrType, Type identityClrType, IReadOnlyCollection? attributes = null, + IReadOnlyCollection? relationships = null, IReadOnlyCollection? eagerLoads = null, LinkTypes topLevelLinks = LinkTypes.NotConfigured, LinkTypes resourceLinks = LinkTypes.NotConfigured, LinkTypes relationshipLinks = LinkTypes.NotConfigured) { @@ -109,60 +107,60 @@ public ResourceType(string publicName, Type clrType, Type identityClrType, IRead public AttrAttribute GetAttributeByPublicName(string publicName) { - AttrAttribute attribute = FindAttributeByPublicName(publicName); + AttrAttribute? attribute = FindAttributeByPublicName(publicName); return attribute ?? throw new InvalidOperationException($"Attribute '{publicName}' does not exist on resource type '{PublicName}'."); } - public AttrAttribute FindAttributeByPublicName(string publicName) + public AttrAttribute? FindAttributeByPublicName(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); - return _fieldsByPublicName.TryGetValue(publicName, out ResourceFieldAttribute field) && field is AttrAttribute attribute ? attribute : null; + return _fieldsByPublicName.TryGetValue(publicName, out ResourceFieldAttribute? field) && field is AttrAttribute attribute ? attribute : null; } public AttrAttribute GetAttributeByPropertyName(string propertyName) { - AttrAttribute attribute = FindAttributeByPropertyName(propertyName); + AttrAttribute? attribute = FindAttributeByPropertyName(propertyName); return attribute ?? throw new InvalidOperationException($"Attribute for property '{propertyName}' does not exist on resource type '{ClrType.Name}'."); } - public AttrAttribute FindAttributeByPropertyName(string propertyName) + public AttrAttribute? FindAttributeByPropertyName(string propertyName) { ArgumentGuard.NotNull(propertyName, nameof(propertyName)); - return _fieldsByPropertyName.TryGetValue(propertyName, out ResourceFieldAttribute field) && field is AttrAttribute attribute ? attribute : null; + return _fieldsByPropertyName.TryGetValue(propertyName, out ResourceFieldAttribute? field) && field is AttrAttribute attribute ? attribute : null; } public RelationshipAttribute GetRelationshipByPublicName(string publicName) { - RelationshipAttribute relationship = FindRelationshipByPublicName(publicName); + RelationshipAttribute? relationship = FindRelationshipByPublicName(publicName); return relationship ?? throw new InvalidOperationException($"Relationship '{publicName}' does not exist on resource type '{PublicName}'."); } - public RelationshipAttribute FindRelationshipByPublicName(string publicName) + public RelationshipAttribute? FindRelationshipByPublicName(string publicName) { ArgumentGuard.NotNull(publicName, nameof(publicName)); - return _fieldsByPublicName.TryGetValue(publicName, out ResourceFieldAttribute field) && field is RelationshipAttribute relationship + return _fieldsByPublicName.TryGetValue(publicName, out ResourceFieldAttribute? field) && field is RelationshipAttribute relationship ? relationship : null; } public RelationshipAttribute GetRelationshipByPropertyName(string propertyName) { - RelationshipAttribute relationship = FindRelationshipByPropertyName(propertyName); + RelationshipAttribute? relationship = FindRelationshipByPropertyName(propertyName); return relationship ?? throw new InvalidOperationException($"Relationship for property '{propertyName}' does not exist on resource type '{ClrType.Name}'."); } - public RelationshipAttribute FindRelationshipByPropertyName(string propertyName) + public RelationshipAttribute? FindRelationshipByPropertyName(string propertyName) { ArgumentGuard.NotNull(propertyName, nameof(propertyName)); - return _fieldsByPropertyName.TryGetValue(propertyName, out ResourceFieldAttribute field) && field is RelationshipAttribute relationship + return _fieldsByPropertyName.TryGetValue(propertyName, out ResourceFieldAttribute? field) && field is RelationshipAttribute relationship ? relationship : null; } @@ -172,7 +170,7 @@ public override string ToString() return PublicName; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs index 932bdea361..18fda59d27 100644 --- a/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs +++ b/src/JsonApiDotNetCore/Configuration/ServiceCollectionExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -21,9 +19,9 @@ public static class ServiceCollectionExtensions /// /// Configures JsonApiDotNetCore by registering resources manually. /// - public static IServiceCollection AddJsonApi(this IServiceCollection services, Action options = null, - Action discovery = null, Action resources = null, IMvcCoreBuilder mvcBuilder = null, - ICollection dbContextTypes = null) + public static IServiceCollection AddJsonApi(this IServiceCollection services, Action? options = null, + Action? discovery = null, Action? resources = null, IMvcCoreBuilder? mvcBuilder = null, + ICollection? dbContextTypes = null) { ArgumentGuard.NotNull(services, nameof(services)); @@ -35,22 +33,22 @@ public static IServiceCollection AddJsonApi(this IServiceCollection services, Ac /// /// Configures JsonApiDotNetCore by registering resources from an Entity Framework Core model. /// - public static IServiceCollection AddJsonApi(this IServiceCollection services, Action options = null, - Action discovery = null, Action resources = null, IMvcCoreBuilder mvcBuilder = null) + public static IServiceCollection AddJsonApi(this IServiceCollection services, Action? options = null, + Action? discovery = null, Action? resources = null, IMvcCoreBuilder? mvcBuilder = null) where TDbContext : DbContext { return AddJsonApi(services, options, discovery, resources, mvcBuilder, typeof(TDbContext).AsArray()); } - private static void SetupApplicationBuilder(IServiceCollection services, Action configureOptions, - Action configureAutoDiscovery, Action configureResourceGraph, IMvcCoreBuilder mvcBuilder, + private static void SetupApplicationBuilder(IServiceCollection services, Action? configureOptions, + Action? configureAutoDiscovery, Action? configureResources, IMvcCoreBuilder? mvcBuilder, ICollection dbContextTypes) { using var applicationBuilder = new JsonApiApplicationBuilder(services, mvcBuilder ?? services.AddMvcCore()); applicationBuilder.ConfigureJsonApiOptions(configureOptions); applicationBuilder.ConfigureAutoDiscovery(configureAutoDiscovery); - applicationBuilder.AddResourceGraph(dbContextTypes, configureResourceGraph); + applicationBuilder.ConfigureResourceGraph(dbContextTypes, configureResources); applicationBuilder.ConfigureMvc(); applicationBuilder.DiscoverInjectables(); applicationBuilder.ConfigureServiceContainer(dbContextTypes); @@ -98,7 +96,7 @@ public static IServiceCollection AddResourceDefinition(this private static void RegisterForConstructedType(IServiceCollection services, Type implementationType, IEnumerable openGenericInterfaces) { bool seenCompatibleInterface = false; - ResourceDescriptor resourceDescriptor = TryGetResourceTypeFromServiceImplementation(implementationType); + ResourceDescriptor? resourceDescriptor = TryGetResourceTypeFromServiceImplementation(implementationType); if (resourceDescriptor != null) { @@ -120,14 +118,14 @@ private static void RegisterForConstructedType(IServiceCollection services, Type } } - private static ResourceDescriptor TryGetResourceTypeFromServiceImplementation(Type serviceType) + private static ResourceDescriptor? TryGetResourceTypeFromServiceImplementation(Type? serviceType) { if (serviceType != null) { foreach (Type @interface in serviceType.GetInterfaces()) { - Type firstGenericArgument = @interface.IsGenericType ? @interface.GenericTypeArguments.First() : null; - ResourceDescriptor resourceDescriptor = TypeLocator.TryGetResourceDescriptor(firstGenericArgument); + Type? firstGenericArgument = @interface.IsGenericType ? @interface.GenericTypeArguments.First() : null; + ResourceDescriptor? resourceDescriptor = TypeLocator.TryGetResourceDescriptor(firstGenericArgument); if (resourceDescriptor != null) { diff --git a/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs b/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs index 149e4338e2..cdd6a65031 100644 --- a/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs +++ b/src/JsonApiDotNetCore/Configuration/ServiceDiscoveryFacade.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Reflection; diff --git a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs index 7266fbee23..04321e373e 100644 --- a/src/JsonApiDotNetCore/Configuration/TypeLocator.cs +++ b/src/JsonApiDotNetCore/Configuration/TypeLocator.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -16,9 +14,9 @@ internal sealed class TypeLocator /// /// Attempts to lookup the ID type of the specified resource type. Returns null if it does not implement . /// - public Type TryGetIdType(Type resourceClrType) + public Type? TryGetIdType(Type? resourceClrType) { - Type identifiableInterface = resourceClrType?.GetInterfaces().FirstOrDefault(@interface => + Type? identifiableInterface = resourceClrType?.GetInterfaces().FirstOrDefault(@interface => @interface.IsGenericType && @interface.GetGenericTypeDefinition() == typeof(IIdentifiable<>)); return identifiableInterface?.GetGenericArguments()[0]; @@ -27,11 +25,11 @@ public Type TryGetIdType(Type resourceClrType) /// /// Attempts to get a descriptor for the specified resource type. /// - public ResourceDescriptor TryGetResourceDescriptor(Type type) + public ResourceDescriptor? TryGetResourceDescriptor(Type? type) { if (type != null && type.IsOrImplementsInterface(typeof(IIdentifiable))) { - Type idType = TryGetIdType(type); + Type? idType = TryGetIdType(type); if (idType != null) { @@ -128,6 +126,10 @@ private static (Type implementation, Type registrationInterface)? FindGenericInt /// public IReadOnlyCollection GetDerivedGenericTypes(Assembly assembly, Type openGenericType, params Type[] genericArguments) { + ArgumentGuard.NotNull(assembly, nameof(assembly)); + ArgumentGuard.NotNull(openGenericType, nameof(openGenericType)); + ArgumentGuard.NotNull(genericArguments, nameof(genericArguments)); + Type genericType = openGenericType.MakeGenericType(genericArguments); return GetDerivedTypes(assembly, genericType).ToArray(); } @@ -148,6 +150,9 @@ public IReadOnlyCollection GetDerivedGenericTypes(Assembly assembly, Type /// public IEnumerable GetDerivedTypes(Assembly assembly, Type inheritedType) { + ArgumentGuard.NotNull(assembly, nameof(assembly)); + ArgumentGuard.NotNull(inheritedType, nameof(inheritedType)); + foreach (Type type in assembly.GetTypes()) { if (inheritedType.IsAssignableFrom(type)) diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs index 11b4bd02e0..3323ba13a5 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/DisableQueryStringAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs index 07bbec73ec..5cd68b2e6f 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/DisableRoutingConventionAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs index 68db2d9aba..b4c0fb7675 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/HttpReadOnlyAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs index 45393f9d77..c2534471f9 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/HttpRestrictAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Linq; using System.Net.Http; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs index 818efaa4f6..93733d6885 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpDeleteAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs index 6ad64044ad..29a84b386a 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPatchAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs index 6eadafab59..1d47890739 100644 --- a/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs +++ b/src/JsonApiDotNetCore/Controllers/Annotations/NoHttpPostAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Controllers.Annotations diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs index c8908fdb22..7dcd4d3ef2 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Net.Http; using System.Threading; @@ -27,16 +25,16 @@ public abstract class BaseJsonApiController : CoreJsonApiControl where TResource : class, IIdentifiable { private readonly IJsonApiOptions _options; - private readonly IGetAllService _getAll; - private readonly IGetByIdService _getById; - private readonly IGetSecondaryService _getSecondary; - private readonly IGetRelationshipService _getRelationship; - private readonly ICreateService _create; - private readonly IAddToRelationshipService _addToRelationship; - private readonly IUpdateService _update; - private readonly ISetRelationshipService _setRelationship; - private readonly IDeleteService _delete; - private readonly IRemoveFromRelationshipService _removeFromRelationship; + private readonly IGetAllService? _getAll; + private readonly IGetByIdService? _getById; + private readonly IGetSecondaryService? _getSecondary; + private readonly IGetRelationshipService? _getRelationship; + private readonly ICreateService? _create; + private readonly IAddToRelationshipService? _addToRelationship; + private readonly IUpdateService? _update; + private readonly ISetRelationshipService? _setRelationship; + private readonly IDeleteService? _delete; + private readonly IRemoveFromRelationshipService? _removeFromRelationship; private readonly TraceLogWriter> _traceWriter; /// @@ -50,8 +48,8 @@ protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFa /// /// Creates an instance from separate services for reading and writing. /// - protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceQueryService queryService = null, - IResourceCommandService commandService = null) + protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceQueryService? queryService = null, + IResourceCommandService? commandService = null) : this(options, loggerFactory, queryService, queryService, queryService, queryService, commandService, commandService, commandService, commandService, commandService, commandService) { @@ -60,12 +58,12 @@ protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFa /// /// Creates an instance from separate services for the various individual read and write methods. /// - protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService getAll = null, - IGetByIdService getById = null, IGetSecondaryService getSecondary = null, - IGetRelationshipService getRelationship = null, ICreateService create = null, - IAddToRelationshipService addToRelationship = null, IUpdateService update = null, - ISetRelationshipService setRelationship = null, IDeleteService delete = null, - IRemoveFromRelationshipService removeFromRelationship = null) + protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService? getAll = null, + IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, + IGetRelationshipService? getRelationship = null, ICreateService? create = null, + IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, + ISetRelationshipService? setRelationship = null, IDeleteService? delete = null, + IRemoveFromRelationshipService? removeFromRelationship = null) { ArgumentGuard.NotNull(options, nameof(options)); ArgumentGuard.NotNull(loggerFactory, nameof(loggerFactory)); @@ -139,9 +137,9 @@ public virtual async Task GetSecondaryAsync(TId id, string relati throw new RequestMethodNotAllowedException(HttpMethod.Get); } - object relationship = await _getSecondary.GetSecondaryAsync(id, relationshipName, cancellationToken); + object? rightValue = await _getSecondary.GetSecondaryAsync(id, relationshipName, cancellationToken); - return Ok(relationship); + return Ok(rightValue); } /// @@ -162,9 +160,9 @@ public virtual async Task GetRelationshipAsync(TId id, string rel throw new RequestMethodNotAllowedException(HttpMethod.Get); } - object rightResources = await _getRelationship.GetRelationshipAsync(id, relationshipName, cancellationToken); + object? rightValue = await _getRelationship.GetRelationshipAsync(id, relationshipName, cancellationToken); - return Ok(rightResources); + return Ok(rightValue); } /// @@ -190,9 +188,9 @@ public virtual async Task PostAsync([FromBody] TResource resource _options.SerializerOptions.PropertyNamingPolicy); } - TResource newResource = await _create.CreateAsync(resource, cancellationToken); + TResource? newResource = await _create.CreateAsync(resource, cancellationToken); - string resourceId = (newResource ?? resource).StringId; + string resourceId = (newResource ?? resource).StringId!; string locationUrl = $"{HttpContext.Request.Path}/{resourceId}"; if (newResource == null) @@ -267,7 +265,7 @@ public virtual async Task PatchAsync(TId id, [FromBody] TResource _options.SerializerOptions.PropertyNamingPolicy); } - TResource updated = await _update.UpdateAsync(id, resource, cancellationToken); + TResource? updated = await _update.UpdateAsync(id, resource, cancellationToken); return updated == null ? NoContent() : Ok(updated); } @@ -287,7 +285,7 @@ public virtual async Task PatchAsync(TId id, [FromBody] TResource /// /// Propagates notification that request handling should be canceled. /// - public virtual async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object rightValue, + public virtual async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object? rightValue, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs index 19fdb101ea..2b7344918e 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -120,7 +118,7 @@ public virtual async Task PostOperationsAsync([FromBody] IList results = await _processor.ProcessAsync(operations, cancellationToken); + IList results = await _processor.ProcessAsync(operations, cancellationToken); return results.Any(result => result != null) ? Ok(results) : NoContent(); } diff --git a/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs index 24bafa80df..7bb96adedf 100644 --- a/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/CoreJsonApiController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using JsonApiDotNetCore.Serialization.Objects; @@ -24,14 +22,18 @@ protected IActionResult Error(ErrorObject error) protected IActionResult Error(IEnumerable errors) { - ArgumentGuard.NotNull(errors, nameof(errors)); - - ErrorObject[] errorArray = errors.ToArray(); + IReadOnlyList? errorList = ToErrorList(errors); + ArgumentGuard.NotNullNorEmpty(errorList, nameof(errors)); - return new ObjectResult(errorArray) + return new ObjectResult(errorList) { - StatusCode = (int)ErrorObject.GetResponseStatusCode(errorArray) + StatusCode = (int)ErrorObject.GetResponseStatusCode(errorList) }; } + + private static IReadOnlyList? ToErrorList(IEnumerable? errors) + { + return errors?.ToArray(); + } } } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs index 9ae033e399..3e463e9b4a 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -57,7 +55,7 @@ public override async Task PatchAsync(TId id, [FromBody] TResourc /// [HttpPatch("{id}/relationships/{relationshipName}")] - public override async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object rightValue, + public override async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object? rightValue, CancellationToken cancellationToken) { return await base.PatchRelationshipAsync(id, relationshipName, rightValue, cancellationToken); diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index 3d1e2356c4..1bccc8478a 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -31,12 +29,12 @@ protected JsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactor } /// - protected JsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService getAll = null, - IGetByIdService getById = null, IGetSecondaryService getSecondary = null, - IGetRelationshipService getRelationship = null, ICreateService create = null, - IAddToRelationshipService addToRelationship = null, IUpdateService update = null, - ISetRelationshipService setRelationship = null, IDeleteService delete = null, - IRemoveFromRelationshipService removeFromRelationship = null) + protected JsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService? getAll = null, + IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, + IGetRelationshipService? getRelationship = null, ICreateService? create = null, + IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, + ISetRelationshipService? setRelationship = null, IDeleteService? delete = null, + IRemoveFromRelationshipService? removeFromRelationship = null) : base(options, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, delete, removeFromRelationship) { @@ -98,7 +96,7 @@ public override async Task PatchAsync(TId id, [FromBody] TResourc /// [HttpPatch("{id}/relationships/{relationshipName}")] - public override async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object rightValue, + public override async Task PatchRelationshipAsync(TId id, string relationshipName, [FromBody] object? rightValue, CancellationToken cancellationToken) { return await base.PatchRelationshipAsync(id, relationshipName, rightValue, cancellationToken); diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs index e4cf8a4be0..7e8e4956ac 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs index 558764c64e..05446ca2b1 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs b/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs index dc27a0b534..49a935a7ef 100644 --- a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs +++ b/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.ModelBinding; diff --git a/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs index 17129f81d8..997580b00e 100644 --- a/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/AspNetCodeTimerSession.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; @@ -16,15 +14,15 @@ public sealed class AspNetCodeTimerSession : ICodeTimerSession { private const string HttpContextItemKey = "CascadingCodeTimer:Session"; - private readonly HttpContext _httpContext; - private readonly IHttpContextAccessor _httpContextAccessor; + private readonly HttpContext? _httpContext; + private readonly IHttpContextAccessor? _httpContextAccessor; public ICodeTimer CodeTimer { get { HttpContext httpContext = GetHttpContext(); - var codeTimer = (ICodeTimer)httpContext.Items[HttpContextItemKey]; + var codeTimer = (ICodeTimer?)httpContext.Items[HttpContextItemKey]; if (codeTimer == null) { @@ -36,7 +34,7 @@ public ICodeTimer CodeTimer } } - public event EventHandler Disposed; + public event EventHandler? Disposed; public AspNetCodeTimerSession(IHttpContextAccessor httpContextAccessor) { @@ -54,13 +52,13 @@ public AspNetCodeTimerSession(HttpContext httpContext) public void Dispose() { - HttpContext httpContext = TryGetHttpContext(); - var codeTimer = (ICodeTimer)httpContext?.Items[HttpContextItemKey]; + HttpContext? httpContext = TryGetHttpContext(); + var codeTimer = (ICodeTimer?)httpContext?.Items[HttpContextItemKey]; if (codeTimer != null) { codeTimer.Dispose(); - httpContext.Items[HttpContextItemKey] = null; + httpContext!.Items[HttpContextItemKey] = null; } OnDisposed(); @@ -73,11 +71,11 @@ private void OnDisposed() private HttpContext GetHttpContext() { - HttpContext httpContext = TryGetHttpContext(); + HttpContext? httpContext = TryGetHttpContext(); return httpContext ?? throw new InvalidOperationException("An active HTTP request is required."); } - private HttpContext TryGetHttpContext() + private HttpContext? TryGetHttpContext() { return _httpContext ?? _httpContextAccessor?.HttpContext; } diff --git a/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs index 2b9be7fc86..3b8d5ced72 100644 --- a/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/CascadingCodeTimer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Diagnostics; @@ -47,7 +45,7 @@ public IDisposable Measure(string name, bool excludeInRelativeCost = false) private MeasureScope CreateChildScope(string name, bool excludeInRelativeCost) { - if (_activeScopeStack.TryPeek(out MeasureScope topScope)) + if (_activeScopeStack.TryPeek(out MeasureScope? topScope)) { return topScope.SpawnChild(this, name, excludeInRelativeCost); } @@ -57,7 +55,7 @@ private MeasureScope CreateChildScope(string name, bool excludeInRelativeCost) private void Close(MeasureScope scope) { - if (!_activeScopeStack.TryPeek(out MeasureScope topScope) || topScope != scope) + if (!_activeScopeStack.TryPeek(out MeasureScope? topScope) || topScope != scope) { throw new InvalidOperationException($"Scope '{scope.Name}' cannot be disposed at this time, because it is not the currently active scope."); } diff --git a/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs b/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs index 9f34cc5e46..2d6b8eaae9 100644 --- a/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs +++ b/src/JsonApiDotNetCore/Diagnostics/CodeTimingSessionManager.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using System.Reflection; @@ -15,7 +13,7 @@ namespace JsonApiDotNetCore.Diagnostics public static class CodeTimingSessionManager { public static readonly bool IsEnabled; - private static ICodeTimerSession _session; + private static ICodeTimerSession? _session; public static ICodeTimer Current { @@ -28,7 +26,7 @@ public static ICodeTimer Current AssertHasActiveSession(); - return _session.CodeTimer; + return _session!.CodeTimer; } } @@ -85,7 +83,7 @@ private static void AssertNoActiveSession() } } - private static void SessionOnDisposed(object sender, EventArgs args) + private static void SessionOnDisposed(object? sender, EventArgs args) { if (_session != null) { diff --git a/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs index 7d69d6e961..d35d08cd1f 100644 --- a/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/DefaultCodeTimerSession.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; @@ -11,7 +9,7 @@ namespace JsonApiDotNetCore.Diagnostics /// public sealed class DefaultCodeTimerSession : ICodeTimerSession { - private readonly AsyncLocal _codeTimerInContext = new(); + private readonly AsyncLocal _codeTimerInContext = new(); public ICodeTimer CodeTimer { @@ -19,11 +17,11 @@ public ICodeTimer CodeTimer { AssertNotDisposed(); - return _codeTimerInContext.Value; + return _codeTimerInContext.Value!; } } - public event EventHandler Disposed; + public event EventHandler? Disposed; public DefaultCodeTimerSession() { diff --git a/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs index 9d422d8ff5..1739ed3e81 100644 --- a/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/DisabledCodeTimer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs b/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs index 41502c3237..9e8abfe9e1 100644 --- a/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs +++ b/src/JsonApiDotNetCore/Diagnostics/ICodeTimer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs b/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs index c4d9ec7e9f..5da473c38d 100644 --- a/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs +++ b/src/JsonApiDotNetCore/Diagnostics/ICodeTimerSession.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs b/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs index 7cdfe56337..4fd42b2e30 100644 --- a/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs +++ b/src/JsonApiDotNetCore/Diagnostics/MeasurementSettings.cs @@ -1,5 +1,3 @@ -#nullable disable - #pragma warning disable AV1008 // Class should not be static namespace JsonApiDotNetCore.Diagnostics diff --git a/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs b/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs index fa00da1ffa..4a7c6b5e66 100644 --- a/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs +++ b/src/JsonApiDotNetCore/Errors/CannotClearRequiredRelationshipException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs b/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs index 38428ed885..2926ee43b0 100644 --- a/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs +++ b/src/JsonApiDotNetCore/Errors/DuplicateLocalIdValueException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/FailedOperationException.cs b/src/JsonApiDotNetCore/Errors/FailedOperationException.cs index faa9ec85c2..4ae21ef469 100644 --- a/src/JsonApiDotNetCore/Errors/FailedOperationException.cs +++ b/src/JsonApiDotNetCore/Errors/FailedOperationException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Net; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs b/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs index 520db772e4..9b2e46357c 100644 --- a/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs +++ b/src/JsonApiDotNetCore/Errors/IncompatibleLocalIdTypeException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs b/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs index 2891fc3bcd..75a2275f15 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidConfigurationException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -11,7 +9,7 @@ namespace JsonApiDotNetCore.Errors [PublicAPI] public sealed class InvalidConfigurationException : Exception { - public InvalidConfigurationException(string message, Exception innerException = null) + public InvalidConfigurationException(string message, Exception? innerException = null) : base(message, innerException) { } diff --git a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs index 8795f98607..c0895d63ac 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Diagnostics; @@ -22,12 +20,12 @@ namespace JsonApiDotNetCore.Errors public sealed class InvalidModelStateException : JsonApiException { public InvalidModelStateException(ModelStateDictionary modelState, Type resourceClrType, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy namingPolicy) + JsonNamingPolicy? namingPolicy) : this(FromModelStateDictionary(modelState, resourceClrType), includeExceptionStackTraceInErrors, namingPolicy) { } - public InvalidModelStateException(IEnumerable violations, bool includeExceptionStackTraceInErrors, JsonNamingPolicy namingPolicy) + public InvalidModelStateException(IEnumerable violations, bool includeExceptionStackTraceInErrors, JsonNamingPolicy? namingPolicy) : base(FromModelStateViolations(violations, includeExceptionStackTraceInErrors, namingPolicy)) { } @@ -57,7 +55,7 @@ private static void AddValidationErrors(ModelStateEntry entry, string propertyNa } private static IEnumerable FromModelStateViolations(IEnumerable violations, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy namingPolicy) + JsonNamingPolicy? namingPolicy) { ArgumentGuard.NotNull(violations, nameof(violations)); @@ -65,7 +63,7 @@ private static IEnumerable FromModelStateViolations(IEnumerable FromModelStateViolation(ModelStateViolation violation, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy namingPolicy) + JsonNamingPolicy? namingPolicy) { if (violation.Error.Exception is JsonApiException jsonApiException) { @@ -83,9 +81,9 @@ private static IEnumerable FromModelStateViolation(ModelStateViolat } } - private static string GetDisplayNameForProperty(string propertyName, Type resourceClrType, JsonNamingPolicy namingPolicy) + private static string GetDisplayNameForProperty(string propertyName, Type resourceClrType, JsonNamingPolicy? namingPolicy) { - PropertyInfo property = resourceClrType.GetProperty(propertyName); + PropertyInfo? property = resourceClrType.GetProperty(propertyName); if (property != null) { @@ -108,12 +106,10 @@ private static ErrorObject FromModelError(ModelError modelError, string attribut { Title = "Input validation failed.", Detail = modelError.ErrorMessage, - Source = attributePath == null - ? null - : new ErrorSource - { - Pointer = attributePath - } + Source = new ErrorSource + { + Pointer = attributePath + } }; if (includeExceptionStackTraceInErrors && modelError.Exception != null) @@ -123,7 +119,7 @@ private static ErrorObject FromModelError(ModelError modelError, string attribut if (stackTraceLines.Any()) { - error.Meta ??= new Dictionary(); + error.Meta ??= new Dictionary(); error.Meta["StackTrace"] = stackTraceLines; } } diff --git a/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs b/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs index f22dc5466c..22c8738002 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidQueryException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Net; using JetBrains.Annotations; @@ -14,12 +12,12 @@ namespace JsonApiDotNetCore.Errors [PublicAPI] public sealed class InvalidQueryException : JsonApiException { - public InvalidQueryException(string reason, Exception exception) + public InvalidQueryException(string reason, Exception? innerException) : base(new ErrorObject(HttpStatusCode.BadRequest) { Title = reason, - Detail = exception?.Message - }, exception) + Detail = innerException?.Message + }, innerException) { } } diff --git a/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs b/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs index 5cd6710a1f..e85c7798f5 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidQueryStringParameterException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Net; using JetBrains.Annotations; @@ -13,20 +11,20 @@ namespace JsonApiDotNetCore.Errors [PublicAPI] public sealed class InvalidQueryStringParameterException : JsonApiException { - public string QueryParameterName { get; } + public string ParameterName { get; } - public InvalidQueryStringParameterException(string queryParameterName, string genericMessage, string specificMessage, Exception innerException = null) + public InvalidQueryStringParameterException(string parameterName, string genericMessage, string specificMessage, Exception? innerException = null) : base(new ErrorObject(HttpStatusCode.BadRequest) { Title = genericMessage, Detail = specificMessage, Source = new ErrorSource { - Parameter = queryParameterName + Parameter = parameterName } }, innerException) { - QueryParameterName = queryParameterName; + ParameterName = parameterName; } } } diff --git a/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs b/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs index e080506583..18929ed3d0 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidRequestBodyException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Net; @@ -14,8 +12,8 @@ namespace JsonApiDotNetCore.Errors [PublicAPI] public sealed class InvalidRequestBodyException : JsonApiException { - public InvalidRequestBodyException(string requestBody, string genericMessage, string specificMessage, string sourcePointer, - HttpStatusCode? alternativeStatusCode = null, Exception innerException = null) + public InvalidRequestBodyException(string? requestBody, string? genericMessage, string? specificMessage, string? sourcePointer, + HttpStatusCode? alternativeStatusCode = null, Exception? innerException = null) : base(new ErrorObject(alternativeStatusCode ?? HttpStatusCode.UnprocessableEntity) { Title = genericMessage != null ? $"Failed to deserialize request body: {genericMessage}" : "Failed to deserialize request body.", @@ -28,7 +26,7 @@ public InvalidRequestBodyException(string requestBody, string genericMessage, st }, Meta = string.IsNullOrEmpty(requestBody) ? null - : new Dictionary + : new Dictionary { ["RequestBody"] = requestBody } diff --git a/src/JsonApiDotNetCore/Errors/JsonApiException.cs b/src/JsonApiDotNetCore/Errors/JsonApiException.cs index c12ceb9645..ea68e67144 100644 --- a/src/JsonApiDotNetCore/Errors/JsonApiException.cs +++ b/src/JsonApiDotNetCore/Errors/JsonApiException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -26,7 +24,7 @@ public class JsonApiException : Exception public IReadOnlyList Errors { get; } - public JsonApiException(ErrorObject error, Exception innerException = null) + public JsonApiException(ErrorObject error, Exception? innerException = null) : base(null, innerException) { ArgumentGuard.NotNull(error, nameof(error)); @@ -34,15 +32,20 @@ public JsonApiException(ErrorObject error, Exception innerException = null) Errors = error.AsArray(); } - public JsonApiException(IEnumerable errors, Exception innerException = null) + public JsonApiException(IEnumerable errors, Exception? innerException = null) : base(null, innerException) { - List errorList = errors?.ToList(); + IReadOnlyList? errorList = ToErrorList(errors); ArgumentGuard.NotNullNorEmpty(errorList, nameof(errors)); Errors = errorList; } + private static IReadOnlyList? ToErrorList(IEnumerable? errors) + { + return errors?.ToList(); + } + public string GetSummary() { return $"{nameof(JsonApiException)}: Errors = {JsonSerializer.Serialize(Errors, SerializerOptions)}"; diff --git a/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs b/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs index 69122c8477..35e6a5f40d 100644 --- a/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs +++ b/src/JsonApiDotNetCore/Errors/LocalIdSingleOperationException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs b/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs index 9c6b1a5733..7afe5b04cc 100644 --- a/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs +++ b/src/JsonApiDotNetCore/Errors/MissingResourceInRelationship.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Errors diff --git a/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs b/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs index 462b83b35d..81e13baeda 100644 --- a/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs +++ b/src/JsonApiDotNetCore/Errors/MissingTransactionSupportException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs b/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs index de7ecdf066..909f4a047d 100644 --- a/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs +++ b/src/JsonApiDotNetCore/Errors/NonParticipatingTransactionException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs b/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs index 36cdb50e3e..07b5d0e25a 100644 --- a/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/RelationshipNotFoundException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs b/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs index 06e630d43b..a4edbc0d5f 100644 --- a/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs +++ b/src/JsonApiDotNetCore/Errors/RequestMethodNotAllowedException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using System.Net.Http; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs b/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs index d7140b0957..384289576d 100644 --- a/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourceAlreadyExistsException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs b/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs index 84177b156e..50a05b70ff 100644 --- a/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourceNotFoundException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs b/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs index 887a7e4980..0cb1f9cecb 100644 --- a/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs +++ b/src/JsonApiDotNetCore/Errors/ResourcesInRelationshipsNotFoundException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Net; diff --git a/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs b/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs index a6995621d2..6882853eab 100644 --- a/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs +++ b/src/JsonApiDotNetCore/Errors/UnknownLocalIdValueException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs b/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs index 1a118a9bd1..34f3faafc4 100644 --- a/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs +++ b/src/JsonApiDotNetCore/Errors/UnsuccessfulActionResultException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs index b6d87e3969..efe5a54f00 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncConvertEmptyActionResultFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs index 14854f2ae9..d82cbddeed 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncJsonApiExceptionFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading.Tasks; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs b/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs index 2de156a824..7a72874e5b 100644 --- a/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/AsyncQueryStringActionFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Reflection; using System.Threading.Tasks; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/src/JsonApiDotNetCore/Middleware/EndpointKind.cs b/src/JsonApiDotNetCore/Middleware/EndpointKind.cs index 134fff6ff5..6123aa09f9 100644 --- a/src/JsonApiDotNetCore/Middleware/EndpointKind.cs +++ b/src/JsonApiDotNetCore/Middleware/EndpointKind.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Middleware { public enum EndpointKind diff --git a/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs b/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs index 985cf87a72..5a0aab7787 100644 --- a/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs +++ b/src/JsonApiDotNetCore/Middleware/ExceptionHandler.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Diagnostics; @@ -102,7 +100,7 @@ private void IncludeStackTraces(Exception exception, IReadOnlyList { foreach (ErrorObject error in errors) { - error.Meta ??= new Dictionary(); + error.Meta ??= new Dictionary(); error.Meta["StackTrace"] = stackTraceLines; } } diff --git a/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs b/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs index ceff524e9d..36105b5e88 100644 --- a/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs +++ b/src/JsonApiDotNetCore/Middleware/FixedQueryFeature.cs @@ -1,7 +1,6 @@ -#nullable disable - using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Primitives; @@ -15,16 +14,17 @@ namespace JsonApiDotNetCore.Middleware internal sealed class FixedQueryFeature : IQueryFeature { // Lambda hoisted to static readonly field to improve inlining https://github.com/dotnet/roslyn/issues/13624 - private static readonly Func NullRequestFeature = _ => null; + private static readonly Func NullRequestFeature = _ => null; private FeatureReferences _features; - private string _original; - private IQueryCollection _parsedValues; + private string? _original; + private IQueryCollection? _parsedValues; - private IHttpRequestFeature HttpRequestFeature => _features.Fetch(ref _features.Cache, NullRequestFeature); + private IHttpRequestFeature HttpRequestFeature => _features.Fetch(ref _features.Cache, NullRequestFeature)!; /// + [AllowNull] public IQueryCollection Query { get @@ -40,7 +40,7 @@ public IQueryCollection Query { _original = current; - Dictionary result = FixedQueryHelpers.ParseNullableQuery(current); + Dictionary? result = FixedQueryHelpers.ParseNullableQuery(current); _parsedValues = result == null ? QueryCollection.Empty : new QueryCollection(result); } @@ -60,7 +60,7 @@ public IQueryCollection Query } else { - _original = QueryString.Create(_parsedValues).ToString(); + _original = QueryString.Create(_parsedValues!).ToString(); HttpRequestFeature.QueryString = _original; } } diff --git a/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs b/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs index 5f4e9c2d6c..7c42d0aeea 100644 --- a/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs +++ b/src/JsonApiDotNetCore/Middleware/FixedQueryHelpers.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using Microsoft.AspNetCore.WebUtilities; @@ -27,7 +25,7 @@ internal static class FixedQueryHelpers /// /// A collection of parsed keys and values, null if there are no entries. /// - public static Dictionary ParseNullableQuery(string queryString) + public static Dictionary? ParseNullableQuery(string queryString) { var accumulator = new KeyValueAccumulator(); diff --git a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs index f6e005fc14..c860204c52 100644 --- a/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs +++ b/src/JsonApiDotNetCore/Middleware/HeaderConstants.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; #pragma warning disable AV1008 // Class should not be static diff --git a/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs b/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs index 79ea6d1084..a3d137fefd 100644 --- a/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs +++ b/src/JsonApiDotNetCore/Middleware/HttpContextExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Http; @@ -17,7 +15,7 @@ public static bool IsJsonApiRequest(this HttpContext httpContext) { ArgumentGuard.NotNull(httpContext, nameof(httpContext)); - string value = httpContext.Items[IsJsonApiRequestKey] as string; + string? value = httpContext.Items[IsJsonApiRequestKey] as string; return value == bool.TrueString; } diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs index 602aeba13d..8e0f8b394e 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncConvertEmptyActionResultFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs index af0faaa136..7ae6981c77 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncJsonApiExceptionFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs b/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs index 79e4e8b7f2..4ad18fcf35 100644 --- a/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs +++ b/src/JsonApiDotNetCore/Middleware/IAsyncQueryStringActionFilter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Filters; diff --git a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs index 19d828580b..c15f3037bd 100644 --- a/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs +++ b/src/JsonApiDotNetCore/Middleware/IControllerResourceMapping.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; @@ -13,11 +11,11 @@ public interface IControllerResourceMapping /// /// Gets the associated resource type for the provided controller type. /// - ResourceType GetResourceTypeForController(Type controllerType); + ResourceType? GetResourceTypeForController(Type? controllerType); /// /// Gets the associated controller name for the provided resource type. /// - string GetControllerNameForResourceType(ResourceType resourceType); + string? GetControllerNameForResourceType(ResourceType? resourceType); } } diff --git a/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs b/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs index bdbacded80..a962d8cfdd 100644 --- a/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs +++ b/src/JsonApiDotNetCore/Middleware/IExceptionHandler.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs index f88c173569..268c0a2697 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiInputFormatter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs index 139ab37911..725accb03f 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiOutputFormatter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs index 349c101e76..3a4d009bd8 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiRequest.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources.Annotations; @@ -16,26 +14,30 @@ public interface IJsonApiRequest public EndpointKind Kind { get; } /// - /// The ID of the primary (top-level) resource for this request. This would be null in "/blogs", "123" in "/blogs/123" or "/blogs/123/author". + /// The ID of the primary (top-level) resource for this request. This would be null in "/blogs", "123" in "/blogs/123" or "/blogs/123/author". This is + /// null before and after processing operations in an atomic:operations request. /// - string PrimaryId { get; } + string? PrimaryId { get; } /// - /// The primary (top-level) resource type for this request. This would be "blogs" in "/blogs", "/blogs/123" or "/blogs/123/author". + /// The primary (top-level) resource type for this request. This would be "blogs" in "/blogs", "/blogs/123" or "/blogs/123/author". This is null + /// before and after processing operations in an atomic:operations request. /// - ResourceType PrimaryResourceType { get; } + ResourceType? PrimaryResourceType { get; } /// /// The secondary (nested) resource type for this request. This would be null in "/blogs", "/blogs/123" and "/blogs/123/unknownResource" or "people" in - /// "/blogs/123/author" and "/blogs/123/relationships/author". + /// "/blogs/123/author" and "/blogs/123/relationships/author". This is null before and after processing operations in an atomic:operations + /// request. /// - ResourceType SecondaryResourceType { get; } + ResourceType? SecondaryResourceType { get; } /// /// The relationship for this nested request. This would be null in "/blogs", "/blogs/123" and "/blogs/123/unknownResource" or "author" in - /// "/blogs/123/author" and "/blogs/123/relationships/author". + /// "/blogs/123/author" and "/blogs/123/relationships/author". This is null before and after processing operations in an atomic:operations + /// request. /// - RelationshipAttribute Relationship { get; } + RelationshipAttribute? Relationship { get; } /// /// Indicates whether this request targets a single resource or a collection of resources. @@ -48,14 +50,15 @@ public interface IJsonApiRequest bool IsReadOnly { get; } /// - /// In case of a non-readonly request, this indicates the kind of write operation currently being processed. + /// In case of a non-readonly request, this indicates the kind of write operation currently being processed. This is null when processing a + /// read-only operations, or before and after processing operations in an atomic:operations request. /// WriteOperationKind? WriteOperation { get; } /// /// In case of an atomic:operations request, identifies the overarching transaction. /// - string TransactionId { get; } + string? TransactionId { get; } /// /// Performs a shallow copy. diff --git a/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs index e800e97a71..d5db22efa6 100644 --- a/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/IJsonApiRoutingConvention.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc.ApplicationModels; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs b/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs index 03714afe28..46153e6502 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiInputFormatter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading.Tasks; using JsonApiDotNetCore.Serialization.Request; using Microsoft.AspNetCore.Mvc.Formatters; @@ -25,7 +23,7 @@ public async Task ReadAsync(InputFormatterContext context) var reader = context.HttpContext.RequestServices.GetRequiredService(); - object model = await reader.ReadAsync(context.HttpContext.Request); + object? model = await reader.ReadAsync(context.HttpContext.Request); return model == null ? await InputFormatterResult.NoValueAsync() : await InputFormatterResult.SuccessAsync(model); } diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs index 69f4ac3a55..da5db981fb 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using System.Net; @@ -57,7 +55,7 @@ public async Task InvokeAsync(HttpContext httpContext, IControllerResourceMappin } RouteValueDictionary routeValues = httpContext.GetRouteData().Values; - ResourceType primaryResourceType = TryCreatePrimaryResourceType(httpContext, controllerResourceMapping); + ResourceType? primaryResourceType = TryCreatePrimaryResourceType(httpContext, controllerResourceMapping); if (primaryResourceType != null) { @@ -84,7 +82,10 @@ public async Task InvokeAsync(HttpContext httpContext, IControllerResourceMappin httpContext.RegisterJsonApiRequest(); } - // Workaround for bug https://github.com/dotnet/aspnetcore/issues/33394 + // Workaround for bug https://github.com/dotnet/aspnetcore/issues/33394 (fixed in .NET 6) + // Note that integration tests do not cover this, because the query string is short-circuited through WebApplicationFactory. + // To manually test, execute a GET request such as http://localhost:14140/api/v1/todoItems?include=owner&fields[people]= + // and observe it does not fail with 400 "Unknown query string parameter". httpContext.Features.Set(new FixedQueryFeature(httpContext.Features)); using (CodeTimingSessionManager.Current.Measure("Subsequent middleware")) @@ -120,9 +121,9 @@ private async Task ValidateIfMatchHeaderAsync(HttpContext httpContext, Jso return true; } - private static ResourceType TryCreatePrimaryResourceType(HttpContext httpContext, IControllerResourceMapping controllerResourceMapping) + private static ResourceType? TryCreatePrimaryResourceType(HttpContext httpContext, IControllerResourceMapping controllerResourceMapping) { - Endpoint endpoint = httpContext.GetEndpoint(); + Endpoint? endpoint = httpContext.GetEndpoint(); var controllerActionDescriptor = endpoint?.Metadata.GetMetadata(); return controllerActionDescriptor != null @@ -169,7 +170,7 @@ private static async Task ValidateAcceptHeaderAsync(MediaTypeHeaderValue a foreach (string acceptHeader in acceptHeaders) { - if (MediaTypeHeaderValue.TryParse(acceptHeader, out MediaTypeHeaderValue headerValue)) + if (MediaTypeHeaderValue.TryParse(acceptHeader, out MediaTypeHeaderValue? headerValue)) { headerValue.Quality = null; @@ -226,7 +227,7 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr request.PrimaryResourceType = primaryResourceType; request.PrimaryId = GetPrimaryRequestId(routeValues); - string relationshipName = GetRelationshipNameForSecondaryRequest(routeValues); + string? relationshipName = GetRelationshipNameForSecondaryRequest(routeValues); if (relationshipName != null) { @@ -243,7 +244,7 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr // @formatter:keep_existing_linebreaks restore // @formatter:wrap_chained_method_calls restore - RelationshipAttribute requestRelationship = primaryResourceType.FindRelationshipByPublicName(relationshipName); + RelationshipAttribute? requestRelationship = primaryResourceType.FindRelationshipByPublicName(relationshipName); if (requestRelationship != null) { @@ -271,25 +272,25 @@ private static void SetupResourceRequest(JsonApiRequest request, ResourceType pr request.IsCollection = isGetAll || request.Relationship is HasManyAttribute; } - private static string GetPrimaryRequestId(RouteValueDictionary routeValues) + private static string? GetPrimaryRequestId(RouteValueDictionary routeValues) { - return routeValues.TryGetValue("id", out object id) ? (string)id : null; + return routeValues.TryGetValue("id", out object? id) ? (string?)id : null; } - private static string GetRelationshipNameForSecondaryRequest(RouteValueDictionary routeValues) + private static string? GetRelationshipNameForSecondaryRequest(RouteValueDictionary routeValues) { - return routeValues.TryGetValue("relationshipName", out object routeValue) ? (string)routeValue : null; + return routeValues.TryGetValue("relationshipName", out object? routeValue) ? (string?)routeValue : null; } private static bool IsRouteForRelationship(RouteValueDictionary routeValues) { - string actionName = (string)routeValues["action"]; + string actionName = (string)routeValues["action"]!; return actionName.EndsWith("Relationship", StringComparison.Ordinal); } private static bool IsRouteForOperations(RouteValueDictionary routeValues) { - string actionName = (string)routeValues["action"]; + string actionName = (string)routeValues["action"]!; return actionName == "PostOperations"; } diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs b/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs index 6056e040f3..93d531dc58 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiOutputFormatter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading.Tasks; using JsonApiDotNetCore.Serialization.Response; using Microsoft.AspNetCore.Mvc.Formatters; diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs index 517fd4bb9b..7801d059d3 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRequest.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources.Annotations; @@ -14,16 +12,16 @@ public sealed class JsonApiRequest : IJsonApiRequest public EndpointKind Kind { get; set; } /// - public string PrimaryId { get; set; } + public string? PrimaryId { get; set; } /// - public ResourceType PrimaryResourceType { get; set; } + public ResourceType? PrimaryResourceType { get; set; } /// - public ResourceType SecondaryResourceType { get; set; } + public ResourceType? SecondaryResourceType { get; set; } /// - public RelationshipAttribute Relationship { get; set; } + public RelationshipAttribute? Relationship { get; set; } /// public bool IsCollection { get; set; } @@ -35,7 +33,7 @@ public sealed class JsonApiRequest : IJsonApiRequest public WriteOperationKind? WriteOperation { get; set; } /// - public string TransactionId { get; set; } + public string? TransactionId { get; set; } /// public void CopyFrom(IJsonApiRequest other) diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs index bbef85d9c5..b49f98872d 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -49,15 +47,15 @@ public JsonApiRoutingConvention(IJsonApiOptions options, IResourceGraph resource } /// - public ResourceType GetResourceTypeForController(Type controllerType) + public ResourceType? GetResourceTypeForController(Type? controllerType) { - return controllerType != null && _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType resourceType) ? resourceType : null; + return controllerType != null && _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType? resourceType) ? resourceType : null; } /// - public string GetControllerNameForResourceType(ResourceType resourceType) + public string? GetControllerNameForResourceType(ResourceType? resourceType) { - return resourceType != null && _controllerPerResourceTypeMap.TryGetValue(resourceType, out ControllerModel controllerModel) + return resourceType != null && _controllerPerResourceTypeMap.TryGetValue(resourceType, out ControllerModel? controllerModel) ? controllerModel.ControllerName : null; } @@ -73,11 +71,11 @@ public void Apply(ApplicationModel application) if (!isOperationsController) { - Type resourceClrType = ExtractResourceClrTypeFromController(controller.ControllerType); + Type? resourceClrType = ExtractResourceClrTypeFromController(controller.ControllerType); if (resourceClrType != null) { - ResourceType resourceType = _resourceGraph.FindResourceType(resourceClrType); + ResourceType? resourceType = _resourceGraph.FindResourceType(resourceClrType); if (resourceType != null) { @@ -100,7 +98,7 @@ public void Apply(ApplicationModel application) $"Cannot register '{controller.ControllerType.FullName}' for template '{template}' because '{_registeredControllerNameByTemplate[template]}' was already registered for this template."); } - _registeredControllerNameByTemplate.Add(template, controller.ControllerType.FullName); + _registeredControllerNameByTemplate.Add(template, controller.ControllerType.FullName!); controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel { @@ -118,9 +116,9 @@ private bool IsRoutingConventionEnabled(ControllerModel controller) /// /// Derives a template from the resource type, and checks if this template was already registered. /// - private string TemplateFromResource(ControllerModel model) + private string? TemplateFromResource(ControllerModel model) { - if (_resourceTypePerControllerTypeMap.TryGetValue(model.ControllerType, out ResourceType resourceType)) + if (_resourceTypePerControllerTypeMap.TryGetValue(model.ControllerType, out ResourceType? resourceType)) { return $"{_options.Namespace}/{resourceType.PublicName}"; } @@ -143,20 +141,20 @@ private string TemplateFromController(ControllerModel model) /// /// Determines the resource associated to a controller by inspecting generic arguments in its inheritance tree. /// - private Type ExtractResourceClrTypeFromController(Type type) + private Type? ExtractResourceClrTypeFromController(Type type) { Type aspNetControllerType = typeof(ControllerBase); Type coreControllerType = typeof(CoreJsonApiController); Type baseControllerType = typeof(BaseJsonApiController<,>); - Type currentType = type; + Type? currentType = type; while (!currentType.IsGenericType || currentType.GetGenericTypeDefinition() != baseControllerType) { - Type nextBaseType = currentType.BaseType; + Type? nextBaseType = currentType.BaseType; if ((nextBaseType == aspNetControllerType || nextBaseType == coreControllerType) && currentType.IsGenericType) { - Type resourceClrType = currentType.GetGenericArguments() + Type? resourceClrType = currentType.GetGenericArguments() .FirstOrDefault(typeArgument => typeArgument.IsOrImplementsInterface(typeof(IIdentifiable))); if (resourceClrType != null) @@ -167,7 +165,7 @@ private Type ExtractResourceClrTypeFromController(Type type) currentType = nextBaseType; - if (nextBaseType == null) + if (currentType == null) { break; } diff --git a/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs b/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs index 9bfd4abeec..03e38d827d 100644 --- a/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs +++ b/src/JsonApiDotNetCore/Middleware/TraceLogWriter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Reflection; using System.Runtime.CompilerServices; @@ -32,7 +30,7 @@ public TraceLogWriter(ILoggerFactory loggerFactory) _logger = loggerFactory.CreateLogger(typeof(T)); } - public void LogMethodStart(object parameters = null, [CallerMemberName] string memberName = "") + public void LogMethodStart(object? parameters = null, [CallerMemberName] string memberName = "") { if (IsEnabled) { @@ -50,7 +48,7 @@ public void LogMessage(Func messageFactory) } } - private static string FormatMessage(string memberName, object parameters) + private static string FormatMessage(string memberName, object? parameters) { var builder = new StringBuilder(); @@ -63,7 +61,7 @@ private static string FormatMessage(string memberName, object parameters) return builder.ToString(); } - private static void WriteProperties(StringBuilder builder, object propertyContainer) + private static void WriteProperties(StringBuilder builder, object? propertyContainer) { if (propertyContainer != null) { @@ -90,7 +88,7 @@ private static void WriteProperty(StringBuilder builder, PropertyInfo property, builder.Append(property.Name); builder.Append(": "); - object value = property.GetValue(instance); + object? value = property.GetValue(instance); if (value == null) { @@ -121,11 +119,11 @@ private static void WriteObject(StringBuilder builder, object value) } } - private static bool HasToStringOverload(Type type) + private static bool HasToStringOverload(Type? type) { if (type != null) { - MethodInfo toStringMethod = type.GetMethod("ToString", Array.Empty()); + MethodInfo? toStringMethod = type.GetMethod("ToString", Array.Empty()); if (toStringMethod != null && toStringMethod.DeclaringType != typeof(object)) { diff --git a/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs b/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs index 6e3154f75e..aeec6c1cab 100644 --- a/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs +++ b/src/JsonApiDotNetCore/Middleware/WriteOperationKind.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Middleware { /// diff --git a/src/JsonApiDotNetCore/ObjectExtensions.cs b/src/JsonApiDotNetCore/ObjectExtensions.cs index 538498aeef..8657b64e96 100644 --- a/src/JsonApiDotNetCore/ObjectExtensions.cs +++ b/src/JsonApiDotNetCore/ObjectExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; #pragma warning disable AV1130 // Return type in method signature should be a collection interface instead of a concrete type diff --git a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs index 43686533a9..e4f127b725 100644 --- a/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs +++ b/src/JsonApiDotNetCore/Properties/AssemblyInfo.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Benchmarks")] diff --git a/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs b/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs index 2403696e7d..5b73deee0a 100644 --- a/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs +++ b/src/JsonApiDotNetCore/Queries/ExpressionInScope.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Queries.Expressions; @@ -12,10 +10,10 @@ namespace JsonApiDotNetCore.Queries [PublicAPI] public class ExpressionInScope { - public ResourceFieldChainExpression Scope { get; } + public ResourceFieldChainExpression? Scope { get; } public QueryExpression Expression { get; } - public ExpressionInScope(ResourceFieldChainExpression scope, QueryExpression expression) + public ExpressionInScope(ResourceFieldChainExpression? scope, QueryExpression expression) { ArgumentGuard.NotNull(expression, nameof(expression)); diff --git a/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs index 42d28bef17..0682cc64a0 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/AnyExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -51,7 +49,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs index d74051d1e5..77d0281063 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using Humanizer; using JetBrains.Annotations; @@ -36,7 +34,7 @@ public override string ToString() return $"{Operator.ToString().Camelize()}({Left},{Right})"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs index de958f7d2b..fbe12f1b0c 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ComparisonOperator.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { public enum ComparisonOperator diff --git a/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs index bedb5a0c30..e60867c63d 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/CountExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; @@ -30,7 +28,7 @@ public override string ToString() return $"{Keywords.Count}({TargetCollection})"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs index 6e6fc852a0..1ed0ed1de0 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/FilterExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs index d494e12474..6d7990a16a 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/FunctionExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs index 4c1e8d9d1d..7e38acd447 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/HasExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text; using JetBrains.Annotations; @@ -14,9 +12,9 @@ namespace JsonApiDotNetCore.Queries.Expressions public class HasExpression : FilterExpression { public ResourceFieldChainExpression TargetCollection { get; } - public FilterExpression Filter { get; } + public FilterExpression? Filter { get; } - public HasExpression(ResourceFieldChainExpression targetCollection, FilterExpression filter) + public HasExpression(ResourceFieldChainExpression targetCollection, FilterExpression? filter) { ArgumentGuard.NotNull(targetCollection, nameof(targetCollection)); @@ -47,7 +45,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs index 9efb0b7d4b..974c4892de 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IdentifierExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { /// diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs index a2672b91bb..19bc92e5d6 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeChainConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -76,7 +74,7 @@ public IncludeExpression FromRelationshipChains(IEnumerable ConvertChainsToElements(IEnumerable chains) { - var rootNode = new MutableIncludeNode(null); + var rootNode = new MutableIncludeNode(null!); foreach (ResourceFieldChainExpression chain in chains) { @@ -101,13 +99,13 @@ private static void ConvertChainToElement(ResourceFieldChainExpression chain, Mu } } - private sealed class IncludeToChainsConverter : QueryExpressionVisitor + private sealed class IncludeToChainsConverter : QueryExpressionVisitor { private readonly Stack _parentRelationshipStack = new(); public List Chains { get; } = new(); - public override object VisitInclude(IncludeExpression expression, object argument) + public override object? VisitInclude(IncludeExpression expression, object? argument) { foreach (IncludeElementExpression element in expression.Elements) { @@ -117,7 +115,7 @@ public override object VisitInclude(IncludeExpression expression, object argumen return null; } - public override object VisitIncludeElement(IncludeElementExpression expression, object argument) + public override object? VisitIncludeElement(IncludeElementExpression expression, object? argument) { if (!expression.Children.Any()) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs index b5ad900d6f..8cc148376b 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeElementExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -52,7 +50,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs index d0f0192b0a..3c5cbeb333 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/IncludeExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -43,7 +41,7 @@ public override string ToString() return string.Join(",", chains.Select(child => child.ToString()).OrderBy(name => name)); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs index 7365fc3f95..962914d83d 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LiteralConstantExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Expressions @@ -30,7 +28,7 @@ public override string ToString() return $"'{value}'"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs index a9be545228..670fe15daa 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LogicalExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -53,7 +51,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs b/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs index 6ebf9fb916..3514820f86 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/LogicalOperator.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { public enum LogicalOperator diff --git a/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs index 04cc1cce7f..2f82548e1d 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/MatchTextExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text; using Humanizer; @@ -44,7 +42,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs index 64e350f5f9..f7a34aa212 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/NotExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; @@ -30,7 +28,7 @@ public override string ToString() return $"{Keywords.Not}({Child})"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs index fc8ab5efc3..172a900884 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/NullConstantExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.Queries.Internal.Parsing; @@ -12,6 +10,12 @@ namespace JsonApiDotNetCore.Queries.Expressions [PublicAPI] public class NullConstantExpression : IdentifierExpression { + public static readonly NullConstantExpression Instance = new(); + + private NullConstantExpression() + { + } + public override TResult Accept(QueryExpressionVisitor visitor, TArgument argument) { return visitor.VisitNullConstant(this, argument); @@ -22,7 +26,7 @@ public override string ToString() return Keywords.Null; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs index fdec803648..69bb675bdc 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationElementQueryStringValueExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -11,10 +9,10 @@ namespace JsonApiDotNetCore.Queries.Expressions [PublicAPI] public class PaginationElementQueryStringValueExpression : QueryExpression { - public ResourceFieldChainExpression Scope { get; } + public ResourceFieldChainExpression? Scope { get; } public int Value { get; } - public PaginationElementQueryStringValueExpression(ResourceFieldChainExpression scope, int value) + public PaginationElementQueryStringValueExpression(ResourceFieldChainExpression? scope, int value) { Scope = scope; Value = value; @@ -30,7 +28,7 @@ public override string ToString() return Scope == null ? Value.ToString() : $"{Scope}: {Value}"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs index bfdd80223b..f15e714c2e 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; @@ -13,9 +11,9 @@ namespace JsonApiDotNetCore.Queries.Expressions public class PaginationExpression : QueryExpression { public PageNumber PageNumber { get; } - public PageSize PageSize { get; } + public PageSize? PageSize { get; } - public PaginationExpression(PageNumber pageNumber, PageSize pageSize) + public PaginationExpression(PageNumber pageNumber, PageSize? pageSize) { ArgumentGuard.NotNull(pageNumber, nameof(pageNumber)); @@ -33,7 +31,7 @@ public override string ToString() return PageSize != null ? $"Page number: {PageNumber}, size: {PageSize}" : "(none)"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs index 26c5aeca57..3afce49b3b 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/PaginationQueryStringValueExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -32,7 +30,7 @@ public override string ToString() return string.Join(",", Elements.Select(constant => constant.ToString())); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs index 7c61620a87..44d5311b19 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Linq.Expressions; namespace JsonApiDotNetCore.Queries.Expressions diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs index 7e6733802c..8ba23c826d 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionRewriter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Immutable; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; @@ -10,9 +8,9 @@ namespace JsonApiDotNetCore.Queries.Expressions /// Building block for rewriting trees. It walks through nested expressions and updates parent on changes. /// [PublicAPI] - public class QueryExpressionRewriter : QueryExpressionVisitor + public class QueryExpressionRewriter : QueryExpressionVisitor { - public override QueryExpression Visit(QueryExpression expression, TArgument argument) + public override QueryExpression? Visit(QueryExpression expression, TArgument argument) { return expression.Accept(this, argument); } @@ -22,21 +20,21 @@ public override QueryExpression DefaultVisit(QueryExpression expression, TArgume return expression; } - public override QueryExpression VisitComparison(ComparisonExpression expression, TArgument argument) + public override QueryExpression? VisitComparison(ComparisonExpression expression, TArgument argument) { - if (expression == null) + QueryExpression? newLeft = Visit(expression.Left, argument); + QueryExpression? newRight = Visit(expression.Right, argument); + + if (newLeft != null && newRight != null) { - return null; + var newExpression = new ComparisonExpression(expression.Operator, newLeft, newRight); + return newExpression.Equals(expression) ? expression : newExpression; } - QueryExpression newLeft = Visit(expression.Left, argument); - QueryExpression newRight = Visit(expression.Right, argument); - - var newExpression = new ComparisonExpression(expression.Operator, newLeft, newRight); - return newExpression.Equals(expression) ? expression : newExpression; + return null; } - public override QueryExpression VisitResourceFieldChain(ResourceFieldChainExpression expression, TArgument argument) + public override QueryExpression? VisitResourceFieldChain(ResourceFieldChainExpression expression, TArgument argument) { return expression; } @@ -51,98 +49,83 @@ public override QueryExpression VisitNullConstant(NullConstantExpression express return expression; } - public override QueryExpression VisitLogical(LogicalExpression expression, TArgument argument) + public override QueryExpression? VisitLogical(LogicalExpression expression, TArgument argument) { - if (expression != null) - { - IImmutableList newTerms = VisitList(expression.Terms, argument); + IImmutableList newTerms = VisitList(expression.Terms, argument); - if (newTerms.Count == 1) - { - return newTerms[0]; - } + if (newTerms.Count == 1) + { + return newTerms[0]; + } - if (newTerms.Count != 0) - { - var newExpression = new LogicalExpression(expression.Operator, newTerms); - return newExpression.Equals(expression) ? expression : newExpression; - } + if (newTerms.Count != 0) + { + var newExpression = new LogicalExpression(expression.Operator, newTerms); + return newExpression.Equals(expression) ? expression : newExpression; } return null; } - public override QueryExpression VisitNot(NotExpression expression, TArgument argument) + public override QueryExpression? VisitNot(NotExpression expression, TArgument argument) { - if (expression != null) + if (Visit(expression.Child, argument) is FilterExpression newChild) { - if (Visit(expression.Child, argument) is FilterExpression newChild) - { - var newExpression = new NotExpression(newChild); - return newExpression.Equals(expression) ? expression : newExpression; - } + var newExpression = new NotExpression(newChild); + return newExpression.Equals(expression) ? expression : newExpression; } return null; } - public override QueryExpression VisitHas(HasExpression expression, TArgument argument) + public override QueryExpression? VisitHas(HasExpression expression, TArgument argument) { - if (expression != null) + if (Visit(expression.TargetCollection, argument) is ResourceFieldChainExpression newTargetCollection) { - if (Visit(expression.TargetCollection, argument) is ResourceFieldChainExpression newTargetCollection) - { - FilterExpression newFilter = expression.Filter != null ? Visit(expression.Filter, argument) as FilterExpression : null; + FilterExpression? newFilter = expression.Filter != null ? Visit(expression.Filter, argument) as FilterExpression : null; - var newExpression = new HasExpression(newTargetCollection, newFilter); - return newExpression.Equals(expression) ? expression : newExpression; - } + var newExpression = new HasExpression(newTargetCollection, newFilter); + return newExpression.Equals(expression) ? expression : newExpression; } return null; } - public override QueryExpression VisitSortElement(SortElementExpression expression, TArgument argument) + public override QueryExpression? VisitSortElement(SortElementExpression expression, TArgument argument) { - if (expression != null) - { - SortElementExpression newExpression = null; + SortElementExpression? newExpression = null; - if (expression.Count != null) + if (expression.Count != null) + { + if (Visit(expression.Count, argument) is CountExpression newCount) { - if (Visit(expression.Count, argument) is CountExpression newCount) - { - newExpression = new SortElementExpression(newCount, expression.IsAscending); - } + newExpression = new SortElementExpression(newCount, expression.IsAscending); } - else if (expression.TargetAttribute != null) + } + else if (expression.TargetAttribute != null) + { + if (Visit(expression.TargetAttribute, argument) is ResourceFieldChainExpression newTargetAttribute) { - if (Visit(expression.TargetAttribute, argument) is ResourceFieldChainExpression newTargetAttribute) - { - newExpression = new SortElementExpression(newTargetAttribute, expression.IsAscending); - } + newExpression = new SortElementExpression(newTargetAttribute, expression.IsAscending); } + } - if (newExpression != null) - { - return newExpression.Equals(expression) ? expression : newExpression; - } + if (newExpression != null) + { + return newExpression.Equals(expression) ? expression : newExpression; } return null; } - public override QueryExpression VisitSort(SortExpression expression, TArgument argument) + public override QueryExpression? VisitSort(SortExpression expression, TArgument argument) { - if (expression != null) - { - IImmutableList newElements = VisitList(expression.Elements, argument); + IImmutableList newElements = VisitList(expression.Elements, argument); - if (newElements.Count != 0) - { - var newExpression = new SortExpression(newElements); - return newExpression.Equals(expression) ? expression : newExpression; - } + if (newElements.Count != 0) + { + var newExpression = new SortExpression(newElements); + return newExpression.Equals(expression) ? expression : newExpression; } return null; @@ -153,27 +136,24 @@ public override QueryExpression VisitPagination(PaginationExpression expression, return expression; } - public override QueryExpression VisitCount(CountExpression expression, TArgument argument) + public override QueryExpression? VisitCount(CountExpression expression, TArgument argument) { - if (expression != null) + if (Visit(expression.TargetCollection, argument) is ResourceFieldChainExpression newTargetCollection) { - if (Visit(expression.TargetCollection, argument) is ResourceFieldChainExpression newTargetCollection) - { - var newExpression = new CountExpression(newTargetCollection); - return newExpression.Equals(expression) ? expression : newExpression; - } + var newExpression = new CountExpression(newTargetCollection); + return newExpression.Equals(expression) ? expression : newExpression; } return null; } - public override QueryExpression VisitMatchText(MatchTextExpression expression, TArgument argument) + public override QueryExpression? VisitMatchText(MatchTextExpression expression, TArgument argument) { - if (expression != null) - { - var newTargetAttribute = Visit(expression.TargetAttribute, argument) as ResourceFieldChainExpression; - var newTextValue = Visit(expression.TextValue, argument) as LiteralConstantExpression; + var newTargetAttribute = Visit(expression.TargetAttribute, argument) as ResourceFieldChainExpression; + var newTextValue = Visit(expression.TextValue, argument) as LiteralConstantExpression; + if (newTargetAttribute != null && newTextValue != null) + { var newExpression = new MatchTextExpression(newTargetAttribute, newTextValue, expression.MatchKind); return newExpression.Equals(expression) ? expression : newExpression; } @@ -181,13 +161,13 @@ public override QueryExpression VisitMatchText(MatchTextExpression expression, T return null; } - public override QueryExpression VisitAny(AnyExpression expression, TArgument argument) + public override QueryExpression? VisitAny(AnyExpression expression, TArgument argument) { - if (expression != null) - { - var newTargetAttribute = Visit(expression.TargetAttribute, argument) as ResourceFieldChainExpression; - IImmutableSet newConstants = VisitSet(expression.Constants, argument); + var newTargetAttribute = Visit(expression.TargetAttribute, argument) as ResourceFieldChainExpression; + IImmutableSet newConstants = VisitSet(expression.Constants, argument); + if (newTargetAttribute != null) + { var newExpression = new AnyExpression(newTargetAttribute, newConstants); return newExpression.Equals(expression) ? expression : newExpression; } @@ -195,26 +175,23 @@ public override QueryExpression VisitAny(AnyExpression expression, TArgument arg return null; } - public override QueryExpression VisitSparseFieldTable(SparseFieldTableExpression expression, TArgument argument) + public override QueryExpression? VisitSparseFieldTable(SparseFieldTableExpression expression, TArgument argument) { - if (expression != null) - { - ImmutableDictionary.Builder newTable = - ImmutableDictionary.CreateBuilder(); + ImmutableDictionary.Builder newTable = + ImmutableDictionary.CreateBuilder(); - foreach ((ResourceType resourceType, SparseFieldSetExpression sparseFieldSet) in expression.Table) + foreach ((ResourceType resourceType, SparseFieldSetExpression sparseFieldSet) in expression.Table) + { + if (Visit(sparseFieldSet, argument) is SparseFieldSetExpression newSparseFieldSet) { - if (Visit(sparseFieldSet, argument) is SparseFieldSetExpression newSparseFieldSet) - { - newTable[resourceType] = newSparseFieldSet; - } + newTable[resourceType] = newSparseFieldSet; } + } - if (newTable.Count > 0) - { - var newExpression = new SparseFieldTableExpression(newTable.ToImmutable()); - return newExpression.Equals(expression) ? expression : newExpression; - } + if (newTable.Count > 0) + { + var newExpression = new SparseFieldTableExpression(newTable.ToImmutable()); + return newExpression.Equals(expression) ? expression : newExpression; } return null; @@ -225,14 +202,13 @@ public override QueryExpression VisitSparseFieldSet(SparseFieldSetExpression exp return expression; } - public override QueryExpression VisitQueryStringParameterScope(QueryStringParameterScopeExpression expression, TArgument argument) + public override QueryExpression? VisitQueryStringParameterScope(QueryStringParameterScopeExpression expression, TArgument argument) { - if (expression != null) - { - var newParameterName = Visit(expression.ParameterName, argument) as LiteralConstantExpression; - - ResourceFieldChainExpression newScope = expression.Scope != null ? Visit(expression.Scope, argument) as ResourceFieldChainExpression : null; + var newParameterName = Visit(expression.ParameterName, argument) as LiteralConstantExpression; + ResourceFieldChainExpression? newScope = expression.Scope != null ? Visit(expression.Scope, argument) as ResourceFieldChainExpression : null; + if (newParameterName != null) + { var newExpression = new QueryStringParameterScopeExpression(newParameterName, newScope); return newExpression.Equals(expression) ? expression : newExpression; } @@ -242,59 +218,39 @@ public override QueryExpression VisitQueryStringParameterScope(QueryStringParame public override QueryExpression PaginationQueryStringValue(PaginationQueryStringValueExpression expression, TArgument argument) { - if (expression != null) - { - IImmutableList newElements = VisitList(expression.Elements, argument); - - var newExpression = new PaginationQueryStringValueExpression(newElements); - return newExpression.Equals(expression) ? expression : newExpression; - } + IImmutableList newElements = VisitList(expression.Elements, argument); - return null; + var newExpression = new PaginationQueryStringValueExpression(newElements); + return newExpression.Equals(expression) ? expression : newExpression; } public override QueryExpression PaginationElementQueryStringValue(PaginationElementQueryStringValueExpression expression, TArgument argument) { - if (expression != null) - { - ResourceFieldChainExpression newScope = expression.Scope != null ? Visit(expression.Scope, argument) as ResourceFieldChainExpression : null; + ResourceFieldChainExpression? newScope = expression.Scope != null ? Visit(expression.Scope, argument) as ResourceFieldChainExpression : null; - var newExpression = new PaginationElementQueryStringValueExpression(newScope, expression.Value); - return newExpression.Equals(expression) ? expression : newExpression; - } - - return null; + var newExpression = new PaginationElementQueryStringValueExpression(newScope, expression.Value); + return newExpression.Equals(expression) ? expression : newExpression; } public override QueryExpression VisitInclude(IncludeExpression expression, TArgument argument) { - if (expression != null) - { - IImmutableSet newElements = VisitSet(expression.Elements, argument); + IImmutableSet newElements = VisitSet(expression.Elements, argument); - if (newElements.Count == 0) - { - return IncludeExpression.Empty; - } - - var newExpression = new IncludeExpression(newElements); - return newExpression.Equals(expression) ? expression : newExpression; + if (newElements.Count == 0) + { + return IncludeExpression.Empty; } - return null; + var newExpression = new IncludeExpression(newElements); + return newExpression.Equals(expression) ? expression : newExpression; } public override QueryExpression VisitIncludeElement(IncludeElementExpression expression, TArgument argument) { - if (expression != null) - { - IImmutableSet newElements = VisitSet(expression.Children, argument); + IImmutableSet newElements = VisitSet(expression.Children, argument); - var newExpression = new IncludeElementExpression(expression.Relationship, newElements); - return newExpression.Equals(expression) ? expression : newExpression; - } - - return null; + var newExpression = new IncludeElementExpression(expression.Relationship, newElements); + return newExpression.Equals(expression) ? expression : newExpression; } public override QueryExpression VisitQueryableHandler(QueryableHandlerExpression expression, TArgument argument) diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs index fc9a7ba9ee..dc5963a573 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryExpressionVisitor.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Expressions @@ -17,7 +15,7 @@ public virtual TResult Visit(QueryExpression expression, TArgument argument) public virtual TResult DefaultVisit(QueryExpression expression, TArgument argument) { - return default; + return default!; } public virtual TResult VisitComparison(ComparisonExpression expression, TArgument argument) diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs index c8d9b8d4fa..dcd59928d4 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryStringParameterScopeExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -12,9 +10,9 @@ namespace JsonApiDotNetCore.Queries.Expressions public class QueryStringParameterScopeExpression : QueryExpression { public LiteralConstantExpression ParameterName { get; } - public ResourceFieldChainExpression Scope { get; } + public ResourceFieldChainExpression? Scope { get; } - public QueryStringParameterScopeExpression(LiteralConstantExpression parameterName, ResourceFieldChainExpression scope) + public QueryStringParameterScopeExpression(LiteralConstantExpression parameterName, ResourceFieldChainExpression? scope) { ArgumentGuard.NotNull(parameterName, nameof(parameterName)); @@ -32,7 +30,7 @@ public override string ToString() return Scope == null ? ParameterName.ToString() : $"{ParameterName}: {Scope}"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs index 9ba6ffef44..6e57c55172 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/QueryableHandlerExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using JetBrains.Annotations; @@ -42,7 +40,7 @@ public override string ToString() return $"handler('{_parameterValue}')"; } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs index 804fc93326..59b78d9e55 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/ResourceFieldChainExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -40,7 +38,7 @@ public override string ToString() return string.Join(".", Fields.Select(field => field.PublicName)); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs index f00b2cc9bf..d2f342db16 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SortElementExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text; using JetBrains.Annotations; @@ -12,8 +10,8 @@ namespace JsonApiDotNetCore.Queries.Expressions [PublicAPI] public class SortElementExpression : QueryExpression { - public ResourceFieldChainExpression TargetAttribute { get; } - public CountExpression Count { get; } + public ResourceFieldChainExpression? TargetAttribute { get; } + public CountExpression? Count { get; } public bool IsAscending { get; } public SortElementExpression(ResourceFieldChainExpression targetAttribute, bool isAscending) @@ -24,7 +22,7 @@ public SortElementExpression(ResourceFieldChainExpression targetAttribute, bool IsAscending = isAscending; } - public SortElementExpression(CountExpression count, in bool isAscending) + public SortElementExpression(CountExpression count, bool isAscending) { ArgumentGuard.NotNull(count, nameof(count)); @@ -58,7 +56,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs index 63a96e60aa..c8a375d7cc 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SortExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -32,7 +30,7 @@ public override string ToString() return string.Join(",", Elements.Select(child => child.ToString())); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs index 7372d57086..6bb4611375 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -33,7 +31,7 @@ public override string ToString() return string.Join(",", Fields.Select(child => child.PublicName).OrderBy(name => name)); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs index 95bd428a36..a9d037165a 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldSetExpressionExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq.Expressions; @@ -13,14 +11,14 @@ namespace JsonApiDotNetCore.Queries.Expressions [PublicAPI] public static class SparseFieldSetExpressionExtensions { - public static SparseFieldSetExpression Including(this SparseFieldSetExpression sparseFieldSet, - Expression> fieldSelector, IResourceGraph resourceGraph) + public static SparseFieldSetExpression? Including(this SparseFieldSetExpression? sparseFieldSet, + Expression> fieldSelector, IResourceGraph resourceGraph) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(fieldSelector, nameof(fieldSelector)); ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); - SparseFieldSetExpression newSparseFieldSet = sparseFieldSet; + SparseFieldSetExpression? newSparseFieldSet = sparseFieldSet; foreach (ResourceFieldAttribute field in resourceGraph.GetFields(fieldSelector)) { @@ -30,7 +28,7 @@ public static SparseFieldSetExpression Including(this SparseFieldSetE return newSparseFieldSet; } - private static SparseFieldSetExpression IncludeField(SparseFieldSetExpression sparseFieldSet, ResourceFieldAttribute fieldToInclude) + private static SparseFieldSetExpression? IncludeField(SparseFieldSetExpression? sparseFieldSet, ResourceFieldAttribute fieldToInclude) { if (sparseFieldSet == null || sparseFieldSet.Fields.Contains(fieldToInclude)) { @@ -41,14 +39,14 @@ private static SparseFieldSetExpression IncludeField(SparseFieldSetExpression sp return new SparseFieldSetExpression(newSparseFieldSet); } - public static SparseFieldSetExpression Excluding(this SparseFieldSetExpression sparseFieldSet, - Expression> fieldSelector, IResourceGraph resourceGraph) + public static SparseFieldSetExpression? Excluding(this SparseFieldSetExpression? sparseFieldSet, + Expression> fieldSelector, IResourceGraph resourceGraph) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(fieldSelector, nameof(fieldSelector)); ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); - SparseFieldSetExpression newSparseFieldSet = sparseFieldSet; + SparseFieldSetExpression? newSparseFieldSet = sparseFieldSet; foreach (ResourceFieldAttribute field in resourceGraph.GetFields(fieldSelector)) { @@ -58,7 +56,7 @@ public static SparseFieldSetExpression Excluding(this SparseFieldSetE return newSparseFieldSet; } - private static SparseFieldSetExpression ExcludeField(SparseFieldSetExpression sparseFieldSet, ResourceFieldAttribute fieldToExclude) + private static SparseFieldSetExpression? ExcludeField(SparseFieldSetExpression? sparseFieldSet, ResourceFieldAttribute fieldToExclude) { // Design tradeoff: When the sparse fieldset is empty, it means all fields will be selected. // Adding an exclusion in that case is a no-op, which results in still retrieving the excluded field from data store. diff --git a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs index 42f82f0563..b17255fe3a 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/SparseFieldTableExpression.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Text; @@ -48,7 +46,7 @@ public override string ToString() return builder.ToString(); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs b/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs index 67d9727cdc..e51436b252 100644 --- a/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs +++ b/src/JsonApiDotNetCore/Queries/Expressions/TextMatchKind.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Expressions { public enum TextMatchKind diff --git a/src/JsonApiDotNetCore/Queries/IPaginationContext.cs b/src/JsonApiDotNetCore/Queries/IPaginationContext.cs index d5dcc318a7..da769a3ade 100644 --- a/src/JsonApiDotNetCore/Queries/IPaginationContext.cs +++ b/src/JsonApiDotNetCore/Queries/IPaginationContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; namespace JsonApiDotNetCore.Queries @@ -18,7 +16,7 @@ public interface IPaginationContext /// The default page size from options, unless specified in query string. Can be null, which means no paging. Cannot be higher than /// options.MaximumPageSize. /// - PageSize PageSize { get; set; } + PageSize? PageSize { get; set; } /// /// Indicates whether the number of resources on the current page equals the page size. When true, a subsequent page might exist (assuming diff --git a/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs b/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs index c56dea7959..c9a82a7b36 100644 --- a/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs +++ b/src/JsonApiDotNetCore/Queries/IQueryConstraintProvider.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; namespace JsonApiDotNetCore.Queries diff --git a/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs b/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs index 1756f409a7..3905bd1041 100644 --- a/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs +++ b/src/JsonApiDotNetCore/Queries/IQueryLayerComposer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Queries.Expressions; @@ -16,7 +14,7 @@ public interface IQueryLayerComposer /// /// Builds a top-level filter from constraints, used to determine total resource count. /// - FilterExpression GetTopFilterFromConstraints(ResourceType primaryResourceType); + FilterExpression? GetTopFilterFromConstraints(ResourceType primaryResourceType); /// /// Collects constraints and builds a out of them, used to retrieve the actual resources. diff --git a/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs b/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs index 98b67a2a03..44baafc65f 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/EvaluatedIncludeCache.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Queries.Expressions; namespace JsonApiDotNetCore.Queries.Internal @@ -7,16 +5,18 @@ namespace JsonApiDotNetCore.Queries.Internal /// internal sealed class EvaluatedIncludeCache : IEvaluatedIncludeCache { - private IncludeExpression _include; + private IncludeExpression? _include; /// public void Set(IncludeExpression include) { + ArgumentGuard.NotNull(include, nameof(include)); + _include = include; } /// - public IncludeExpression Get() + public IncludeExpression? Get() { return _include; } diff --git a/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs b/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs index 31d773893b..618caeb286 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/IEvaluatedIncludeCache.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Queries.Expressions; using JsonApiDotNetCore.Resources; @@ -20,6 +18,6 @@ public interface IEvaluatedIncludeCache /// /// Gets the evaluated inclusion tree that was stored earlier. /// - IncludeExpression Get(); + IncludeExpression? Get(); } } diff --git a/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs b/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs index fbf3e43548..cb3ab1f2d3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/ISparseFieldSetCache.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Immutable; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs index 2b24cb990a..5864c18d3e 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FieldChainRequirements.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs index 9d69aaa0e3..de2f246503 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/FilterParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Reflection; @@ -16,10 +14,10 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing public class FilterParser : QueryExpressionParser { private readonly IResourceFactory _resourceFactory; - private readonly Action _validateSingleFieldCallback; - private ResourceType _resourceTypeInScope; + private readonly Action? _validateSingleFieldCallback; + private ResourceType? _resourceTypeInScope; - public FilterParser(IResourceFactory resourceFactory, Action validateSingleFieldCallback = null) + public FilterParser(IResourceFactory resourceFactory, Action? validateSingleFieldCallback = null) { ArgumentGuard.NotNull(resourceFactory, nameof(resourceFactory)); @@ -44,7 +42,7 @@ public FilterExpression Parse(string source, ResourceType resourceTypeInScope) protected FilterExpression ParseFilter() { - if (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Text) + if (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Text) { switch (nextToken.Value) { @@ -112,7 +110,7 @@ protected LogicalExpression ParseLogical(string operatorName) term = ParseFilter(); termsBuilder.Add(term); - while (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Comma) + while (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Comma) { EatSingleCharacterToken(TokenKind.Comma); @@ -158,7 +156,7 @@ protected ComparisonExpression ParseComparison(string operatorName) if (leftProperty.Name == nameof(Identifiable.Id) && rightTerm is LiteralConstantExpression rightConstant) { - string id = DeObfuscateStringId(leftProperty.ReflectedType, rightConstant.Value); + string id = DeObfuscateStringId(leftProperty.ReflectedType!, rightConstant.Value); rightTerm = new LiteralConstantExpression(id); } } @@ -202,7 +200,7 @@ protected AnyExpression ParseAny() constant = ParseConstant(); constantsBuilder.Add(constant); - while (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Comma) + while (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Comma) { EatSingleCharacterToken(TokenKind.Comma); @@ -232,7 +230,7 @@ private IImmutableSet DeObfuscateIdConstants(IImmutab foreach (LiteralConstantExpression idConstant in constantSet) { string stringId = idConstant.Value; - string id = DeObfuscateStringId(targetAttributeProperty.ReflectedType, stringId); + string id = DeObfuscateStringId(targetAttributeProperty.ReflectedType!, stringId); idConstantsBuilder.Add(new LiteralConstantExpression(id)); } @@ -246,9 +244,9 @@ protected HasExpression ParseHas() EatSingleCharacterToken(TokenKind.OpenParen); ResourceFieldChainExpression targetCollection = ParseFieldChain(FieldChainRequirements.EndsInToMany, null); - FilterExpression filter = null; + FilterExpression? filter = null; - if (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Comma) + if (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Comma) { EatSingleCharacterToken(TokenKind.Comma); @@ -262,7 +260,7 @@ protected HasExpression ParseHas() private FilterExpression ParseFilterInHas(HasManyAttribute hasManyRelationship) { - ResourceType outerScopeBackup = _resourceTypeInScope; + ResourceType outerScopeBackup = _resourceTypeInScope!; _resourceTypeInScope = hasManyRelationship.RightType; @@ -274,7 +272,7 @@ private FilterExpression ParseFilterInHas(HasManyAttribute hasManyRelationship) protected QueryExpression ParseCountOrField(FieldChainRequirements chainRequirements) { - CountExpression count = TryParseCount(); + CountExpression? count = TryParseCount(); if (count != null) { @@ -286,14 +284,14 @@ protected QueryExpression ParseCountOrField(FieldChainRequirements chainRequirem protected QueryExpression ParseCountOrConstantOrNullOrField(FieldChainRequirements chainRequirements) { - CountExpression count = TryParseCount(); + CountExpression? count = TryParseCount(); if (count != null) { return count; } - IdentifierExpression constantOrNull = TryParseConstantOrNull(); + IdentifierExpression? constantOrNull = TryParseConstantOrNull(); if (constantOrNull != null) { @@ -303,20 +301,20 @@ protected QueryExpression ParseCountOrConstantOrNullOrField(FieldChainRequiremen return ParseFieldChain(chainRequirements, "Count function, value between quotes, null or field name expected."); } - protected IdentifierExpression TryParseConstantOrNull() + protected IdentifierExpression? TryParseConstantOrNull() { - if (TokenStack.TryPeek(out Token nextToken)) + if (TokenStack.TryPeek(out Token? nextToken)) { if (nextToken.Kind == TokenKind.Text && nextToken.Value == Keywords.Null) { TokenStack.Pop(); - return new NullConstantExpression(); + return NullConstantExpression.Instance; } if (nextToken.Kind == TokenKind.QuotedText) { TokenStack.Pop(); - return new LiteralConstantExpression(nextToken.Value); + return new LiteralConstantExpression(nextToken.Value!); } } @@ -325,9 +323,9 @@ protected IdentifierExpression TryParseConstantOrNull() protected LiteralConstantExpression ParseConstant() { - if (TokenStack.TryPop(out Token token) && token.Kind == TokenKind.QuotedText) + if (TokenStack.TryPop(out Token? token) && token.Kind == TokenKind.QuotedText) { - return new LiteralConstantExpression(token.Value); + return new LiteralConstantExpression(token.Value!); } throw new QueryParseException("Value between quotes expected."); @@ -337,24 +335,24 @@ private string DeObfuscateStringId(Type resourceClrType, string stringId) { IIdentifiable tempResource = _resourceFactory.CreateInstance(resourceClrType); tempResource.StringId = stringId; - return tempResource.GetTypedId().ToString(); + return tempResource.GetTypedId().ToString()!; } protected override IImmutableList OnResolveFieldChain(string path, FieldChainRequirements chainRequirements) { if (chainRequirements == FieldChainRequirements.EndsInToMany) { - return ChainResolver.ResolveToOneChainEndingInToMany(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToOneChainEndingInToMany(_resourceTypeInScope!, path, _validateSingleFieldCallback); } if (chainRequirements == FieldChainRequirements.EndsInAttribute) { - return ChainResolver.ResolveToOneChainEndingInAttribute(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToOneChainEndingInAttribute(_resourceTypeInScope!, path, _validateSingleFieldCallback); } if (chainRequirements.HasFlag(FieldChainRequirements.EndsInAttribute) && chainRequirements.HasFlag(FieldChainRequirements.EndsInToOne)) { - return ChainResolver.ResolveToOneChainEndingInAttributeOrToOne(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToOneChainEndingInAttributeOrToOne(_resourceTypeInScope!, path, _validateSingleFieldCallback); } throw new InvalidOperationException($"Unexpected combination of chain requirement flags '{chainRequirements}'."); diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs index 5d59adcf67..012fd617c3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/IncludeParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -16,10 +14,10 @@ public class IncludeParser : QueryExpressionParser { private static readonly IncludeChainConverter IncludeChainConverter = new(); - private readonly Action _validateSingleRelationshipCallback; - private ResourceType _resourceTypeInScope; + private readonly Action? _validateSingleRelationshipCallback; + private ResourceType? _resourceTypeInScope; - public IncludeParser(Action validateSingleRelationshipCallback = null) + public IncludeParser(Action? validateSingleRelationshipCallback = null) { _validateSingleRelationshipCallback = validateSingleRelationshipCallback; } @@ -75,7 +73,7 @@ private static void ValidateMaximumIncludeDepth(int? maximumDepth, IEnumerable OnResolveFieldChain(string path, FieldChainRequirements chainRequirements) { - return ChainResolver.ResolveRelationshipChain(_resourceTypeInScope, path, _validateSingleRelationshipCallback); + return ChainResolver.ResolveRelationshipChain(_resourceTypeInScope!, path, _validateSingleRelationshipCallback); } } } diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs index 20714577d3..0bf32ff17e 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Keywords.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; #pragma warning disable AV1008 // Class should not be static diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs index 6989eeb689..dd76b4e58f 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/PaginationParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -13,10 +11,10 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing [PublicAPI] public class PaginationParser : QueryExpressionParser { - private readonly Action _validateSingleFieldCallback; - private ResourceType _resourceTypeInScope; + private readonly Action? _validateSingleFieldCallback; + private ResourceType? _resourceTypeInScope; - public PaginationParser(Action validateSingleFieldCallback = null) + public PaginationParser(Action? validateSingleFieldCallback = null) { _validateSingleFieldCallback = validateSingleFieldCallback; } @@ -80,7 +78,7 @@ protected PaginationElementQueryStringValueExpression ParsePaginationElement() protected int? TryParseNumber() { - if (TokenStack.TryPeek(out Token nextToken)) + if (TokenStack.TryPeek(out Token? nextToken)) { int number; @@ -88,7 +86,7 @@ protected PaginationElementQueryStringValueExpression ParsePaginationElement() { TokenStack.Pop(); - if (TokenStack.TryPop(out Token token) && token.Kind == TokenKind.Text && int.TryParse(token.Value, out number)) + if (TokenStack.TryPop(out Token? token) && token.Kind == TokenKind.Text && int.TryParse(token.Value, out number)) { return -number; } @@ -108,7 +106,7 @@ protected PaginationElementQueryStringValueExpression ParsePaginationElement() protected override IImmutableList OnResolveFieldChain(string path, FieldChainRequirements chainRequirements) { - return ChainResolver.ResolveToManyChain(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToManyChain(_resourceTypeInScope!, path, _validateSingleFieldCallback); } } } diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs index ac5e0a7ff9..f0e1392e30 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryExpressionParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -19,13 +17,8 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing [PublicAPI] public abstract class QueryExpressionParser { - protected Stack TokenStack { get; private set; } - private protected ResourceFieldChainResolver ChainResolver { get; } - - protected QueryExpressionParser() - { - ChainResolver = new ResourceFieldChainResolver(); - } + protected Stack TokenStack { get; private set; } = null!; + private protected ResourceFieldChainResolver ChainResolver { get; } = new(); /// /// Takes a dotted path and walks the resource graph to produce a chain of fields. @@ -38,11 +31,11 @@ protected virtual void Tokenize(string source) TokenStack = new Stack(tokenizer.EnumerateTokens().Reverse()); } - protected ResourceFieldChainExpression ParseFieldChain(FieldChainRequirements chainRequirements, string alternativeErrorMessage) + protected ResourceFieldChainExpression ParseFieldChain(FieldChainRequirements chainRequirements, string? alternativeErrorMessage) { - if (TokenStack.TryPop(out Token token) && token.Kind == TokenKind.Text) + if (TokenStack.TryPop(out Token? token) && token.Kind == TokenKind.Text) { - IImmutableList chain = OnResolveFieldChain(token.Value, chainRequirements); + IImmutableList chain = OnResolveFieldChain(token.Value!, chainRequirements); if (chain.Any()) { @@ -53,9 +46,9 @@ protected ResourceFieldChainExpression ParseFieldChain(FieldChainRequirements ch throw new QueryParseException(alternativeErrorMessage ?? "Field name expected."); } - protected CountExpression TryParseCount() + protected CountExpression? TryParseCount() { - if (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Text && nextToken.Value == Keywords.Count) + if (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Text && nextToken.Value == Keywords.Count) { TokenStack.Pop(); @@ -73,7 +66,7 @@ protected CountExpression TryParseCount() protected void EatText(string text) { - if (!TokenStack.TryPop(out Token token) || token.Kind != TokenKind.Text || token.Value != text) + if (!TokenStack.TryPop(out Token? token) || token.Kind != TokenKind.Text || token.Value != text) { throw new QueryParseException($"{text} expected."); } @@ -81,7 +74,7 @@ protected void EatText(string text) protected void EatSingleCharacterToken(TokenKind kind) { - if (!TokenStack.TryPop(out Token token) || token.Kind != kind) + if (!TokenStack.TryPop(out Token? token) || token.Kind != kind) { char ch = QueryTokenizer.SingleCharacterToTokenKinds.Single(pair => pair.Value == kind).Key; throw new QueryParseException($"{ch} expected."); diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs index b952624fc1..26010e3528 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryParseException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs index 72c224d03e..c25ce3a1c3 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryStringParameterScopeParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using JetBrains.Annotations; @@ -13,11 +11,11 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing public class QueryStringParameterScopeParser : QueryExpressionParser { private readonly FieldChainRequirements _chainRequirements; - private readonly Action _validateSingleFieldCallback; - private ResourceType _resourceTypeInScope; + private readonly Action? _validateSingleFieldCallback; + private ResourceType? _resourceTypeInScope; public QueryStringParameterScopeParser(FieldChainRequirements chainRequirements, - Action validateSingleFieldCallback = null) + Action? validateSingleFieldCallback = null) { _chainRequirements = chainRequirements; _validateSingleFieldCallback = validateSingleFieldCallback; @@ -40,16 +38,16 @@ public QueryStringParameterScopeExpression Parse(string source, ResourceType res protected QueryStringParameterScopeExpression ParseQueryStringParameterScope() { - if (!TokenStack.TryPop(out Token token) || token.Kind != TokenKind.Text) + if (!TokenStack.TryPop(out Token? token) || token.Kind != TokenKind.Text) { throw new QueryParseException("Parameter name expected."); } - var name = new LiteralConstantExpression(token.Value); + var name = new LiteralConstantExpression(token.Value!); - ResourceFieldChainExpression scope = null; + ResourceFieldChainExpression? scope = null; - if (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.OpenBracket) + if (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.OpenBracket) { TokenStack.Pop(); @@ -66,12 +64,12 @@ protected override IImmutableList OnResolveFieldChain(st if (chainRequirements == FieldChainRequirements.EndsInToMany) { // The mismatch here (ends-in-to-many being interpreted as entire-chain-must-be-to-many) is intentional. - return ChainResolver.ResolveToManyChain(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToManyChain(_resourceTypeInScope!, path, _validateSingleFieldCallback); } if (chainRequirements == FieldChainRequirements.IsRelationship) { - return ChainResolver.ResolveRelationshipChain(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveRelationshipChain(_resourceTypeInScope!, path, _validateSingleFieldCallback); } throw new InvalidOperationException($"Unexpected combination of chain requirement flags '{chainRequirements}'."); diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs index a4af56886c..af6ff4ada9 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/QueryTokenizer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; @@ -59,7 +57,7 @@ public IEnumerable EnumerateTokens() _isInQuotedSection = false; - Token literalToken = ProduceTokenFromTextBuffer(true); + Token literalToken = ProduceTokenFromTextBuffer(true)!; yield return literalToken; } else @@ -78,7 +76,7 @@ public IEnumerable EnumerateTokens() if (singleCharacterTokenKind != null && !IsMinusInsideText(singleCharacterTokenKind.Value)) { - Token identifierToken = ProduceTokenFromTextBuffer(false); + Token? identifierToken = ProduceTokenFromTextBuffer(false); if (identifierToken != null) { @@ -106,7 +104,7 @@ public IEnumerable EnumerateTokens() throw new QueryParseException("' expected."); } - Token lastToken = ProduceTokenFromTextBuffer(false); + Token? lastToken = ProduceTokenFromTextBuffer(false); if (lastToken != null) { @@ -129,7 +127,7 @@ private bool IsMinusInsideText(TokenKind kind) return SingleCharacterToTokenKinds.ContainsKey(ch) ? SingleCharacterToTokenKinds[ch] : null; } - private Token ProduceTokenFromTextBuffer(bool isQuotedText) + private Token? ProduceTokenFromTextBuffer(bool isQuotedText) { if (isQuotedText || _textBuffer.Length > 0) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs index 1dab835c05..3233ec92d1 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/ResourceFieldChainResolver.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -17,7 +15,7 @@ internal sealed class ResourceFieldChainResolver /// Resolves a chain of relationships that ends in a to-many relationship, for example: blogs.owner.articles.comments /// public IImmutableList ResolveToManyChain(ResourceType resourceType, string path, - Action validateCallback = null) + Action? validateCallback = null) { ImmutableArray.Builder chainBuilder = ImmutableArray.CreateBuilder(); @@ -56,7 +54,7 @@ public IImmutableList ResolveToManyChain(ResourceType re /// /// public IImmutableList ResolveRelationshipChain(ResourceType resourceType, string path, - Action validateCallback = null) + Action? validateCallback = null) { ImmutableArray.Builder chainBuilder = ImmutableArray.CreateBuilder(); ResourceType nextResourceType = resourceType; @@ -82,7 +80,7 @@ public IImmutableList ResolveRelationshipChain(ResourceT /// name /// public IImmutableList ResolveToOneChainEndingInAttribute(ResourceType resourceType, string path, - Action validateCallback = null) + Action? validateCallback = null) { ImmutableArray.Builder chainBuilder = ImmutableArray.CreateBuilder(); @@ -118,7 +116,7 @@ public IImmutableList ResolveToOneChainEndingInAttribute /// /// public IImmutableList ResolveToOneChainEndingInToMany(ResourceType resourceType, string path, - Action validateCallback = null) + Action? validateCallback = null) { ImmutableArray.Builder chainBuilder = ImmutableArray.CreateBuilder(); @@ -155,7 +153,7 @@ public IImmutableList ResolveToOneChainEndingInToMany(Re /// /// public IImmutableList ResolveToOneChainEndingInAttributeOrToOne(ResourceType resourceType, string path, - Action validateCallback = null) + Action? validateCallback = null) { ImmutableArray.Builder chainBuilder = ImmutableArray.CreateBuilder(); @@ -190,7 +188,7 @@ public IImmutableList ResolveToOneChainEndingInAttribute private RelationshipAttribute GetRelationship(string publicName, ResourceType resourceType, string path) { - RelationshipAttribute relationship = resourceType.FindRelationshipByPublicName(publicName); + RelationshipAttribute? relationship = resourceType.FindRelationshipByPublicName(publicName); if (relationship == null) { @@ -232,7 +230,7 @@ private RelationshipAttribute GetToOneRelationship(string publicName, ResourceTy private AttrAttribute GetAttribute(string publicName, ResourceType resourceType, string path) { - AttrAttribute attribute = resourceType.FindAttributeByPublicName(publicName); + AttrAttribute? attribute = resourceType.FindAttributeByPublicName(publicName); if (attribute == null) { @@ -246,7 +244,7 @@ private AttrAttribute GetAttribute(string publicName, ResourceType resourceType, public ResourceFieldAttribute GetField(string publicName, ResourceType resourceType, string path) { - ResourceFieldAttribute field = resourceType.Fields.FirstOrDefault(nextField => nextField.PublicName == publicName); + ResourceFieldAttribute? field = resourceType.Fields.FirstOrDefault(nextField => nextField.PublicName == publicName); if (field == null) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs index b018135668..a78ec99b66 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SortParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -13,10 +11,10 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing [PublicAPI] public class SortParser : QueryExpressionParser { - private readonly Action _validateSingleFieldCallback; - private ResourceType _resourceTypeInScope; + private readonly Action? _validateSingleFieldCallback; + private ResourceType? _resourceTypeInScope; - public SortParser(Action validateSingleFieldCallback = null) + public SortParser(Action? validateSingleFieldCallback = null) { _validateSingleFieldCallback = validateSingleFieldCallback; } @@ -58,13 +56,13 @@ protected SortElementExpression ParseSortElement() { bool isAscending = true; - if (TokenStack.TryPeek(out Token nextToken) && nextToken.Kind == TokenKind.Minus) + if (TokenStack.TryPeek(out Token? nextToken) && nextToken.Kind == TokenKind.Minus) { TokenStack.Pop(); isAscending = false; } - CountExpression count = TryParseCount(); + CountExpression? count = TryParseCount(); if (count != null) { @@ -80,12 +78,12 @@ protected override IImmutableList OnResolveFieldChain(st { if (chainRequirements == FieldChainRequirements.EndsInToMany) { - return ChainResolver.ResolveToOneChainEndingInToMany(_resourceTypeInScope, path); + return ChainResolver.ResolveToOneChainEndingInToMany(_resourceTypeInScope!, path); } if (chainRequirements == FieldChainRequirements.EndsInAttribute) { - return ChainResolver.ResolveToOneChainEndingInAttribute(_resourceTypeInScope, path, _validateSingleFieldCallback); + return ChainResolver.ResolveToOneChainEndingInAttribute(_resourceTypeInScope!, path, _validateSingleFieldCallback); } throw new InvalidOperationException($"Unexpected combination of chain requirement flags '{chainRequirements}'."); diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs index 648c9dd551..2a2fa60e5d 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldSetParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using System.Linq; @@ -13,15 +11,15 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing [PublicAPI] public class SparseFieldSetParser : QueryExpressionParser { - private readonly Action _validateSingleFieldCallback; - private ResourceType _resourceType; + private readonly Action? _validateSingleFieldCallback; + private ResourceType? _resourceType; - public SparseFieldSetParser(Action validateSingleFieldCallback = null) + public SparseFieldSetParser(Action? validateSingleFieldCallback = null) { _validateSingleFieldCallback = validateSingleFieldCallback; } - public SparseFieldSetExpression Parse(string source, ResourceType resourceType) + public SparseFieldSetExpression? Parse(string source, ResourceType resourceType) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -29,14 +27,14 @@ public SparseFieldSetExpression Parse(string source, ResourceType resourceType) Tokenize(source); - SparseFieldSetExpression expression = ParseSparseFieldSet(); + SparseFieldSetExpression? expression = ParseSparseFieldSet(); AssertTokenStackIsEmpty(); return expression; } - protected SparseFieldSetExpression ParseSparseFieldSet() + protected SparseFieldSetExpression? ParseSparseFieldSet() { ImmutableHashSet.Builder fieldSetBuilder = ImmutableHashSet.CreateBuilder(); @@ -57,9 +55,9 @@ protected SparseFieldSetExpression ParseSparseFieldSet() protected override IImmutableList OnResolveFieldChain(string path, FieldChainRequirements chainRequirements) { - ResourceFieldAttribute field = ChainResolver.GetField(path, _resourceType, path); + ResourceFieldAttribute field = ChainResolver.GetField(path, _resourceType!, path); - _validateSingleFieldCallback?.Invoke(field, _resourceType, path); + _validateSingleFieldCallback?.Invoke(field, _resourceType!, path); return ImmutableArray.Create(field); } diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs index e47d2b6053..d9c97dd220 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/SparseFieldTypeParser.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Immutable; using JetBrains.Annotations; @@ -33,7 +31,7 @@ public ResourceType Parse(string source) private ResourceType ParseSparseFieldTarget() { - if (!TokenStack.TryPop(out Token token) || token.Kind != TokenKind.Text) + if (!TokenStack.TryPop(out Token? token) || token.Kind != TokenKind.Text) { throw new QueryParseException("Parameter name expected."); } @@ -49,9 +47,9 @@ private ResourceType ParseSparseFieldTarget() private ResourceType ParseResourceName() { - if (TokenStack.TryPop(out Token token) && token.Kind == TokenKind.Text) + if (TokenStack.TryPop(out Token? token) && token.Kind == TokenKind.Text) { - return GetResourceType(token.Value); + return GetResourceType(token.Value!); } throw new QueryParseException("Resource type expected."); @@ -59,7 +57,7 @@ private ResourceType ParseResourceName() private ResourceType GetResourceType(string publicName) { - ResourceType resourceType = _resourceGraph.FindResourceType(publicName); + ResourceType? resourceType = _resourceGraph.FindResourceType(publicName); if (resourceType == null) { diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs index c4dc21cdc0..6965562d44 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/Token.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Queries.Internal.Parsing @@ -8,9 +6,9 @@ namespace JsonApiDotNetCore.Queries.Internal.Parsing public sealed class Token { public TokenKind Kind { get; } - public string Value { get; } + public string? Value { get; } - public Token(TokenKind kind, string value = null) + public Token(TokenKind kind, string? value = null) { Kind = kind; Value = value; diff --git a/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs b/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs index 3b82043d17..3658c82f18 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/Parsing/TokenKind.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries.Internal.Parsing { public enum TokenKind diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs index 5a2cdacd63..88f65f576c 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryLayerComposer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -48,7 +46,7 @@ public QueryLayerComposer(IEnumerable constraintProvid } /// - public FilterExpression GetTopFilterFromConstraints(ResourceType primaryResourceType) + public FilterExpression? GetTopFilterFromConstraints(ResourceType primaryResourceType) { ExpressionInScope[] constraints = _constraintProviders.SelectMany(provider => provider.GetConstraints()).ToArray(); @@ -98,12 +96,8 @@ private QueryLayer ComposeTopLayer(IEnumerable constraints, R // @formatter:wrap_chained_method_calls restore PaginationExpression topPagination = GetPagination(expressionsInTopScope, resourceType); - - if (topPagination != null) - { - _paginationContext.PageSize = topPagination.PageSize; - _paginationContext.PageNumber = topPagination.PageNumber; - } + _paginationContext.PageSize = topPagination.PageSize; + _paginationContext.PageNumber = topPagination.PageNumber; return new QueryLayer(resourceType) { @@ -141,14 +135,13 @@ private IncludeExpression ComposeChildren(QueryLayer topLayer, ICollection ProcessIncludeSet(IImmutableSet includeElements, QueryLayer parentLayer, ICollection parentRelationshipChain, ICollection constraints) { - IImmutableSet includeElementsEvaluated = - GetIncludeElements(includeElements, parentLayer.ResourceType) ?? ImmutableHashSet.Empty; + IImmutableSet includeElementsEvaluated = GetIncludeElements(includeElements, parentLayer.ResourceType); var updatesInChildren = new Dictionary>(); foreach (IncludeElementExpression includeElement in includeElementsEvaluated) { - parentLayer.Projection ??= new Dictionary(); + parentLayer.Projection ??= new Dictionary(); if (!parentLayer.Projection.ContainsKey(includeElement.Relationship)) { @@ -225,7 +218,7 @@ public QueryLayer ComposeForGetById(TId id, ResourceType primaryResourceTyp if (fieldSelection == TopFieldSelection.OnlyIdAttribute) { - queryLayer.Projection = new Dictionary + queryLayer.Projection = new Dictionary { [idAttribute] = null }; @@ -254,11 +247,11 @@ public QueryLayer ComposeSecondaryLayerForRelationship(ResourceType secondaryRes return secondaryLayer; } - private IDictionary GetProjectionForRelationship(ResourceType secondaryResourceType) + private IDictionary GetProjectionForRelationship(ResourceType secondaryResourceType) { IImmutableSet secondaryAttributeSet = _sparseFieldSetCache.GetIdAttributeSetForRelationshipQuery(secondaryResourceType); - return secondaryAttributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer)null); + return secondaryAttributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer?)null); } /// @@ -269,17 +262,17 @@ public QueryLayer WrapLayerForSecondaryEndpoint(QueryLayer secondaryLayer, ArgumentGuard.NotNull(primaryResourceType, nameof(primaryResourceType)); ArgumentGuard.NotNull(relationship, nameof(relationship)); - IncludeExpression innerInclude = secondaryLayer.Include; + IncludeExpression? innerInclude = secondaryLayer.Include; secondaryLayer.Include = null; IImmutableSet primaryAttributeSet = _sparseFieldSetCache.GetIdAttributeSetForRelationshipQuery(primaryResourceType); - Dictionary primaryProjection = - primaryAttributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer)null); + Dictionary primaryProjection = + primaryAttributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer?)null); primaryProjection[relationship] = secondaryLayer; - FilterExpression primaryFilter = GetFilter(Array.Empty(), primaryResourceType); + FilterExpression? primaryFilter = GetFilter(Array.Empty(), primaryResourceType); AttrAttribute primaryIdAttribute = GetIdAttribute(primaryResourceType); return new QueryLayer(primaryResourceType) @@ -290,7 +283,7 @@ public QueryLayer WrapLayerForSecondaryEndpoint(QueryLayer secondaryLayer, }; } - private IncludeExpression RewriteIncludeForSecondaryEndpoint(IncludeExpression relativeInclude, RelationshipAttribute secondaryRelationship) + private IncludeExpression RewriteIncludeForSecondaryEndpoint(IncludeExpression? relativeInclude, RelationshipAttribute secondaryRelationship) { IncludeElementExpression parentElement = relativeInclude != null ? new IncludeElementExpression(secondaryRelationship, relativeInclude.Elements) @@ -299,20 +292,20 @@ private IncludeExpression RewriteIncludeForSecondaryEndpoint(IncludeExpression r return new IncludeExpression(ImmutableHashSet.Create(parentElement)); } - private FilterExpression CreateFilterByIds(IReadOnlyCollection ids, AttrAttribute idAttribute, FilterExpression existingFilter) + private FilterExpression? CreateFilterByIds(IReadOnlyCollection ids, AttrAttribute idAttribute, FilterExpression? existingFilter) { var idChain = new ResourceFieldChainExpression(idAttribute); - FilterExpression filter = null; + FilterExpression? filter = null; if (ids.Count == 1) { - var constant = new LiteralConstantExpression(ids.Single().ToString()); + var constant = new LiteralConstantExpression(ids.Single()!.ToString()!); filter = new ComparisonExpression(ComparisonOperator.Equals, idChain, constant); } else if (ids.Count > 1) { - ImmutableHashSet constants = ids.Select(id => new LiteralConstantExpression(id.ToString())).ToImmutableHashSet(); + ImmutableHashSet constants = ids.Select(id => new LiteralConstantExpression(id!.ToString()!)).ToImmutableHashSet(); filter = new AnyExpression(idChain, constants); } @@ -346,7 +339,7 @@ public QueryLayer ComposeForUpdate(TId id, ResourceType primaryResource) foreach (RelationshipAttribute relationship in _targetedFields.Relationships) { - object rightValue = relationship.GetValue(primaryResource); + object? rightValue = relationship.GetValue(primaryResource); ICollection rightResourceIds = _collectionConverter.ExtractResources(rightValue); if (rightResourceIds.Any()) @@ -367,14 +360,14 @@ public QueryLayer ComposeForGetRelationshipRightIds(RelationshipAttribute relati object[] typedIds = rightResourceIds.Select(resource => resource.GetTypedId()).ToArray(); - FilterExpression baseFilter = GetFilter(Array.Empty(), relationship.RightType); - FilterExpression filter = CreateFilterByIds(typedIds, rightIdAttribute, baseFilter); + FilterExpression? baseFilter = GetFilter(Array.Empty(), relationship.RightType); + FilterExpression? filter = CreateFilterByIds(typedIds, rightIdAttribute, baseFilter); return new QueryLayer(relationship.RightType) { Include = IncludeExpression.Empty, Filter = filter, - Projection = new Dictionary + Projection = new Dictionary { [rightIdAttribute] = null } @@ -391,19 +384,19 @@ public QueryLayer ComposeForHasMany(HasManyAttribute hasManyRelationship, T AttrAttribute rightIdAttribute = GetIdAttribute(hasManyRelationship.RightType); object[] rightTypedIds = rightResourceIds.Select(resource => resource.GetTypedId()).ToArray(); - FilterExpression leftFilter = CreateFilterByIds(leftId.AsArray(), leftIdAttribute, null); - FilterExpression rightFilter = CreateFilterByIds(rightTypedIds, rightIdAttribute, null); + FilterExpression? leftFilter = CreateFilterByIds(leftId.AsArray(), leftIdAttribute, null); + FilterExpression? rightFilter = CreateFilterByIds(rightTypedIds, rightIdAttribute, null); return new QueryLayer(hasManyRelationship.LeftType) { Include = new IncludeExpression(ImmutableHashSet.Create(new IncludeElementExpression(hasManyRelationship))), Filter = leftFilter, - Projection = new Dictionary + Projection = new Dictionary { [hasManyRelationship] = new(hasManyRelationship.RightType) { Filter = rightFilter, - Projection = new Dictionary + Projection = new Dictionary { [rightIdAttribute] = null } @@ -421,13 +414,13 @@ protected virtual IImmutableSet GetIncludeElements(IIm return _resourceDefinitionAccessor.OnApplyIncludes(resourceType, includeElements); } - protected virtual FilterExpression GetFilter(IReadOnlyCollection expressionsInScope, ResourceType resourceType) + protected virtual FilterExpression? GetFilter(IReadOnlyCollection expressionsInScope, ResourceType resourceType) { ArgumentGuard.NotNull(expressionsInScope, nameof(expressionsInScope)); ArgumentGuard.NotNull(resourceType, nameof(resourceType)); ImmutableArray filters = expressionsInScope.OfType().ToImmutableArray(); - FilterExpression filter = filters.Length > 1 ? new LogicalExpression(LogicalOperator.And, filters) : filters.FirstOrDefault(); + FilterExpression? filter = filters.Length > 1 ? new LogicalExpression(LogicalOperator.And, filters) : filters.FirstOrDefault(); return _resourceDefinitionAccessor.OnApplyFilter(resourceType, filter); } @@ -437,7 +430,7 @@ protected virtual SortExpression GetSort(IReadOnlyCollection ex ArgumentGuard.NotNull(expressionsInScope, nameof(expressionsInScope)); ArgumentGuard.NotNull(resourceType, nameof(resourceType)); - SortExpression sort = expressionsInScope.OfType().FirstOrDefault(); + SortExpression? sort = expressionsInScope.OfType().FirstOrDefault(); sort = _resourceDefinitionAccessor.OnApplySort(resourceType, sort); @@ -456,7 +449,7 @@ protected virtual PaginationExpression GetPagination(IReadOnlyCollection().FirstOrDefault(); + PaginationExpression? pagination = expressionsInScope.OfType().FirstOrDefault(); pagination = _resourceDefinitionAccessor.OnApplyPagination(resourceType, pagination); @@ -465,7 +458,7 @@ protected virtual PaginationExpression GetPagination(IReadOnlyCollection GetProjectionForSparseAttributeSet(ResourceType resourceType) + protected virtual IDictionary? GetProjectionForSparseAttributeSet(ResourceType resourceType) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -480,7 +473,7 @@ protected virtual IDictionary GetProjectionF AttrAttribute idAttribute = GetIdAttribute(resourceType); attributeSet.Add(idAttribute); - return attributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer)null); + return attributeSet.ToDictionary(key => (ResourceFieldAttribute)key, _ => (QueryLayer?)null); } private static AttrAttribute GetIdAttribute(ResourceType resourceType) diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs index 18a05852d7..7f4cbc895e 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/IncludeClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; @@ -15,7 +13,7 @@ namespace JsonApiDotNetCore.Queries.Internal.QueryableBuilding /// Transforms into calls. /// [PublicAPI] - public class IncludeClauseBuilder : QueryClauseBuilder + public class IncludeClauseBuilder : QueryClauseBuilder { private static readonly IncludeChainConverter IncludeChainConverter = new(); @@ -39,7 +37,7 @@ public Expression ApplyInclude(IncludeExpression include) return Visit(include, null); } - public override Expression VisitInclude(IncludeExpression expression, object argument) + public override Expression VisitInclude(IncludeExpression expression, object? argument) { Expression source = ApplyEagerLoads(_source, _resourceType.EagerLoads, null); @@ -53,7 +51,7 @@ public override Expression VisitInclude(IncludeExpression expression, object arg private Expression ProcessRelationshipChain(ResourceFieldChainExpression chain, Expression source) { - string path = null; + string? path = null; Expression result = source; foreach (RelationshipAttribute relationship in chain.Fields.Cast()) @@ -63,10 +61,10 @@ private Expression ProcessRelationshipChain(ResourceFieldChainExpression chain, result = ApplyEagerLoads(result, relationship.RightType.EagerLoads, path); } - return IncludeExtensionMethodCall(result, path); + return IncludeExtensionMethodCall(result, path!); } - private Expression ApplyEagerLoads(Expression source, IEnumerable eagerLoads, string pathPrefix) + private Expression ApplyEagerLoads(Expression source, IEnumerable eagerLoads, string? pathPrefix) { Expression result = source; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs index 8b936aaae7..c1050a9d8a 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using Humanizer; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs index 77a93b3e0a..6d555ed23e 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaParameterNameScope.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs index 031a49f303..d80b373e3a 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScope.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq.Expressions; using JetBrains.Annotations; @@ -17,7 +15,7 @@ public sealed class LambdaScope : IDisposable public ParameterExpression Parameter { get; } public Expression Accessor { get; } - public LambdaScope(LambdaParameterNameFactory nameFactory, Type elementType, Expression accessorExpression) + public LambdaScope(LambdaParameterNameFactory nameFactory, Type elementType, Expression? accessorExpression) { ArgumentGuard.NotNull(nameFactory, nameof(nameFactory)); ArgumentGuard.NotNull(elementType, nameof(elementType)); diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs index 62e34d8673..d5b55fec13 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/LambdaScopeFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq.Expressions; using JetBrains.Annotations; @@ -18,7 +16,7 @@ public LambdaScopeFactory(LambdaParameterNameFactory nameFactory) _nameFactory = nameFactory; } - public LambdaScope CreateScope(Type elementType, Expression accessorExpression = null) + public LambdaScope CreateScope(Type elementType, Expression? accessorExpression = null) { ArgumentGuard.NotNull(elementType, nameof(elementType)); diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs index af5ba41dbf..e2692b75de 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/OrderClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using System.Linq.Expressions; @@ -13,7 +11,7 @@ namespace JsonApiDotNetCore.Queries.Internal.QueryableBuilding /// calls. /// [PublicAPI] - public class OrderClauseBuilder : QueryClauseBuilder + public class OrderClauseBuilder : QueryClauseBuilder { private readonly Expression _source; private readonly Type _extensionType; @@ -35,21 +33,21 @@ public Expression ApplyOrderBy(SortExpression expression) return Visit(expression, null); } - public override Expression VisitSort(SortExpression expression, Expression argument) + public override Expression VisitSort(SortExpression expression, Expression? argument) { - Expression sortExpression = null; + Expression? sortExpression = null; foreach (SortElementExpression sortElement in expression.Elements) { sortExpression = Visit(sortElement, sortExpression); } - return sortExpression; + return sortExpression!; } - public override Expression VisitSortElement(SortElementExpression expression, Expression previousExpression) + public override Expression VisitSortElement(SortElementExpression expression, Expression? previousExpression) { - Expression body = expression.Count != null ? Visit(expression.Count, null) : Visit(expression.TargetAttribute, null); + Expression body = expression.Count != null ? Visit(expression.Count, null) : Visit(expression.TargetAttribute!, null); LambdaExpression lambda = Expression.Lambda(body, LambdaScope.Parameter); diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs index 9e1521e8ac..d916d45bae 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -27,7 +25,7 @@ public override Expression VisitCount(CountExpression expression, TArgument argu { Expression collectionExpression = Visit(expression.TargetCollection, argument); - Expression propertyExpression = TryGetCollectionCount(collectionExpression); + Expression? propertyExpression = TryGetCollectionCount(collectionExpression); if (propertyExpression == null) { @@ -37,7 +35,7 @@ public override Expression VisitCount(CountExpression expression, TArgument argu return propertyExpression; } - private static Expression TryGetCollectionCount(Expression collectionExpression) + private static Expression? TryGetCollectionCount(Expression? collectionExpression) { if (collectionExpression != null) { @@ -72,7 +70,7 @@ public override Expression VisitResourceFieldChain(ResourceFieldChainExpression private static MemberExpression CreatePropertyExpressionFromComponents(Expression source, IEnumerable components) { - MemberExpression property = null; + MemberExpression? property = null; foreach (string propertyName in components) { @@ -86,10 +84,10 @@ private static MemberExpression CreatePropertyExpressionFromComponents(Expressio property = property == null ? Expression.Property(source, propertyName) : Expression.Property(property, propertyName); } - return property; + return property!; } - protected Expression CreateTupleAccessExpressionForConstant(object value, Type type) + protected Expression CreateTupleAccessExpressionForConstant(object? value, Type type) { // To enable efficient query plan caching, inline constants (that vary per request) should be converted into query parameters. // https://stackoverflow.com/questions/54075758/building-a-parameterized-entityframework-core-expression diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs index 49ccd07fad..99036e5d1d 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/QueryableBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq.Expressions; @@ -27,7 +25,7 @@ public class QueryableBuilder private readonly LambdaScopeFactory _lambdaScopeFactory; public QueryableBuilder(Expression source, Type elementType, Type extensionType, LambdaParameterNameFactory nameFactory, - IResourceFactory resourceFactory, IModel entityModel, LambdaScopeFactory lambdaScopeFactory = null) + IResourceFactory resourceFactory, IModel entityModel, LambdaScopeFactory? lambdaScopeFactory = null) { ArgumentGuard.NotNull(source, nameof(source)); ArgumentGuard.NotNull(elementType, nameof(elementType)); @@ -111,7 +109,7 @@ protected virtual Expression ApplyPagination(Expression source, PaginationExpres return builder.ApplySkipTake(pagination); } - protected virtual Expression ApplyProjection(Expression source, IDictionary projection, ResourceType resourceType) + protected virtual Expression ApplyProjection(Expression source, IDictionary projection, ResourceType resourceType) { using LambdaScope lambdaScope = _lambdaScopeFactory.CreateScope(_elementType); diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs index 0452d92b18..d1dc129780 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SelectClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -48,7 +46,7 @@ public SelectClauseBuilder(Expression source, LambdaScope lambdaScope, IModel en _resourceFactory = resourceFactory; } - public Expression ApplySelect(IDictionary selectors, ResourceType resourceType) + public Expression ApplySelect(IDictionary selectors, ResourceType resourceType) { ArgumentGuard.NotNull(selectors, nameof(selectors)); @@ -64,7 +62,7 @@ public Expression ApplySelect(IDictionary se return SelectExtensionMethodCall(_source, LambdaScope.Parameter.Type, lambda); } - private Expression CreateLambdaBodyInitializer(IDictionary selectors, ResourceType resourceType, + private Expression CreateLambdaBodyInitializer(IDictionary selectors, ResourceType resourceType, LambdaScope lambdaScope, bool lambdaAccessorRequiresTestForNull) { ICollection propertySelectors = ToPropertySelectors(selectors, resourceType, lambdaScope.Accessor.Type); @@ -83,7 +81,7 @@ private Expression CreateLambdaBodyInitializer(IDictionary ToPropertySelectors(IDictionary resourceFieldSelectors, + private ICollection ToPropertySelectors(IDictionary resourceFieldSelectors, ResourceType resourceType, Type elementType) { var propertySelectors = new Dictionary(); @@ -94,7 +92,7 @@ private ICollection ToPropertySelectors(IDictionary selector.Key is RelationshipAttribute); - foreach ((ResourceFieldAttribute resourceField, QueryLayer queryLayer) in resourceFieldSelectors) + foreach ((ResourceFieldAttribute resourceField, QueryLayer? queryLayer) in resourceFieldSelectors) { var propertySelector = new PropertySelector(resourceField.Property, queryLayer); @@ -157,7 +155,7 @@ private MemberAssignment CreatePropertyAssignment(PropertySelector selector, Lam private Expression CreateAssignmentRightHandSideForLayer(QueryLayer layer, LambdaScope outerLambdaScope, MemberExpression propertyAccess, PropertyInfo selectorPropertyInfo, LambdaScopeFactory lambdaScopeFactory) { - Type collectionElementType = CollectionConverter.TryGetCollectionElementType(selectorPropertyInfo.PropertyType); + Type? collectionElementType = CollectionConverter.TryGetCollectionElementType(selectorPropertyInfo.PropertyType); Type bodyElementType = collectionElementType ?? selectorPropertyInfo.PropertyType; if (collectionElementType != null) @@ -208,9 +206,9 @@ private Expression SelectExtensionMethodCall(Expression source, Type elementType private sealed class PropertySelector { public PropertyInfo Property { get; } - public QueryLayer NextLayer { get; } + public QueryLayer? NextLayer { get; } - public PropertySelector(PropertyInfo property, QueryLayer nextLayer = null) + public PropertySelector(PropertyInfo property, QueryLayer? nextLayer = null) { ArgumentGuard.NotNull(property, nameof(property)); diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs index cb854ebe36..ce02edb368 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/SkipTakeClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using System.Linq.Expressions; @@ -12,7 +10,7 @@ namespace JsonApiDotNetCore.Queries.Internal.QueryableBuilding /// Transforms into and calls. /// [PublicAPI] - public class SkipTakeClauseBuilder : QueryClauseBuilder + public class SkipTakeClauseBuilder : QueryClauseBuilder { private readonly Expression _source; private readonly Type _extensionType; @@ -34,7 +32,7 @@ public Expression ApplySkipTake(PaginationExpression expression) return Visit(expression, null); } - public override Expression VisitPagination(PaginationExpression expression, object argument) + public override Expression VisitPagination(PaginationExpression expression, object? argument) { Expression skipTakeExpression = _source; diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs index cc7bf7db96..8ef9535f1c 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -17,7 +15,7 @@ namespace JsonApiDotNetCore.Queries.Internal.QueryableBuilding /// calls. /// [PublicAPI] - public class WhereClauseBuilder : QueryClauseBuilder + public class WhereClauseBuilder : QueryClauseBuilder { private static readonly CollectionConverter CollectionConverter = new(); private static readonly ConstantExpression NullConstant = Expression.Constant(null); @@ -58,18 +56,18 @@ private Expression WhereExtensionMethodCall(LambdaExpression predicate) return Expression.Call(_extensionType, "Where", LambdaScope.Parameter.Type.AsArray(), _source, predicate); } - public override Expression VisitHas(HasExpression expression, Type argument) + public override Expression VisitHas(HasExpression expression, Type? argument) { Expression property = Visit(expression.TargetCollection, argument); - Type elementType = CollectionConverter.TryGetCollectionElementType(property.Type); + Type? elementType = CollectionConverter.TryGetCollectionElementType(property.Type); if (elementType == null) { throw new InvalidOperationException("Expression must be a collection."); } - Expression predicate = null; + Expression? predicate = null; if (expression.Filter != null) { @@ -83,17 +81,14 @@ public override Expression VisitHas(HasExpression expression, Type argument) return AnyExtensionMethodCall(elementType, property, predicate); } - private static MethodCallExpression AnyExtensionMethodCall(Type elementType, Expression source, Expression predicate) + private static MethodCallExpression AnyExtensionMethodCall(Type elementType, Expression source, Expression? predicate) { - if (predicate != null) - { - return Expression.Call(typeof(Enumerable), "Any", elementType.AsArray(), source, predicate); - } - - return Expression.Call(typeof(Enumerable), "Any", elementType.AsArray(), source); + return predicate != null + ? Expression.Call(typeof(Enumerable), "Any", elementType.AsArray(), source, predicate) + : Expression.Call(typeof(Enumerable), "Any", elementType.AsArray(), source); } - public override Expression VisitMatchText(MatchTextExpression expression, Type argument) + public override Expression VisitMatchText(MatchTextExpression expression, Type? argument) { Expression property = Visit(expression.TargetAttribute, argument); @@ -117,16 +112,16 @@ public override Expression VisitMatchText(MatchTextExpression expression, Type a return Expression.Call(property, "Contains", null, text); } - public override Expression VisitAny(AnyExpression expression, Type argument) + public override Expression VisitAny(AnyExpression expression, Type? argument) { Expression property = Visit(expression.TargetAttribute, argument); - var valueList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(property.Type)); + IList valueList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(property.Type))!; foreach (LiteralConstantExpression constant in expression.Constants) { - object value = ConvertTextToTargetType(constant.Value, property.Type); - valueList!.Add(value); + object? value = ConvertTextToTargetType(constant.Value, property.Type); + valueList.Add(value); } ConstantExpression collection = Expression.Constant(valueList); @@ -138,7 +133,7 @@ private static Expression ContainsExtensionMethodCall(Expression collection, Exp return Expression.Call(typeof(Enumerable), "Contains", value.Type.AsArray(), collection, value); } - public override Expression VisitLogical(LogicalExpression expression, Type argument) + public override Expression VisitLogical(LogicalExpression expression, Type? argument) { var termQueue = new Queue(expression.Terms.Select(filter => Visit(filter, argument))); @@ -171,13 +166,13 @@ private static BinaryExpression Compose(Queue argumentQueue, Func).MakeGenericType(leftType); } - Type rightType = TryResolveFixedType(right); + Type? rightType = TryResolveFixedType(right); if (rightType != null && RuntimeTypeConverter.CanContainNull(rightType)) { @@ -241,7 +236,7 @@ private Type ResolveFixedType(QueryExpression expression) return result.Type; } - private Type TryResolveFixedType(QueryExpression expression) + private Type? TryResolveFixedType(QueryExpression expression) { if (expression is CountExpression) { @@ -257,7 +252,7 @@ private Type TryResolveFixedType(QueryExpression expression) return null; } - private static Expression WrapInConvert(Expression expression, Type targetType) + private static Expression WrapInConvert(Expression expression, Type? targetType) { try { @@ -269,19 +264,19 @@ private static Expression WrapInConvert(Expression expression, Type targetType) } } - public override Expression VisitNullConstant(NullConstantExpression expression, Type expressionType) + public override Expression VisitNullConstant(NullConstantExpression expression, Type? expressionType) { return NullConstant; } - public override Expression VisitLiteralConstant(LiteralConstantExpression expression, Type expressionType) + public override Expression VisitLiteralConstant(LiteralConstantExpression expression, Type? expressionType) { - object convertedValue = expressionType != null ? ConvertTextToTargetType(expression.Value, expressionType) : expression.Value; + object? convertedValue = expressionType != null ? ConvertTextToTargetType(expression.Value, expressionType) : expression.Value; return CreateTupleAccessExpressionForConstant(convertedValue, expressionType ?? typeof(string)); } - private static object ConvertTextToTargetType(string text, Type targetType) + private static object? ConvertTextToTargetType(string text, Type targetType) { try { diff --git a/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs b/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs index 13bdcc78e3..844d4f3be0 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/SparseFieldSetCache.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -77,11 +75,11 @@ public IImmutableSet GetSparseFieldSetForQuery(ResourceT if (!_visitedTable.ContainsKey(resourceType)) { - SparseFieldSetExpression inputExpression = _lazySourceTable.Value.ContainsKey(resourceType) + SparseFieldSetExpression? inputExpression = _lazySourceTable.Value.ContainsKey(resourceType) ? new SparseFieldSetExpression(_lazySourceTable.Value[resourceType]) : null; - SparseFieldSetExpression outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); + SparseFieldSetExpression? outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); IImmutableSet outputFields = outputExpression == null ? ImmutableHashSet.Empty @@ -102,7 +100,7 @@ public IImmutableSet GetIdAttributeSetForRelationshipQuery(Resour var inputExpression = new SparseFieldSetExpression(ImmutableHashSet.Create(idAttribute)); // Intentionally not cached, as we are fetching ID only (ignoring any sparse fieldset that came from query string). - SparseFieldSetExpression outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); + SparseFieldSetExpression? outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); ImmutableHashSet outputAttributes = outputExpression == null ? ImmutableHashSet.Empty @@ -124,7 +122,7 @@ public IImmutableSet GetSparseFieldSetForSerializer(Reso : GetResourceFields(resourceType); var inputExpression = new SparseFieldSetExpression(inputFields); - SparseFieldSetExpression outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); + SparseFieldSetExpression? outputExpression = _resourceDefinitionAccessor.OnApplySparseFieldSet(resourceType, inputExpression); IImmutableSet outputFields = outputExpression == null ? GetResourceFields(resourceType) : inputFields.Intersect(outputExpression.Fields); diff --git a/src/JsonApiDotNetCore/Queries/PaginationContext.cs b/src/JsonApiDotNetCore/Queries/PaginationContext.cs index 54656f3d86..466659fe22 100644 --- a/src/JsonApiDotNetCore/Queries/PaginationContext.cs +++ b/src/JsonApiDotNetCore/Queries/PaginationContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; @@ -9,10 +7,10 @@ namespace JsonApiDotNetCore.Queries internal sealed class PaginationContext : IPaginationContext { /// - public PageNumber PageNumber { get; set; } + public PageNumber PageNumber { get; set; } = PageNumber.ValueOne; /// - public PageSize PageSize { get; set; } + public PageSize? PageSize { get; set; } /// public bool IsPageFull { get; set; } diff --git a/src/JsonApiDotNetCore/Queries/QueryLayer.cs b/src/JsonApiDotNetCore/Queries/QueryLayer.cs index c12b7b901f..9d32ca89d9 100644 --- a/src/JsonApiDotNetCore/Queries/QueryLayer.cs +++ b/src/JsonApiDotNetCore/Queries/QueryLayer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Text; @@ -18,11 +16,11 @@ public sealed class QueryLayer { public ResourceType ResourceType { get; } - public IncludeExpression Include { get; set; } - public FilterExpression Filter { get; set; } - public SortExpression Sort { get; set; } - public PaginationExpression Pagination { get; set; } - public IDictionary Projection { get; set; } + public IncludeExpression? Include { get; set; } + public FilterExpression? Filter { get; set; } + public SortExpression? Sort { get; set; } + public PaginationExpression? Pagination { get; set; } + public IDictionary? Projection { get; set; } public QueryLayer(ResourceType resourceType) { @@ -41,7 +39,7 @@ public override string ToString() return builder.ToString(); } - private static void WriteLayer(IndentingStringWriter writer, QueryLayer layer, string prefix = null) + private static void WriteLayer(IndentingStringWriter writer, QueryLayer layer, string? prefix = null) { writer.WriteLine($"{prefix}{nameof(QueryLayer)}<{layer.ResourceType.ClrType.Name}>"); @@ -73,7 +71,7 @@ private static void WriteLayer(IndentingStringWriter writer, QueryLayer layer, s using (writer.Indent()) { - foreach ((ResourceFieldAttribute field, QueryLayer nextLayer) in layer.Projection) + foreach ((ResourceFieldAttribute field, QueryLayer? nextLayer) in layer.Projection) { if (nextLayer == null) { @@ -99,7 +97,7 @@ public IndentingStringWriter(StringBuilder builder) _builder = builder; } - public void WriteLine(string line) + public void WriteLine(string? line) { if (_indentDepth > 0) { diff --git a/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs b/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs index c6e888146e..d5203ff537 100644 --- a/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs +++ b/src/JsonApiDotNetCore/Queries/TopFieldSelection.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Queries { /// diff --git a/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs index 2039dd7f5b..49caf84786 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IFilterQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs index 4747acc83e..e348f3635c 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IIncludeQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs index 32e8d82ab8..c41f417435 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IPaginationQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs index 772789d399..024ee564f2 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Controllers.Annotations; using Microsoft.Extensions.Primitives; diff --git a/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs b/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs index 4e763b8d17..04d3ffe26f 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IQueryStringReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Controllers.Annotations; namespace JsonApiDotNetCore.QueryStrings @@ -15,6 +13,6 @@ public interface IQueryStringReader /// /// The if set on the controller that is targeted by the current request. /// - void ReadAll(DisableQueryStringAttribute disableQueryStringAttribute); + void ReadAll(DisableQueryStringAttribute? disableQueryStringAttribute); } } diff --git a/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs b/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs index bfefc9ab0d..52a5a5eace 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IRequestQueryStringAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Http; namespace JsonApiDotNetCore.QueryStrings diff --git a/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs index 1d655baead..baea3e2938 100644 --- a/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/IResourceDefinitionQueryableParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs index 2232dd1a71..1fe5f4cb51 100644 --- a/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/ISortQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs index 28a25d39b1..7a307f1f40 100644 --- a/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/ISparseFieldSetQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Queries; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs index 65a9a9248a..245aa7a787 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/FilterQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -29,7 +27,7 @@ public class FilterQueryStringParameterReader : QueryStringParameterReader, IFil private readonly ImmutableArray.Builder _filtersInGlobalScope = ImmutableArray.CreateBuilder(); private readonly Dictionary.Builder> _filtersPerScope = new(); - private string _lastParameterName; + private string? _lastParameterName; public FilterQueryStringParameterReader(IJsonApiRequest request, IResourceGraph resourceGraph, IResourceFactory resourceFactory, IJsonApiOptions options) @@ -46,7 +44,7 @@ protected void ValidateSingleField(ResourceFieldAttribute field, ResourceType re { if (field is AttrAttribute attribute && !attribute.Capabilities.HasFlag(AttrCapabilities.AllowFilter)) { - throw new InvalidQueryStringParameterException(_lastParameterName, "Filtering on the requested attribute is not allowed.", + throw new InvalidQueryStringParameterException(_lastParameterName!, "Filtering on the requested attribute is not allowed.", $"Filtering on attribute '{attribute.PublicName}' is not allowed."); } } @@ -106,18 +104,18 @@ private void ReadSingleValue(string parameterName, string parameterValue) (name, value) = LegacyConverter.Convert(name, value); } - ResourceFieldChainExpression scope = GetScope(name); + ResourceFieldChainExpression? scope = GetScope(name); FilterExpression filter = GetFilter(value, scope); StoreFilterInScope(filter, scope); } catch (QueryParseException exception) { - throw new InvalidQueryStringParameterException(_lastParameterName, "The specified filter is invalid.", exception.Message, exception); + throw new InvalidQueryStringParameterException(_lastParameterName!, "The specified filter is invalid.", exception.Message, exception); } } - private ResourceFieldChainExpression GetScope(string parameterName) + private ResourceFieldChainExpression? GetScope(string parameterName) { QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType); @@ -129,13 +127,13 @@ private ResourceFieldChainExpression GetScope(string parameterName) return parameterScope.Scope; } - private FilterExpression GetFilter(string parameterValue, ResourceFieldChainExpression scope) + private FilterExpression GetFilter(string parameterValue, ResourceFieldChainExpression? scope) { ResourceType resourceTypeInScope = GetResourceTypeForScope(scope); return _filterParser.Parse(parameterValue, resourceTypeInScope); } - private void StoreFilterInScope(FilterExpression filter, ResourceFieldChainExpression scope) + private void StoreFilterInScope(FilterExpression filter, ResourceFieldChainExpression? scope) { if (scope == null) { diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs index 0080eb36f9..77a5bce864 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/IncludeQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; @@ -20,8 +18,8 @@ public class IncludeQueryStringParameterReader : QueryStringParameterReader, IIn private readonly IJsonApiOptions _options; private readonly IncludeParser _includeParser; - private IncludeExpression _includeExpression; - private string _lastParameterName; + private IncludeExpression? _includeExpression; + private string? _lastParameterName; public IncludeQueryStringParameterReader(IJsonApiRequest request, IResourceGraph resourceGraph, IJsonApiOptions options) : base(request, resourceGraph) @@ -36,7 +34,7 @@ protected void ValidateSingleRelationship(RelationshipAttribute relationship, Re { if (!relationship.CanInclude) { - throw new InvalidQueryStringParameterException(_lastParameterName, "Including the requested relationship is not allowed.", + throw new InvalidQueryStringParameterException(_lastParameterName!, "Including the requested relationship is not allowed.", path == relationship.PublicName ? $"Including the relationship '{relationship.PublicName}' on '{resourceType.PublicName}' is not allowed." : $"Including the relationship '{relationship.PublicName}' in '{path}' on '{resourceType.PublicName}' is not allowed."); diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs index 59c2662758..0b47e4427b 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/LegacyFilterNotationConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JetBrains.Annotations; @@ -54,7 +52,7 @@ public IEnumerable ExtractConditions(string parameterValue) if (parameterValue.StartsWith(ExpressionPrefix, StringComparison.Ordinal)) { - string expression = parameterValue.Substring(ExpressionPrefix.Length); + string expression = parameterValue[ExpressionPrefix.Length..]; return (parameterName, expression); } @@ -64,7 +62,7 @@ public IEnumerable ExtractConditions(string parameterValue) { if (parameterValue.StartsWith(prefix, StringComparison.Ordinal)) { - string value = parameterValue.Substring(prefix.Length); + string value = parameterValue[prefix.Length..]; string escapedValue = EscapeQuotes(value); string expression = $"{keyword}({attributeName},'{escapedValue}')"; @@ -74,7 +72,7 @@ public IEnumerable ExtractConditions(string parameterValue) if (parameterValue.StartsWith(NotEqualsPrefix, StringComparison.Ordinal)) { - string value = parameterValue.Substring(NotEqualsPrefix.Length); + string value = parameterValue[NotEqualsPrefix.Length..]; string escapedValue = EscapeQuotes(value); string expression = $"{Keywords.Not}({Keywords.Equals}({attributeName},'{escapedValue}'))"; @@ -83,7 +81,7 @@ public IEnumerable ExtractConditions(string parameterValue) if (parameterValue.StartsWith(InPrefix, StringComparison.Ordinal)) { - string[] valueParts = parameterValue.Substring(InPrefix.Length).Split(","); + string[] valueParts = parameterValue[InPrefix.Length..].Split(","); string valueList = $"'{string.Join("','", valueParts)}'"; string expression = $"{Keywords.Any}({attributeName},{valueList})"; @@ -92,7 +90,7 @@ public IEnumerable ExtractConditions(string parameterValue) if (parameterValue.StartsWith(NotInPrefix, StringComparison.Ordinal)) { - string[] valueParts = parameterValue.Substring(NotInPrefix.Length).Split(","); + string[] valueParts = parameterValue[NotInPrefix.Length..].Split(","); string valueList = $"'{string.Join("','", valueParts)}'"; string expression = $"{Keywords.Not}({Keywords.Any}({attributeName},{valueList}))"; diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs index ffe1ebbb73..2dc722c621 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/PaginationQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -24,8 +22,8 @@ public class PaginationQueryStringParameterReader : QueryStringParameterReader, private readonly IJsonApiOptions _options; private readonly PaginationParser _paginationParser; - private PaginationQueryStringValueExpression _pageSizeConstraint; - private PaginationQueryStringValueExpression _pageNumberConstraint; + private PaginationQueryStringValueExpression? _pageSizeConstraint; + private PaginationQueryStringValueExpression? _pageNumberConstraint; public PaginationQueryStringParameterReader(IJsonApiRequest request, IResourceGraph resourceGraph, IJsonApiOptions options) : base(request, resourceGraph) @@ -149,7 +147,7 @@ private sealed class PaginationState private readonly MutablePaginationEntry _globalScope = new(); private readonly Dictionary _nestedScopes = new(); - public MutablePaginationEntry ResolveEntryInScope(ResourceFieldChainExpression scope) + public MutablePaginationEntry ResolveEntryInScope(ResourceFieldChainExpression? scope) { if (scope == null) { @@ -191,21 +189,21 @@ public IReadOnlyCollection GetExpressionsInScope() private IEnumerable EnumerateExpressionsInScope() { - yield return new ExpressionInScope(null, new PaginationExpression(_globalScope.PageNumber, _globalScope.PageSize)); + yield return new ExpressionInScope(null, new PaginationExpression(_globalScope.PageNumber!, _globalScope.PageSize)); foreach ((ResourceFieldChainExpression scope, MutablePaginationEntry entry) in _nestedScopes) { - yield return new ExpressionInScope(scope, new PaginationExpression(entry.PageNumber, entry.PageSize)); + yield return new ExpressionInScope(scope, new PaginationExpression(entry.PageNumber!, entry.PageSize)); } } } private sealed class MutablePaginationEntry { - public PageSize PageSize { get; set; } + public PageSize? PageSize { get; set; } public bool HasSetPageSize { get; set; } - public PageNumber PageNumber { get; set; } + public PageNumber? PageNumber { get; set; } } } } diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs index 8845554f1b..4513f8e23a 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Queries.Expressions; @@ -23,11 +21,12 @@ protected QueryStringParameterReader(IJsonApiRequest request, IResourceGraph res _resourceGraph = resourceGraph; _isCollectionRequest = request.IsCollection; - RequestResourceType = request.SecondaryResourceType ?? request.PrimaryResourceType; + // There are currently no query string readers that work with operations, so non-nullable for convenience. + RequestResourceType = (request.SecondaryResourceType ?? request.PrimaryResourceType)!; IsAtomicOperationsRequest = request.Kind == EndpointKind.AtomicOperations; } - protected ResourceType GetResourceTypeForScope(ResourceFieldChainExpression scope) + protected ResourceType GetResourceTypeForScope(ResourceFieldChainExpression? scope) { if (scope == null) { diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs index cc57263aa8..52bfa648fe 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/QueryStringReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -37,7 +35,7 @@ public QueryStringReader(IJsonApiOptions options, IRequestQueryStringAccessor qu } /// - public virtual void ReadAll(DisableQueryStringAttribute disableQueryStringAttribute) + public virtual void ReadAll(DisableQueryStringAttribute? disableQueryStringAttribute) { using IDisposable _ = CodeTimingSessionManager.Current.Measure("Parse query string"); @@ -45,7 +43,7 @@ public virtual void ReadAll(DisableQueryStringAttribute disableQueryStringAttrib foreach ((string parameterName, StringValues parameterValue) in _queryStringAccessor.Query) { - IQueryStringParameterReader reader = _parameterReaders.FirstOrDefault(nextReader => nextReader.CanRead(parameterName)); + IQueryStringParameterReader? reader = _parameterReaders.FirstOrDefault(nextReader => nextReader.CanRead(parameterName)); if (reader != null) { diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs index 68454bf991..1ca5fa55f5 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/RequestQueryStringAccessor.cs @@ -1,5 +1,4 @@ -#nullable disable - +using System; using Microsoft.AspNetCore.Http; namespace JsonApiDotNetCore.QueryStrings.Internal @@ -9,7 +8,18 @@ internal sealed class RequestQueryStringAccessor : IRequestQueryStringAccessor { private readonly IHttpContextAccessor _httpContextAccessor; - public IQueryCollection Query => _httpContextAccessor.HttpContext!.Request.Query; + public IQueryCollection Query + { + get + { + if (_httpContextAccessor.HttpContext == null) + { + throw new InvalidOperationException("An active HTTP request is required."); + } + + return _httpContextAccessor.HttpContext.Request.Query; + } + } public RequestQueryStringAccessor(IHttpContextAccessor httpContextAccessor) { diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs index bd644b0af3..125700b0a3 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/ResourceDefinitionQueryableParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JetBrains.Annotations; @@ -44,22 +42,22 @@ public virtual bool CanRead(string parameterName) return false; } - object queryableHandler = GetQueryableHandler(parameterName); + object? queryableHandler = GetQueryableHandler(parameterName); return queryableHandler != null; } /// public virtual void Read(string parameterName, StringValues parameterValue) { - object queryableHandler = GetQueryableHandler(parameterName); + object queryableHandler = GetQueryableHandler(parameterName)!; var expressionInScope = new ExpressionInScope(null, new QueryableHandlerExpression(queryableHandler, parameterValue)); _constraints.Add(expressionInScope); } - private object GetQueryableHandler(string parameterName) + private object? GetQueryableHandler(string parameterName) { - Type resourceClrType = (_request.SecondaryResourceType ?? _request.PrimaryResourceType).ClrType; - object handler = _resourceDefinitionAccessor.GetQueryableHandlerForQueryStringParameter(resourceClrType, parameterName); + Type resourceClrType = (_request.SecondaryResourceType ?? _request.PrimaryResourceType)!.ClrType; + object? handler = _resourceDefinitionAccessor.GetQueryableHandlerForQueryStringParameter(resourceClrType, parameterName); if (handler != null && _request.Kind != EndpointKind.Primary) { diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs index b11ada6694..80f3510766 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/SortQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JetBrains.Annotations; @@ -21,7 +19,7 @@ public class SortQueryStringParameterReader : QueryStringParameterReader, ISortQ private readonly QueryStringParameterScopeParser _scopeParser; private readonly SortParser _sortParser; private readonly List _constraints = new(); - private string _lastParameterName; + private string? _lastParameterName; public SortQueryStringParameterReader(IJsonApiRequest request, IResourceGraph resourceGraph) : base(request, resourceGraph) @@ -34,7 +32,7 @@ protected void ValidateSingleField(ResourceFieldAttribute field, ResourceType re { if (field is AttrAttribute attribute && !attribute.Capabilities.HasFlag(AttrCapabilities.AllowSort)) { - throw new InvalidQueryStringParameterException(_lastParameterName, "Sorting on the requested attribute is not allowed.", + throw new InvalidQueryStringParameterException(_lastParameterName!, "Sorting on the requested attribute is not allowed.", $"Sorting on attribute '{attribute.PublicName}' is not allowed."); } } @@ -63,7 +61,7 @@ public virtual void Read(string parameterName, StringValues parameterValue) try { - ResourceFieldChainExpression scope = GetScope(parameterName); + ResourceFieldChainExpression? scope = GetScope(parameterName); SortExpression sort = GetSort(parameterValue, scope); var expressionInScope = new ExpressionInScope(scope, sort); @@ -75,7 +73,7 @@ public virtual void Read(string parameterName, StringValues parameterValue) } } - private ResourceFieldChainExpression GetScope(string parameterName) + private ResourceFieldChainExpression? GetScope(string parameterName) { QueryStringParameterScopeExpression parameterScope = _scopeParser.Parse(parameterName, RequestResourceType); @@ -87,7 +85,7 @@ private ResourceFieldChainExpression GetScope(string parameterName) return parameterScope.Scope; } - private SortExpression GetSort(string parameterValue, ResourceFieldChainExpression scope) + private SortExpression GetSort(string parameterValue, ResourceFieldChainExpression? scope) { ResourceType resourceTypeInScope = GetResourceTypeForScope(scope); return _sortParser.Parse(parameterValue, resourceTypeInScope); diff --git a/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs b/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs index 762c4c0656..111f82b7c2 100644 --- a/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs +++ b/src/JsonApiDotNetCore/QueryStrings/Internal/SparseFieldSetQueryStringParameterReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -27,7 +25,7 @@ public class SparseFieldSetQueryStringParameterReader : QueryStringParameterRead private readonly ImmutableDictionary.Builder _sparseFieldTableBuilder = ImmutableDictionary.CreateBuilder(); - private string _lastParameterName; + private string? _lastParameterName; /// bool IQueryStringParameterReader.AllowEmptyValue => true; @@ -43,7 +41,7 @@ protected void ValidateSingleField(ResourceFieldAttribute field, ResourceType re { if (field is AttrAttribute attribute && !attribute.Capabilities.HasFlag(AttrCapabilities.AllowView)) { - throw new InvalidQueryStringParameterException(_lastParameterName, "Retrieving the requested attribute is not allowed.", + throw new InvalidQueryStringParameterException(_lastParameterName!, "Retrieving the requested attribute is not allowed.", $"Retrieving the attribute '{attribute.PublicName}' is not allowed."); } } @@ -89,7 +87,7 @@ private ResourceType GetSparseFieldType(string parameterName) private SparseFieldSetExpression GetSparseFieldSet(string parameterValue, ResourceType resourceType) { - SparseFieldSetExpression sparseFieldSet = _sparseFieldSetParser.Parse(parameterValue, resourceType); + SparseFieldSetExpression? sparseFieldSet = _sparseFieldSetParser.Parse(parameterValue, resourceType); if (sparseFieldSet == null) { diff --git a/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs b/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs index 74438c2005..9c220686ac 100644 --- a/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs +++ b/src/JsonApiDotNetCore/QueryStrings/JsonApiQueryStringParameters.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs b/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs index 25c845ecc5..4ba6b8fc3b 100644 --- a/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs +++ b/src/JsonApiDotNetCore/Repositories/DataStoreUpdateException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -11,8 +9,8 @@ namespace JsonApiDotNetCore.Repositories [PublicAPI] public sealed class DataStoreUpdateException : Exception { - public DataStoreUpdateException(Exception exception) - : base("Failed to persist changes in the underlying data store.", exception) + public DataStoreUpdateException(Exception? innerException) + : base("Failed to persist changes in the underlying data store.", innerException) { } } diff --git a/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs b/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs index 5ac890dae8..6fec658c4e 100644 --- a/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs +++ b/src/JsonApiDotNetCore/Repositories/DbContextExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; using JetBrains.Annotations; @@ -20,7 +18,7 @@ public static IIdentifiable GetTrackedOrAttach(this DbContext dbContext, IIdenti ArgumentGuard.NotNull(dbContext, nameof(dbContext)); ArgumentGuard.NotNull(resource, nameof(resource)); - var trackedIdentifiable = (IIdentifiable)dbContext.GetTrackedIdentifiable(resource); + var trackedIdentifiable = (IIdentifiable?)dbContext.GetTrackedIdentifiable(resource); if (trackedIdentifiable == null) { @@ -34,20 +32,20 @@ public static IIdentifiable GetTrackedOrAttach(this DbContext dbContext, IIdenti /// /// Searches the change tracker for an entity that matches the type and ID of . /// - public static object GetTrackedIdentifiable(this DbContext dbContext, IIdentifiable identifiable) + public static object? GetTrackedIdentifiable(this DbContext dbContext, IIdentifiable identifiable) { ArgumentGuard.NotNull(dbContext, nameof(dbContext)); ArgumentGuard.NotNull(identifiable, nameof(identifiable)); Type resourceClrType = identifiable.GetType(); - string stringId = identifiable.StringId; + string? stringId = identifiable.StringId; - EntityEntry entityEntry = dbContext.ChangeTracker.Entries().FirstOrDefault(entry => IsResource(entry, resourceClrType, stringId)); + EntityEntry? entityEntry = dbContext.ChangeTracker.Entries().FirstOrDefault(entry => IsResource(entry, resourceClrType, stringId)); return entityEntry?.Entity; } - private static bool IsResource(EntityEntry entry, Type resourceClrType, string stringId) + private static bool IsResource(EntityEntry entry, Type resourceClrType, string? stringId) { return entry.Entity.GetType() == resourceClrType && ((IIdentifiable)entry.Entity).StringId == stringId; } diff --git a/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs b/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs index d7f2ace320..61dfcb388d 100644 --- a/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs +++ b/src/JsonApiDotNetCore/Repositories/DbContextResolver.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs index 624ee223b8..3c03aaf29e 100644 --- a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs @@ -1,8 +1,7 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Linq.Expressions; using System.Threading; @@ -41,7 +40,7 @@ public class EntityFrameworkCoreRepository : IResourceRepository private readonly TraceLogWriter> _traceWriter; /// - public virtual string TransactionId => _dbContext.Database.CurrentTransaction?.TransactionId.ToString(); + public virtual string? TransactionId => _dbContext.Database.CurrentTransaction?.TransactionId.ToString(); public EntityFrameworkCoreRepository(ITargetedFields targetedFields, IDbContextResolver dbContextResolver, IResourceGraph resourceGraph, IResourceFactory resourceFactory, IEnumerable constraintProviders, ILoggerFactory loggerFactory, @@ -65,18 +64,18 @@ public EntityFrameworkCoreRepository(ITargetedFields targetedFields, IDbContextR } /// - public virtual async Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public virtual async Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { - layer + queryLayer }); - ArgumentGuard.NotNull(layer, nameof(layer)); + ArgumentGuard.NotNull(queryLayer, nameof(queryLayer)); using (CodeTimingSessionManager.Current.Measure("Repository - Get resource(s)")) { - IQueryable query = ApplyQueryLayer(layer); + IQueryable query = ApplyQueryLayer(queryLayer); using (CodeTimingSessionManager.Current.Measure("Execute SQL (data)", MeasurementSettings.ExcludeDatabaseInPercentages)) { @@ -86,7 +85,7 @@ public virtual async Task> GetAsync(QueryLayer la } /// - public virtual async Task CountAsync(FilterExpression topFilter, CancellationToken cancellationToken) + public virtual async Task CountAsync(FilterExpression? topFilter, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -111,14 +110,14 @@ public virtual async Task CountAsync(FilterExpression topFilter, Cancellati } } - protected virtual IQueryable ApplyQueryLayer(QueryLayer layer) + protected virtual IQueryable ApplyQueryLayer(QueryLayer queryLayer) { _traceWriter.LogMethodStart(new { - layer + queryLayer }); - ArgumentGuard.NotNull(layer, nameof(layer)); + ArgumentGuard.NotNull(queryLayer, nameof(queryLayer)); using (CodeTimingSessionManager.Current.Measure("Convert QueryLayer to System.Expression")) { @@ -146,7 +145,7 @@ protected virtual IQueryable ApplyQueryLayer(QueryLayer layer) var builder = new QueryableBuilder(source.Expression, source.ElementType, typeof(Queryable), nameFactory, _resourceFactory, _dbContext.Model); - Expression expression = builder.ApplyQuery(layer); + Expression expression = builder.ApplyQuery(queryLayer); using (CodeTimingSessionManager.Current.Measure("Convert System.Expression to IQueryable")) { @@ -163,6 +162,11 @@ protected virtual IQueryable GetAll() /// public virtual Task GetForCreateAsync(TId id, CancellationToken cancellationToken) { + _traceWriter.LogMethodStart(new + { + id + }); + var resource = _resourceFactory.CreateInstance(); resource.Id = id; @@ -185,9 +189,9 @@ public virtual async Task CreateAsync(TResource resourceFromRequest, TResource r foreach (RelationshipAttribute relationship in _targetedFields.Relationships) { - object rightValue = relationship.GetValue(resourceFromRequest); + object? rightValue = relationship.GetValue(resourceFromRequest); - object rightValueEvaluated = await VisitSetRelationshipAsync(resourceForDatabase, relationship, rightValue, WriteOperationKind.CreateResource, + object? rightValueEvaluated = await VisitSetRelationshipAsync(resourceForDatabase, relationship, rightValue, WriteOperationKind.CreateResource, cancellationToken); await UpdateRelationshipAsync(relationship, resourceForDatabase, rightValueEvaluated, cancellationToken); @@ -210,12 +214,12 @@ public virtual async Task CreateAsync(TResource resourceFromRequest, TResource r _dbContext.ResetChangeTracker(); } - private async Task VisitSetRelationshipAsync(TResource leftResource, RelationshipAttribute relationship, object rightValue, + private async Task VisitSetRelationshipAsync(TResource leftResource, RelationshipAttribute relationship, object? rightValue, WriteOperationKind writeOperation, CancellationToken cancellationToken) { if (relationship is HasOneAttribute hasOneRelationship) { - return await _resourceDefinitionAccessor.OnSetToOneRelationshipAsync(leftResource, hasOneRelationship, (IIdentifiable)rightValue, + return await _resourceDefinitionAccessor.OnSetToOneRelationshipAsync(leftResource, hasOneRelationship, (IIdentifiable?)rightValue, writeOperation, cancellationToken); } @@ -233,8 +237,15 @@ await _resourceDefinitionAccessor.OnSetToManyRelationshipAsync(leftResource, has } /// - public virtual async Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) + public virtual async Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { + _traceWriter.LogMethodStart(new + { + queryLayer + }); + + ArgumentGuard.NotNull(queryLayer, nameof(queryLayer)); + using IDisposable _ = CodeTimingSessionManager.Current.Measure("Repository - Get resource for update"); IReadOnlyCollection resources = await GetAsync(queryLayer, cancellationToken); @@ -257,9 +268,9 @@ public virtual async Task UpdateAsync(TResource resourceFromRequest, TResource r foreach (RelationshipAttribute relationship in _targetedFields.Relationships) { - object rightValue = relationship.GetValue(resourceFromRequest); + object? rightValue = relationship.GetValue(resourceFromRequest); - object rightValueEvaluated = await VisitSetRelationshipAsync(resourceFromDatabase, relationship, rightValue, WriteOperationKind.UpdateResource, + object? rightValueEvaluated = await VisitSetRelationshipAsync(resourceFromDatabase, relationship, rightValue, WriteOperationKind.UpdateResource, cancellationToken); AssertIsNotClearingRequiredRelationship(relationship, resourceFromDatabase, rightValueEvaluated); @@ -281,7 +292,7 @@ public virtual async Task UpdateAsync(TResource resourceFromRequest, TResource r _dbContext.ResetChangeTracker(); } - protected void AssertIsNotClearingRequiredRelationship(RelationshipAttribute relationship, TResource leftResource, object rightValue) + protected void AssertIsNotClearingRequiredRelationship(RelationshipAttribute relationship, TResource leftResource, object? rightValue) { if (relationship is HasManyAttribute { IsManyToMany: true }) { @@ -289,7 +300,7 @@ protected void AssertIsNotClearingRequiredRelationship(RelationshipAttribute rel return; } - INavigation navigation = TryGetNavigation(relationship); + INavigation? navigation = TryGetNavigation(relationship); bool relationshipIsRequired = navigation?.ForeignKey?.IsRequired ?? false; bool relationshipIsBeingCleared = relationship is HasManyAttribute hasManyRelationship @@ -299,15 +310,15 @@ protected void AssertIsNotClearingRequiredRelationship(RelationshipAttribute rel if (relationshipIsRequired && relationshipIsBeingCleared) { string resourceName = _resourceGraph.GetResourceType().PublicName; - throw new CannotClearRequiredRelationshipException(relationship.PublicName, leftResource.StringId, resourceName); + throw new CannotClearRequiredRelationshipException(relationship.PublicName, leftResource.StringId!, resourceName); } } - private bool IsToManyRelationshipBeingCleared(HasManyAttribute hasManyRelationship, TResource leftResource, object valueToAssign) + private bool IsToManyRelationshipBeingCleared(HasManyAttribute hasManyRelationship, TResource leftResource, object? valueToAssign) { ICollection newRightResourceIds = _collectionConverter.ExtractResources(valueToAssign); - object existingRightValue = hasManyRelationship.GetValue(leftResource); + object? existingRightValue = hasManyRelationship.GetValue(leftResource); HashSet existingRightResourceIds = _collectionConverter.ExtractResources(existingRightValue).ToHashSet(IdentifiableComparer.Instance); @@ -377,7 +388,7 @@ private NavigationEntry GetNavigationEntry(TResource resource, RelationshipAttri private bool RequiresLoadOfRelationshipForDeletion(RelationshipAttribute relationship) { - INavigation navigation = TryGetNavigation(relationship); + INavigation? navigation = TryGetNavigation(relationship); bool isClearOfForeignKeyRequired = navigation?.ForeignKey.DeleteBehavior == DeleteBehavior.ClientSetNull; bool hasForeignKeyAtLeftSide = HasForeignKeyAtLeftSide(relationship, navigation); @@ -385,19 +396,19 @@ private bool RequiresLoadOfRelationshipForDeletion(RelationshipAttribute relatio return isClearOfForeignKeyRequired && !hasForeignKeyAtLeftSide; } - private INavigation TryGetNavigation(RelationshipAttribute relationship) + private INavigation? TryGetNavigation(RelationshipAttribute relationship) { IEntityType entityType = _dbContext.Model.FindEntityType(typeof(TResource)); return entityType?.FindNavigation(relationship.Property.Name); } - private bool HasForeignKeyAtLeftSide(RelationshipAttribute relationship, INavigation navigation) + private bool HasForeignKeyAtLeftSide(RelationshipAttribute relationship, INavigation? navigation) { return relationship is HasOneAttribute && navigation is { IsOnDependent: true }; } /// - public virtual async Task SetRelationshipAsync(TResource leftResource, object rightValue, CancellationToken cancellationToken) + public virtual async Task SetRelationshipAsync(TResource leftResource, object? rightValue, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -405,11 +416,13 @@ public virtual async Task SetRelationshipAsync(TResource leftResource, object ri rightValue }); + ArgumentGuard.NotNull(leftResource, nameof(leftResource)); + using IDisposable _ = CodeTimingSessionManager.Current.Measure("Repository - Set relationship"); RelationshipAttribute relationship = _targetedFields.Relationships.Single(); - object rightValueEvaluated = + object? rightValueEvaluated = await VisitSetRelationshipAsync(leftResource, relationship, rightValue, WriteOperationKind.SetRelationship, cancellationToken); AssertIsNotClearingRequiredRelationship(relationship, leftResource, rightValueEvaluated); @@ -467,6 +480,7 @@ public virtual async Task RemoveFromToManyRelationshipAsync(TResource leftResour rightResourceIds }); + ArgumentGuard.NotNull(leftResource, nameof(leftResource)); ArgumentGuard.NotNull(rightResourceIds, nameof(rightResourceIds)); using IDisposable _ = CodeTimingSessionManager.Current.Measure("Repository - Remove from to-many relationship"); @@ -483,7 +497,7 @@ public virtual async Task RemoveFromToManyRelationshipAsync(TResource leftResour // Make EF Core believe any additional resources added from ResourceDefinition already exist in database. IIdentifiable[] extraResourceIdsToRemove = rightResourceIdsToRemove.Where(rightId => !rightResourceIds.Contains(rightId)).ToArray(); - object rightValueStored = relationship.GetValue(leftResource); + object? rightValueStored = relationship.GetValue(leftResource); // @formatter:wrap_chained_method_calls chop_always // @formatter:keep_existing_linebreaks true @@ -524,15 +538,15 @@ private void MarkRelationshipAsLoaded(TResource leftResource, RelationshipAttrib rightCollectionEntry.IsLoaded = true; } - protected async Task UpdateRelationshipAsync(RelationshipAttribute relationship, TResource leftResource, object valueToAssign, + protected async Task UpdateRelationshipAsync(RelationshipAttribute relationship, TResource leftResource, object? valueToAssign, CancellationToken cancellationToken) { - object trackedValueToAssign = EnsureRelationshipValueToAssignIsTracked(valueToAssign, relationship.Property.PropertyType); + object? trackedValueToAssign = EnsureRelationshipValueToAssignIsTracked(valueToAssign, relationship.Property.PropertyType); if (RequireLoadOfInverseRelationship(relationship, trackedValueToAssign)) { EntityEntry entityEntry = _dbContext.Entry(trackedValueToAssign); - string inversePropertyName = relationship.InverseNavigationProperty.Name; + string inversePropertyName = relationship.InverseNavigationProperty!.Name; await entityEntry.Reference(inversePropertyName).LoadAsync(cancellationToken); } @@ -540,7 +554,7 @@ protected async Task UpdateRelationshipAsync(RelationshipAttribute relationship, relationship.SetValue(leftResource, trackedValueToAssign); } - private object EnsureRelationshipValueToAssignIsTracked(object rightValue, Type relationshipPropertyType) + private object? EnsureRelationshipValueToAssignIsTracked(object? rightValue, Type relationshipPropertyType) { if (rightValue == null) { @@ -555,7 +569,7 @@ private object EnsureRelationshipValueToAssignIsTracked(object rightValue, Type : rightResourcesTracked.Single(); } - private bool RequireLoadOfInverseRelationship(RelationshipAttribute relationship, object trackedValueToAssign) + private bool RequireLoadOfInverseRelationship(RelationshipAttribute relationship, [NotNullWhen(true)] object? trackedValueToAssign) { // See https://github.com/json-api-dotnet/JsonApiDotNetCore/issues/502. return trackedValueToAssign != null && relationship is HasOneAttribute { IsOneToOne: true }; diff --git a/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs b/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs index 2bb2604ec9..0a38f2dfcc 100644 --- a/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs +++ b/src/JsonApiDotNetCore/Repositories/IDbContextResolver.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.EntityFrameworkCore; namespace JsonApiDotNetCore.Repositories diff --git a/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs b/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs index 6bdcd62633..0344e3cbf9 100644 --- a/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs +++ b/src/JsonApiDotNetCore/Repositories/IRepositorySupportsTransaction.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Repositories @@ -13,6 +11,6 @@ public interface IRepositorySupportsTransaction /// /// Identifies the currently active transaction. /// - string TransactionId { get; } + string? TransactionId { get; } } } diff --git a/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs index d38553730c..3f6d4a872c 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceReadRepository.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -26,11 +24,11 @@ public interface IResourceReadRepository /// /// Executes a read query using the specified constraints and returns the collection of matching resources. /// - Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken); + Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken); /// /// Executes a read query using the specified top-level filter and returns the top-level count of matching resources. /// - Task CountAsync(FilterExpression topFilter, CancellationToken cancellationToken); + Task CountAsync(FilterExpression? topFilter, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs index 578acd834d..4f20bcaca1 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceRepository.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs b/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs index 6bddd4d48b..68360f02cb 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceRepositoryAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -18,18 +16,18 @@ public interface IResourceRepositoryAccessor /// /// Invokes . /// - Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) where TResource : class, IIdentifiable; /// /// Invokes for the specified resource type. /// - Task> GetAsync(ResourceType resourceType, QueryLayer layer, CancellationToken cancellationToken); + Task> GetAsync(ResourceType resourceType, QueryLayer queryLayer, CancellationToken cancellationToken); /// /// Invokes for the specified resource type. /// - Task CountAsync(FilterExpression topFilter, CancellationToken cancellationToken) + Task CountAsync(FilterExpression? topFilter, CancellationToken cancellationToken) where TResource : class, IIdentifiable; /// @@ -47,7 +45,7 @@ Task CreateAsync(TResource resourceFromRequest, TResource resourceFor /// /// Invokes . /// - Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) + Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) where TResource : class, IIdentifiable; /// @@ -65,7 +63,7 @@ Task DeleteAsync(TId id, CancellationToken cancellationToken) /// /// Invokes . /// - Task SetRelationshipAsync(TResource leftResource, object rightValue, CancellationToken cancellationToken) + Task SetRelationshipAsync(TResource leftResource, object? rightValue, CancellationToken cancellationToken) where TResource : class, IIdentifiable; /// diff --git a/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs b/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs index 28f058d509..06a94748a0 100644 --- a/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/IResourceWriteRepository.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -38,7 +36,7 @@ public interface IResourceWriteRepository /// /// Retrieves a resource with all of its attributes, including the set of targeted relationships, in preparation for . /// - Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken); + Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken); /// /// Updates the attributes and relationships of an existing resource in the underlying data store. @@ -53,7 +51,7 @@ public interface IResourceWriteRepository /// /// Performs a complete replacement of the relationship in the underlying data store. /// - Task SetRelationshipAsync(TResource leftResource, object rightValue, CancellationToken cancellationToken); + Task SetRelationshipAsync(TResource leftResource, object? rightValue, CancellationToken cancellationToken); /// /// Adds resources to a to-many relationship in the underlying data store. diff --git a/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs b/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs index e351809168..b6ec29fb95 100644 --- a/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs +++ b/src/JsonApiDotNetCore/Repositories/ResourceRepositoryAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Threading; @@ -35,24 +33,24 @@ public ResourceRepositoryAccessor(IServiceProvider serviceProvider, IResourceGra } /// - public async Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public async Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) where TResource : class, IIdentifiable { dynamic repository = ResolveReadRepository(typeof(TResource)); - return (IReadOnlyCollection)await repository.GetAsync(layer, cancellationToken); + return (IReadOnlyCollection)await repository.GetAsync(queryLayer, cancellationToken); } /// - public async Task> GetAsync(ResourceType resourceType, QueryLayer layer, CancellationToken cancellationToken) + public async Task> GetAsync(ResourceType resourceType, QueryLayer queryLayer, CancellationToken cancellationToken) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); dynamic repository = ResolveReadRepository(resourceType); - return (IReadOnlyCollection)await repository.GetAsync(layer, cancellationToken); + return (IReadOnlyCollection)await repository.GetAsync(queryLayer, cancellationToken); } /// - public async Task CountAsync(FilterExpression topFilter, CancellationToken cancellationToken) + public async Task CountAsync(FilterExpression? topFilter, CancellationToken cancellationToken) where TResource : class, IIdentifiable { dynamic repository = ResolveReadRepository(typeof(TResource)); @@ -76,7 +74,7 @@ public async Task CreateAsync(TResource resourceFromRequest, TResourc } /// - public async Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) + public async Task GetForUpdateAsync(QueryLayer queryLayer, CancellationToken cancellationToken) where TResource : class, IIdentifiable { dynamic repository = GetWriteRepository(typeof(TResource)); @@ -100,7 +98,7 @@ public async Task DeleteAsync(TId id, CancellationToken cancella } /// - public async Task SetRelationshipAsync(TResource leftResource, object rightValue, CancellationToken cancellationToken) + public async Task SetRelationshipAsync(TResource leftResource, object? rightValue, CancellationToken cancellationToken) where TResource : class, IIdentifiable { dynamic repository = GetWriteRepository(typeof(TResource)); diff --git a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs index 7ce775bc15..e0b4bc1253 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs @@ -1,6 +1,5 @@ -#nullable disable - using System; +using System.Reflection; using JetBrains.Annotations; namespace JsonApiDotNetCore.Resources.Annotations @@ -35,37 +34,7 @@ public AttrCapabilities Capabilities set => _capabilities = value; } - /// - /// Get the value of the attribute for the given object. Throws if the attribute does not belong to the provided object. - /// - public object GetValue(object resource) - { - ArgumentGuard.NotNull(resource, nameof(resource)); - - if (Property.GetMethod == null) - { - throw new InvalidOperationException($"Property '{Property.DeclaringType?.Name}.{Property.Name}' is write-only."); - } - - return Property.GetValue(resource); - } - - /// - /// Sets the value of the attribute on the given object. - /// - public void SetValue(object resource, object newValue) - { - ArgumentGuard.NotNull(resource, nameof(resource)); - - if (Property.SetMethod == null) - { - throw new InvalidOperationException($"Property '{Property.DeclaringType?.Name}.{Property.Name}' is read-only."); - } - - Property.SetValue(resource, newValue); - } - - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs b/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs index 3e27a58936..9eb93c9377 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/AttrCapabilities.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Resources.Annotations diff --git a/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs index bd6789dabc..bc81116763 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/EagerLoadAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Reflection; @@ -40,8 +38,10 @@ namespace JsonApiDotNetCore.Resources.Annotations [AttributeUsage(AttributeTargets.Property)] public sealed class EagerLoadAttribute : Attribute { - public PropertyInfo Property { get; internal set; } + // These properties are definitely assigned after building the resource graph, which is why they are declared as non-nullable. + + public PropertyInfo Property { get; internal set; } = null!; - public IReadOnlyCollection Children { get; internal set; } + public IReadOnlyCollection Children { get; internal set; } = null!; } } diff --git a/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs index 734ac65e4e..185994077e 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/HasManyAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; using JetBrains.Annotations; @@ -39,7 +37,7 @@ private bool EvaluateIsManyToMany() { if (InverseNavigationProperty != null) { - Type elementType = CollectionConverter.TryGetCollectionElementType(InverseNavigationProperty.PropertyType); + Type? elementType = CollectionConverter.TryGetCollectionElementType(InverseNavigationProperty.PropertyType); return elementType != null; } diff --git a/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs index 5d8f6fde85..281b42c5cf 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/HasOneAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Threading; using JetBrains.Annotations; @@ -38,7 +36,7 @@ private bool EvaluateIsOneToOne() { if (InverseNavigationProperty != null) { - Type elementType = CollectionConverter.TryGetCollectionElementType(InverseNavigationProperty.PropertyType); + Type? elementType = CollectionConverter.TryGetCollectionElementType(InverseNavigationProperty.PropertyType); return elementType == null; } diff --git a/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs b/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs index eacdbf7887..d655a8b882 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/LinkTypes.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; namespace JsonApiDotNetCore.Resources.Annotations diff --git a/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs index 8ae1d45bc6..be50caf40c 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/RelationshipAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Reflection; using JetBrains.Annotations; @@ -20,7 +18,7 @@ public abstract class RelationshipAttribute : ResourceFieldAttribute /// /// The CLR type in which this relationship is declared. /// - internal Type LeftClrType { get; set; } + internal Type? LeftClrType { get; set; } /// /// The CLR type this relationship points to. In the case of a relationship, this value will be the collection element @@ -31,7 +29,7 @@ public abstract class RelationshipAttribute : ResourceFieldAttribute /// public ISet Tags { get; set; } // RightClrType: typeof(Tag) /// ]]> /// - internal Type RightClrType { get; set; } + internal Type? RightClrType { get; set; } /// /// The of the EF Core inverse navigation, which may or may not exist. Even if it exists, it may not be exposed as a JSON:API @@ -52,18 +50,18 @@ public abstract class RelationshipAttribute : ResourceFieldAttribute /// } /// ]]> /// - public PropertyInfo InverseNavigationProperty { get; set; } + public PropertyInfo? InverseNavigationProperty { get; set; } /// /// The containing resource type in which this relationship is declared. /// - public ResourceType LeftType { get; internal set; } + public ResourceType LeftType { get; internal set; } = null!; /// /// The resource type this relationship points to. In the case of a relationship, this value will be the collection /// element type. /// - public ResourceType RightType { get; internal set; } + public ResourceType RightType { get; internal set; } = null!; /// /// Configures which links to show in the object for this relationship. Defaults to @@ -81,27 +79,7 @@ public abstract class RelationshipAttribute : ResourceFieldAttribute /// public bool CanInclude { get; set; } = true; - /// - /// Gets the value of the resource property this attribute was declared on. - /// - public object GetValue(object resource) - { - ArgumentGuard.NotNull(resource, nameof(resource)); - - return Property.GetValue(resource); - } - - /// - /// Sets the value of the resource property this attribute was declared on. - /// - public void SetValue(object resource, object newValue) - { - ArgumentGuard.NotNull(resource, nameof(resource)); - - Property.SetValue(resource, newValue); - } - - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs index 6935e49b2d..501d085d57 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs index 0e177608db..8463689301 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceFieldAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Reflection; using JetBrains.Annotations; @@ -15,14 +13,16 @@ namespace JsonApiDotNetCore.Resources.Annotations [PublicAPI] public abstract class ResourceFieldAttribute : Attribute { - private string _publicName; + // These are definitely assigned after building the resource graph, which is why their public equivalents are declared as non-nullable. + private string? _publicName; + private PropertyInfo? _property; /// /// The publicly exposed name of this JSON:API field. When not explicitly assigned, the configured naming convention is applied on the property name. /// public string PublicName { - get => _publicName; + get => _publicName!; set { if (string.IsNullOrWhiteSpace(value)) @@ -37,14 +37,72 @@ public string PublicName /// /// The resource property that this attribute is declared on. /// - public PropertyInfo Property { get; internal set; } + public PropertyInfo Property + { + get => _property!; + internal set + { + ArgumentGuard.NotNull(value, nameof(value)); + _property = value; + } + } + + /// + /// Gets the value of this field on the specified resource instance. Throws if the property is write-only or if the field does not belong to the + /// specified resource instance. + /// + public object? GetValue(object resource) + { + ArgumentGuard.NotNull(resource, nameof(resource)); + + if (Property.GetMethod == null) + { + throw new InvalidOperationException($"Property '{Property.DeclaringType?.Name}.{Property.Name}' is write-only."); + } + + try + { + return Property.GetValue(resource); + } + catch (TargetException exception) + { + throw new InvalidOperationException( + $"Unable to get property value of '{Property.DeclaringType!.Name}.{Property.Name}' on instance of type '{resource.GetType().Name}'.", + exception); + } + } + + /// + /// Sets the value of this field on the specified resource instance. Throws if the property is read-only or if the field does not belong to the specified + /// resource instance. + /// + public void SetValue(object resource, object? newValue) + { + ArgumentGuard.NotNull(resource, nameof(resource)); + + if (Property.SetMethod == null) + { + throw new InvalidOperationException($"Property '{Property.DeclaringType?.Name}.{Property.Name}' is read-only."); + } + + try + { + Property.SetValue(resource, newValue); + } + catch (TargetException exception) + { + throw new InvalidOperationException( + $"Unable to set property value of '{Property.DeclaringType!.Name}.{Property.Name}' on instance of type '{resource.GetType().Name}'.", + exception); + } + } - public override string ToString() + public override string? ToString() { - return PublicName ?? (Property != null ? Property.Name : base.ToString()); + return _publicName ?? (_property != null ? _property.Name : base.ToString()); } - public override bool Equals(object obj) + public override bool Equals(object? obj) { if (ReferenceEquals(this, obj)) { @@ -58,12 +116,12 @@ public override bool Equals(object obj) var other = (ResourceFieldAttribute)obj; - return PublicName == other.PublicName && Property == other.Property; + return _publicName == other._publicName && _property == other._property; } public override int GetHashCode() { - return HashCode.Combine(PublicName, Property); + return HashCode.Combine(_publicName, _property); } } } diff --git a/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs index d8eb3f764f..f4d3a1ffc7 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/ResourceLinksAttribute.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/JsonApiDotNetCore/Resources/IIdentifiable.cs b/src/JsonApiDotNetCore/Resources/IIdentifiable.cs index 3bcf809cac..ee1f73942a 100644 --- a/src/JsonApiDotNetCore/Resources/IIdentifiable.cs +++ b/src/JsonApiDotNetCore/Resources/IIdentifiable.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Resources { /// @@ -10,12 +8,12 @@ public interface IIdentifiable /// /// The value for element 'id' in a JSON:API request or response. /// - string StringId { get; set; } + string? StringId { get; set; } /// /// The value for element 'lid' in a JSON:API request. /// - string LocalId { get; set; } + string? LocalId { get; set; } } /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs b/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs index b6abf1cf57..df16dc603f 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceChangeTracker.cs @@ -1,5 +1,3 @@ -#nullable disable - namespace JsonApiDotNetCore.Resources { /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs b/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs index 99cd2bf996..9eed0aaa16 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceDefinition.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -45,7 +43,7 @@ public interface IResourceDefinition /// /// The new filter, or null to disable the existing filter. /// - FilterExpression OnApplyFilter(FilterExpression existingFilter); + FilterExpression? OnApplyFilter(FilterExpression? existingFilter); /// /// Enables to extend, replace or remove a sort order that is being applied on a set of this resource type. Tip: Use @@ -57,7 +55,7 @@ public interface IResourceDefinition /// /// The new sort order, or null to disable the existing sort order and sort by ID. /// - SortExpression OnApplySort(SortExpression existingSort); + SortExpression? OnApplySort(SortExpression? existingSort); /// /// Enables to extend, replace or remove pagination that is being applied on a set of this resource type. @@ -69,7 +67,7 @@ public interface IResourceDefinition /// The changed pagination, or null to use the first page with default size from options. To disable paging, set /// to null. /// - PaginationExpression OnApplyPagination(PaginationExpression existingPagination); + PaginationExpression? OnApplyPagination(PaginationExpression? existingPagination); /// /// Enables to extend, replace or remove a sparse fieldset that is being applied on a set of this resource type. Tip: Use @@ -88,7 +86,7 @@ public interface IResourceDefinition /// /// The new sparse fieldset, or null to discard the existing sparse fieldset and select all viewable fields. /// - SparseFieldSetExpression OnApplySparseFieldSet(SparseFieldSetExpression existingSparseFieldSet); + SparseFieldSetExpression? OnApplySparseFieldSet(SparseFieldSetExpression? existingSparseFieldSet); /// /// Enables to adapt the Entity Framework Core query, based on custom query string parameters. Note this only works on @@ -115,13 +113,13 @@ public interface IResourceDefinition /// ]]> /// #pragma warning disable AV1130 // Return type in method signature should be a collection interface instead of a concrete type - QueryStringParameterHandlers OnRegisterQueryableHandlersForQueryStringParameters(); + QueryStringParameterHandlers? OnRegisterQueryableHandlersForQueryStringParameters(); #pragma warning restore AV1130 // Return type in method signature should be a collection interface instead of a concrete type /// /// Enables to add JSON:API meta information, specific to this resource. /// - IDictionary GetMeta(TResource resource); + IDictionary? GetMeta(TResource resource); /// /// Executes after the original version of the resource has been retrieved from the underlying data store, as part of a write request. @@ -174,7 +172,7 @@ public interface IResourceDefinition /// /// The replacement resource identifier, or null to clear the relationship. Returns by default. /// - Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, IIdentifiable rightResourceId, + Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, IIdentifiable? rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken); /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs b/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs index ff8a5d74fc..ed4dad1270 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceDefinitionAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -26,33 +24,33 @@ public interface IResourceDefinitionAccessor /// /// Invokes for the specified resource type. /// - FilterExpression OnApplyFilter(ResourceType resourceType, FilterExpression existingFilter); + FilterExpression? OnApplyFilter(ResourceType resourceType, FilterExpression? existingFilter); /// /// Invokes for the specified resource type. /// - SortExpression OnApplySort(ResourceType resourceType, SortExpression existingSort); + SortExpression? OnApplySort(ResourceType resourceType, SortExpression? existingSort); /// /// Invokes for the specified resource type. /// - PaginationExpression OnApplyPagination(ResourceType resourceType, PaginationExpression existingPagination); + PaginationExpression? OnApplyPagination(ResourceType resourceType, PaginationExpression? existingPagination); /// /// Invokes for the specified resource type. /// - SparseFieldSetExpression OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression existingSparseFieldSet); + SparseFieldSetExpression? OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression? existingSparseFieldSet); /// /// Invokes for the specified resource type, then /// returns the expression for the specified parameter name. /// - object GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName); + object? GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName); /// /// Invokes for the specified resource. /// - IDictionary GetMeta(ResourceType resourceType, IIdentifiable resourceInstance); + IDictionary? GetMeta(ResourceType resourceType, IIdentifiable resourceInstance); /// /// Invokes for the specified resource. @@ -63,8 +61,8 @@ Task OnPrepareWriteAsync(TResource resource, WriteOperationKind write /// /// Invokes for the specified resource. /// - public Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, - IIdentifiable rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) + public Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, + IIdentifiable? rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) where TResource : class, IIdentifiable; /// diff --git a/src/JsonApiDotNetCore/Resources/IResourceFactory.cs b/src/JsonApiDotNetCore/Resources/IResourceFactory.cs index b51160cc92..1e37304528 100644 --- a/src/JsonApiDotNetCore/Resources/IResourceFactory.cs +++ b/src/JsonApiDotNetCore/Resources/IResourceFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq.Expressions; diff --git a/src/JsonApiDotNetCore/Resources/ITargetedFields.cs b/src/JsonApiDotNetCore/Resources/ITargetedFields.cs index 23f764c366..1498f96744 100644 --- a/src/JsonApiDotNetCore/Resources/ITargetedFields.cs +++ b/src/JsonApiDotNetCore/Resources/ITargetedFields.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Resources/Identifiable.cs b/src/JsonApiDotNetCore/Resources/Identifiable.cs index 4fa8eaf59b..6a379bfcad 100644 --- a/src/JsonApiDotNetCore/Resources/Identifiable.cs +++ b/src/JsonApiDotNetCore/Resources/Identifiable.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using JsonApiDotNetCore.Resources.Internal; @@ -16,11 +14,11 @@ namespace JsonApiDotNetCore.Resources public abstract class Identifiable : IIdentifiable { /// - public virtual TId Id { get; set; } + public virtual TId Id { get; set; } = default!; /// [NotMapped] - public string StringId + public string? StringId { get => GetStringId(Id); set => Id = GetTypedId(value); @@ -28,22 +26,22 @@ public string StringId /// [NotMapped] - public string LocalId { get; set; } + public string? LocalId { get; set; } /// /// Converts an outgoing typed resource identifier to string format for use in a JSON:API response. /// - protected virtual string GetStringId(TId value) + protected virtual string? GetStringId(TId value) { - return EqualityComparer.Default.Equals(value, default) ? null : value.ToString(); + return EqualityComparer.Default.Equals(value, default) ? null : value!.ToString(); } /// /// Converts an incoming 'id' element from a JSON:API request to the typed resource identifier. /// - protected virtual TId GetTypedId(string value) + protected virtual TId GetTypedId(string? value) { - return value == null ? default : (TId)RuntimeTypeConverter.ConvertType(value, typeof(TId)); + return value == null ? default! : (TId)RuntimeTypeConverter.ConvertType(value, typeof(TId))!; } } } diff --git a/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs b/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs index 97fd7f9f3e..67c0cc833c 100644 --- a/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs +++ b/src/JsonApiDotNetCore/Resources/IdentifiableComparer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using JetBrains.Annotations; @@ -19,24 +17,24 @@ private IdentifiableComparer() { } - public bool Equals(IIdentifiable x, IIdentifiable y) + public bool Equals(IIdentifiable? left, IIdentifiable? right) { - if (ReferenceEquals(x, y)) + if (ReferenceEquals(left, right)) { return true; } - if (x is null || y is null || x.GetType() != y.GetType()) + if (left is null || right is null || left.GetType() != right.GetType()) { return false; } - if (x.StringId == null && y.StringId == null) + if (left.StringId == null && right.StringId == null) { - return x.LocalId == y.LocalId; + return left.LocalId == right.LocalId; } - return x.StringId == y.StringId; + return left.StringId == right.StringId; } public int GetHashCode(IIdentifiable obj) diff --git a/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs b/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs index 683d3a7bb0..7a7102291e 100644 --- a/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs +++ b/src/JsonApiDotNetCore/Resources/IdentifiableExtensions.cs @@ -1,7 +1,6 @@ -#nullable disable - using System; using System.Reflection; +using JsonApiDotNetCore.Resources.Internal; namespace JsonApiDotNetCore.Resources { @@ -11,14 +10,28 @@ public static object GetTypedId(this IIdentifiable identifiable) { ArgumentGuard.NotNull(identifiable, nameof(identifiable)); - PropertyInfo property = identifiable.GetType().GetProperty(nameof(Identifiable.Id)); + PropertyInfo? property = identifiable.GetType().GetProperty(nameof(Identifiable.Id)); if (property == null) { throw new InvalidOperationException($"Resource of type '{identifiable.GetType()}' does not have an 'Id' property."); } - return property.GetValue(identifiable); + object? propertyValue = property.GetValue(identifiable); + + // PERF: We want to throw when 'Id' is unassigned without doing an expensive reflection call, unless this is likely the case. + if (identifiable.StringId == null) + { + object? defaultValue = RuntimeTypeConverter.GetDefaultValue(property.PropertyType); + + if (Equals(propertyValue, defaultValue)) + { + throw new InvalidOperationException($"Property '{identifiable.GetType().Name}.{nameof(Identifiable.Id)}' should " + + $"have been assigned at this point, but it contains its default {property.PropertyType.Name} value '{propertyValue}'."); + } + } + + return propertyValue!; } } } diff --git a/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs b/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs index 5236ddf179..16c72ed604 100644 --- a/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs +++ b/src/JsonApiDotNetCore/Resources/Internal/RuntimeTypeConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; @@ -10,7 +8,7 @@ namespace JsonApiDotNetCore.Resources.Internal [PublicAPI] public static class RuntimeTypeConverter { - public static object ConvertType(object value, Type type) + public static object? ConvertType(object? value, Type type) { ArgumentGuard.NotNull(type, nameof(type)); @@ -32,7 +30,7 @@ public static object ConvertType(object value, Type type) return value; } - string stringValue = value.ToString(); + string? stringValue = value.ToString(); if (string.IsNullOrEmpty(stringValue)) { @@ -87,7 +85,7 @@ public static bool CanContainNull(Type type) return !type.IsValueType || Nullable.GetUnderlyingType(type) != null; } - public static object GetDefaultValue(Type type) + public static object? GetDefaultValue(Type type) { return type.IsValueType ? Activator.CreateInstance(type) : null; } diff --git a/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs b/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs index 892b726ba0..da1d76b395 100644 --- a/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs +++ b/src/JsonApiDotNetCore/Resources/JsonApiResourceDefinition.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -43,13 +41,13 @@ public virtual IImmutableSet OnApplyIncludes(IImmutabl } /// - public virtual FilterExpression OnApplyFilter(FilterExpression existingFilter) + public virtual FilterExpression? OnApplyFilter(FilterExpression? existingFilter) { return existingFilter; } /// - public virtual SortExpression OnApplySort(SortExpression existingSort) + public virtual SortExpression? OnApplySort(SortExpression? existingSort) { return existingSort; } @@ -68,11 +66,11 @@ public virtual SortExpression OnApplySort(SortExpression existingSort) /// protected SortExpression CreateSortExpressionFromLambda(PropertySortOrder keySelectors) { - ArgumentGuard.NotNull(keySelectors, nameof(keySelectors)); + ArgumentGuard.NotNullNorEmpty(keySelectors, nameof(keySelectors)); ImmutableArray.Builder elementsBuilder = ImmutableArray.CreateBuilder(keySelectors.Count); - foreach ((Expression> keySelector, ListSortDirection sortDirection) in keySelectors) + foreach ((Expression> keySelector, ListSortDirection sortDirection) in keySelectors) { bool isAscending = sortDirection == ListSortDirection.Ascending; AttrAttribute attribute = ResourceGraph.GetAttributes(keySelector).Single(); @@ -85,25 +83,25 @@ protected SortExpression CreateSortExpressionFromLambda(PropertySortOrder keySel } /// - public virtual PaginationExpression OnApplyPagination(PaginationExpression existingPagination) + public virtual PaginationExpression? OnApplyPagination(PaginationExpression? existingPagination) { return existingPagination; } /// - public virtual SparseFieldSetExpression OnApplySparseFieldSet(SparseFieldSetExpression existingSparseFieldSet) + public virtual SparseFieldSetExpression? OnApplySparseFieldSet(SparseFieldSetExpression? existingSparseFieldSet) { return existingSparseFieldSet; } /// - public virtual QueryStringParameterHandlers OnRegisterQueryableHandlersForQueryStringParameters() + public virtual QueryStringParameterHandlers? OnRegisterQueryableHandlersForQueryStringParameters() { return null; } /// - public virtual IDictionary GetMeta(TResource resource) + public virtual IDictionary? GetMeta(TResource resource) { return null; } @@ -115,8 +113,8 @@ public virtual Task OnPrepareWriteAsync(TResource resource, WriteOperationKind w } /// - public virtual Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, - IIdentifiable rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) + public virtual Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, + IIdentifiable? rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) { return Task.FromResult(rightResourceId); } @@ -168,7 +166,7 @@ public virtual void OnSerialize(TResource resource) /// This is an alias type intended to simplify the implementation's method signature. See for usage /// details. /// - public sealed class PropertySortOrder : List<(Expression> KeySelector, ListSortDirection SortDirection)> + public sealed class PropertySortOrder : List<(Expression> KeySelector, ListSortDirection SortDirection)> { } } diff --git a/src/JsonApiDotNetCore/Resources/OperationContainer.cs b/src/JsonApiDotNetCore/Resources/OperationContainer.cs index a61553edce..4336fef3f3 100644 --- a/src/JsonApiDotNetCore/Resources/OperationContainer.cs +++ b/src/JsonApiDotNetCore/Resources/OperationContainer.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Middleware; @@ -56,7 +54,7 @@ public ISet GetSecondaryResources() private void AddSecondaryResources(RelationshipAttribute relationship, HashSet secondaryResources) { - object rightValue = relationship.GetValue(Resource); + object? rightValue = relationship.GetValue(Resource); ICollection rightResources = CollectionConverter.ExtractResources(rightValue); secondaryResources.AddRange(rightResources); diff --git a/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs b/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs index d2390a2ab4..1f5d412252 100644 --- a/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs +++ b/src/JsonApiDotNetCore/Resources/QueryStringParameterHandlers.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; diff --git a/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs b/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs index a3e3980ac9..620e8a990a 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceChangeTracker.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json; using JetBrains.Annotations; @@ -16,9 +14,9 @@ public sealed class ResourceChangeTracker : IResourceChangeTracker _initiallyStoredAttributeValues; - private IDictionary _requestAttributeValues; - private IDictionary _finallyStoredAttributeValues; + private IDictionary? _initiallyStoredAttributeValues; + private IDictionary? _requestAttributeValues; + private IDictionary? _finallyStoredAttributeValues; public ResourceChangeTracker(IResourceGraph resourceGraph, ITargetedFields targetedFields) { @@ -59,7 +57,7 @@ private IDictionary CreateAttributeDictionary(TResource resource foreach (AttrAttribute attribute in attributes) { - object value = attribute.GetValue(resource); + object? value = attribute.GetValue(resource); string json = JsonSerializer.Serialize(value); result.Add(attribute.PublicName, json); } @@ -70,26 +68,29 @@ private IDictionary CreateAttributeDictionary(TResource resource /// public bool HasImplicitChanges() { - foreach (string key in _initiallyStoredAttributeValues.Keys) + if (_initiallyStoredAttributeValues != null && _requestAttributeValues != null && _finallyStoredAttributeValues != null) { - if (_requestAttributeValues.ContainsKey(key)) + foreach (string key in _initiallyStoredAttributeValues.Keys) { - string requestValue = _requestAttributeValues[key]; - string actualValue = _finallyStoredAttributeValues[key]; - - if (requestValue != actualValue) + if (_requestAttributeValues.ContainsKey(key)) { - return true; - } - } - else - { - string initiallyStoredValue = _initiallyStoredAttributeValues[key]; - string finallyStoredValue = _finallyStoredAttributeValues[key]; + string requestValue = _requestAttributeValues[key]; + string actualValue = _finallyStoredAttributeValues[key]; - if (initiallyStoredValue != finallyStoredValue) + if (requestValue != actualValue) + { + return true; + } + } + else { - return true; + string initiallyStoredValue = _initiallyStoredAttributeValues[key]; + string finallyStoredValue = _finallyStoredAttributeValues[key]; + + if (initiallyStoredValue != finallyStoredValue) + { + return true; + } } } } diff --git a/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs b/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs index db308e33a9..d18ae04c08 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceDefinitionAccessor.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -40,7 +38,7 @@ public IImmutableSet OnApplyIncludes(ResourceType reso } /// - public FilterExpression OnApplyFilter(ResourceType resourceType, FilterExpression existingFilter) + public FilterExpression? OnApplyFilter(ResourceType resourceType, FilterExpression? existingFilter) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -49,7 +47,7 @@ public FilterExpression OnApplyFilter(ResourceType resourceType, FilterExpressio } /// - public SortExpression OnApplySort(ResourceType resourceType, SortExpression existingSort) + public SortExpression? OnApplySort(ResourceType resourceType, SortExpression? existingSort) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -58,7 +56,7 @@ public SortExpression OnApplySort(ResourceType resourceType, SortExpression exis } /// - public PaginationExpression OnApplyPagination(ResourceType resourceType, PaginationExpression existingPagination) + public PaginationExpression? OnApplyPagination(ResourceType resourceType, PaginationExpression? existingPagination) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -67,7 +65,7 @@ public PaginationExpression OnApplyPagination(ResourceType resourceType, Paginat } /// - public SparseFieldSetExpression OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression existingSparseFieldSet) + public SparseFieldSetExpression? OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression? existingSparseFieldSet) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -76,7 +74,7 @@ public SparseFieldSetExpression OnApplySparseFieldSet(ResourceType resourceType, } /// - public object GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName) + public object? GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName) { ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); ArgumentGuard.NotNullNorEmpty(parameterName, nameof(parameterName)); @@ -84,11 +82,11 @@ public object GetQueryableHandlerForQueryStringParameter(Type resourceClrType, s dynamic resourceDefinition = ResolveResourceDefinition(resourceClrType); dynamic handlers = resourceDefinition.OnRegisterQueryableHandlersForQueryStringParameters(); - return handlers != null && handlers.ContainsKey(parameterName) ? handlers[parameterName] : null; + return handlers != null && handlers!.ContainsKey(parameterName) ? handlers![parameterName] : null; } /// - public IDictionary GetMeta(ResourceType resourceType, IIdentifiable resourceInstance) + public IDictionary? GetMeta(ResourceType resourceType, IIdentifiable resourceInstance) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); @@ -107,8 +105,8 @@ public async Task OnPrepareWriteAsync(TResource resource, WriteOperat } /// - public async Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, - IIdentifiable rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) + public async Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, + IIdentifiable? rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) where TResource : class, IIdentifiable { ArgumentGuard.NotNull(leftResource, nameof(leftResource)); diff --git a/src/JsonApiDotNetCore/Resources/ResourceFactory.cs b/src/JsonApiDotNetCore/Resources/ResourceFactory.cs index 400175b046..f5e305a29f 100644 --- a/src/JsonApiDotNetCore/Resources/ResourceFactory.cs +++ b/src/JsonApiDotNetCore/Resources/ResourceFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -43,7 +41,7 @@ private static IIdentifiable InnerCreateInstance(Type type, IServiceProvider ser try { return hasSingleConstructorWithoutParameters - ? (IIdentifiable)Activator.CreateInstance(type) + ? (IIdentifiable)Activator.CreateInstance(type)! : (IIdentifiable)ActivatorUtilities.CreateInstance(serviceProvider, type); } #pragma warning disable AV1210 // Catch a specific exception instead of Exception, SystemException or ApplicationException diff --git a/src/JsonApiDotNetCore/Resources/TargetedFields.cs b/src/JsonApiDotNetCore/Resources/TargetedFields.cs index c904c6ec61..4e2d571e5c 100644 --- a/src/JsonApiDotNetCore/Resources/TargetedFields.cs +++ b/src/JsonApiDotNetCore/Resources/TargetedFields.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs index 0dc8ac31ed..df9e2ff0e1 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/JsonObjectConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json; using System.Text.Json.Serialization; @@ -7,9 +5,9 @@ namespace JsonApiDotNetCore.Serialization.JsonConverters { public abstract class JsonObjectConverter : JsonConverter { - protected static TValue ReadSubTree(ref Utf8JsonReader reader, JsonSerializerOptions options) + protected static TValue? ReadSubTree(ref Utf8JsonReader reader, JsonSerializerOptions options) { - if (typeof(TValue) != typeof(object) && options?.GetConverter(typeof(TValue)) is JsonConverter converter) + if (typeof(TValue) != typeof(object) && options.GetConverter(typeof(TValue)) is JsonConverter converter) { return converter.Read(ref reader, typeof(TValue), options); } @@ -19,7 +17,7 @@ protected static TValue ReadSubTree(ref Utf8JsonReader reader, JsonSeria protected static void WriteSubTree(Utf8JsonWriter writer, TValue value, JsonSerializerOptions options) { - if (typeof(TValue) != typeof(object) && options?.GetConverter(typeof(TValue)) is JsonConverter converter) + if (typeof(TValue) != typeof(object) && options.GetConverter(typeof(TValue)) is JsonConverter converter) { converter.Write(writer, value, options); } diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs index 36d4018454..e0669e9160 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/ResourceObjectConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Reflection; @@ -53,7 +51,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver Type = TryPeekType(ref reader) }; - ResourceType resourceType = resourceObject.Type != null ? _resourceGraph.FindResourceType(resourceObject.Type) : null; + ResourceType? resourceType = resourceObject.Type != null ? _resourceGraph.FindResourceType(resourceObject.Type) : null; while (reader.Read()) { @@ -65,7 +63,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver } case JsonTokenType.PropertyName: { - string propertyName = reader.GetString(); + string? propertyName = reader.GetString(); reader.Read(); switch (propertyName) @@ -103,7 +101,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver } case "relationships": { - resourceObject.Relationships = ReadSubTree>(ref reader, options); + resourceObject.Relationships = ReadSubTree>(ref reader, options); break; } case "links": @@ -113,7 +111,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver } case "meta": { - resourceObject.Meta = ReadSubTree>(ref reader, options); + resourceObject.Meta = ReadSubTree>(ref reader, options); break; } default: @@ -131,7 +129,7 @@ public override ResourceObject Read(ref Utf8JsonReader reader, Type typeToConver throw GetEndOfStreamError(); } - private static string TryPeekType(ref Utf8JsonReader reader) + private static string? TryPeekType(ref Utf8JsonReader reader) { // https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to?pivots=dotnet-5-0#an-alternative-way-to-do-polymorphic-deserialization Utf8JsonReader readerClone = reader; @@ -140,7 +138,7 @@ private static string TryPeekType(ref Utf8JsonReader reader) { if (readerClone.TokenType == JsonTokenType.PropertyName) { - string propertyName = readerClone.GetString(); + string? propertyName = readerClone.GetString(); readerClone.Read(); switch (propertyName) @@ -161,9 +159,9 @@ private static string TryPeekType(ref Utf8JsonReader reader) return null; } - private static IDictionary ReadAttributes(ref Utf8JsonReader reader, JsonSerializerOptions options, ResourceType resourceType) + private static IDictionary ReadAttributes(ref Utf8JsonReader reader, JsonSerializerOptions options, ResourceType resourceType) { - var attributes = new Dictionary(); + var attributes = new Dictionary(); while (reader.Read()) { @@ -175,15 +173,15 @@ private static IDictionary ReadAttributes(ref Utf8JsonReader rea } case JsonTokenType.PropertyName: { - string attributeName = reader.GetString(); + string attributeName = reader.GetString() ?? string.Empty; reader.Read(); - AttrAttribute attribute = resourceType.FindAttributeByPublicName(attributeName); - PropertyInfo property = attribute?.Property; + AttrAttribute? attribute = resourceType.FindAttributeByPublicName(attributeName); + PropertyInfo? property = attribute?.Property; if (property != null) { - object attributeValue; + object? attributeValue; if (property.Name == nameof(Identifiable.Id)) { @@ -207,11 +205,11 @@ private static IDictionary ReadAttributes(ref Utf8JsonReader rea } } - attributes.Add(attributeName!, attributeValue); + attributes.Add(attributeName, attributeValue); } else { - attributes.Add(attributeName!, null); + attributes.Add(attributeName, null); reader.Skip(); } diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs index 14a97b4c65..8f80f422c2 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/SingleOrManyDataConverterFactory.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -27,15 +25,15 @@ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializer Type objectType = typeToConvert.GetGenericArguments()[0]; Type converterType = typeof(SingleOrManyDataConverter<>).MakeGenericType(objectType); - return (JsonConverter)Activator.CreateInstance(converterType, BindingFlags.Instance | BindingFlags.Public, null, null, null); + return (JsonConverter)Activator.CreateInstance(converterType, BindingFlags.Instance | BindingFlags.Public, null, null, null)!; } private sealed class SingleOrManyDataConverter : JsonObjectConverter> - where T : class, IResourceIdentity + where T : class, IResourceIdentity, new() { public override SingleOrManyData Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions serializerOptions) { - var objects = new List(); + var objects = new List(); bool isManyData = false; bool hasCompletedToMany = false; @@ -48,6 +46,16 @@ public override SingleOrManyData Read(ref Utf8JsonReader reader, Type typeToC hasCompletedToMany = true; break; } + case JsonTokenType.Null: + { + if (isManyData) + { + // [TODO-NRT]: Add tests for downstream failure on `null` array element. + objects.Add(new T()); + } + + break; + } case JsonTokenType.StartObject: { var resourceObject = ReadSubTree(ref reader, serializerOptions); @@ -63,7 +71,7 @@ public override SingleOrManyData Read(ref Utf8JsonReader reader, Type typeToC } while (isManyData && !hasCompletedToMany && reader.Read()); - object data = isManyData ? objects : objects.FirstOrDefault(); + object? data = isManyData ? objects : objects.FirstOrDefault(); return new SingleOrManyData(data); } diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs index 0f0668c6dc..65d8f36d12 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyDocumentConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs index c7e0e6aacb..d80fcee5bd 100644 --- a/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs +++ b/src/JsonApiDotNetCore/Serialization/JsonConverters/WriteOnlyRelationshipObjectConverter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs index ec9edef235..c016299024 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationCode.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; namespace JsonApiDotNetCore.Serialization.Objects diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs index 6ed97b1cd4..b4cddf1aa7 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicOperationObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -22,14 +20,14 @@ public sealed class AtomicOperationObject [JsonPropertyName("ref")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public AtomicReference Ref { get; set; } + public AtomicReference? Ref { get; set; } [JsonPropertyName("href")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Href { get; set; } + public string? Href { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs index 452606e01d..7c4f93caa9 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicReference.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,18 +11,18 @@ public sealed class AtomicReference : IResourceIdentity { [JsonPropertyName("type")] [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public string Type { get; set; } + public string? Type { get; set; } [JsonPropertyName("id")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Id { get; set; } + public string? Id { get; set; } [JsonPropertyName("lid")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Lid { get; set; } + public string? Lid { get; set; } [JsonPropertyName("relationship")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Relationship { get; set; } + public string? Relationship { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs index 38059475a0..0d55c65a3c 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/AtomicResultObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -18,6 +16,6 @@ public sealed class AtomicResultObject [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/Document.cs b/src/JsonApiDotNetCore/Serialization/Objects/Document.cs index 64dadf11eb..9242398d34 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/Document.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/Document.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; @@ -12,11 +10,11 @@ public sealed class Document { [JsonPropertyName("jsonapi")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public JsonApiObject JsonApi { get; set; } + public JsonApiObject? JsonApi { get; set; } [JsonPropertyName("links")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public TopLevelLinks Links { get; set; } + public TopLevelLinks? Links { get; set; } [JsonPropertyName("data")] // JsonIgnoreCondition is determined at runtime by WriteOnlyDocumentConverter. @@ -24,22 +22,22 @@ public sealed class Document [JsonPropertyName("atomic:operations")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Operations { get; set; } + public IList? Operations { get; set; } [JsonPropertyName("atomic:results")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Results { get; set; } + public IList? Results { get; set; } [JsonPropertyName("errors")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Errors { get; set; } + public IList? Errors { get; set; } [JsonPropertyName("included")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Included { get; set; } + public IList? Included { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs index 8ad40e801a..e45dc22a2f 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorLinks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,10 +11,10 @@ public sealed class ErrorLinks { [JsonPropertyName("about")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string About { get; set; } + public string? About { get; set; } [JsonPropertyName("type")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Type { get; set; } + public string? Type { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs index 28ad10815f..9fb0eb6f85 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -17,11 +15,11 @@ public sealed class ErrorObject { [JsonPropertyName("id")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Id { get; set; } = Guid.NewGuid().ToString(); + public string? Id { get; set; } = Guid.NewGuid().ToString(); [JsonPropertyName("links")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public ErrorLinks Links { get; set; } + public ErrorLinks? Links { get; set; } [JsonIgnore] public HttpStatusCode StatusCode { get; set; } @@ -36,23 +34,23 @@ public string Status [JsonPropertyName("code")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Code { get; set; } + public string? Code { get; set; } [JsonPropertyName("title")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Title { get; set; } + public string? Title { get; set; } [JsonPropertyName("detail")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Detail { get; set; } + public string? Detail { get; set; } [JsonPropertyName("source")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public ErrorSource Source { get; set; } + public ErrorSource? Source { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } public ErrorObject(HttpStatusCode statusCode) { diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs b/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs index 86aa9dd1a2..ec363c2f8d 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ErrorSource.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,14 +11,14 @@ public sealed class ErrorSource { [JsonPropertyName("pointer")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Pointer { get; set; } + public string? Pointer { get; set; } [JsonPropertyName("parameter")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Parameter { get; set; } + public string? Parameter { get; set; } [JsonPropertyName("header")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Header { get; set; } + public string? Header { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs b/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs index 1c4510bedb..9b683c6922 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/IResourceIdentity.cs @@ -1,11 +1,9 @@ -#nullable disable - namespace JsonApiDotNetCore.Serialization.Objects { public interface IResourceIdentity { - public string Type { get; } - public string Id { get; } - public string Lid { get; } + public string? Type { get; } + public string? Id { get; } + public string? Lid { get; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs index 5ee074b8d0..d0a385e404 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/JsonApiObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -14,18 +12,18 @@ public sealed class JsonApiObject { [JsonPropertyName("version")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Version { get; set; } + public string? Version { get; set; } [JsonPropertyName("ext")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Ext { get; set; } + public IList? Ext { get; set; } [JsonPropertyName("profile")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IList Profile { get; set; } + public IList? Profile { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs index e7d9056d3c..944b811605 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipLinks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,11 +11,11 @@ public sealed class RelationshipLinks { [JsonPropertyName("self")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Self { get; set; } + public string? Self { get; set; } [JsonPropertyName("related")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Related { get; set; } + public string? Related { get; set; } internal bool HasValue() { diff --git a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs index c92a960c19..96f5414eea 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/RelationshipObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -14,7 +12,7 @@ public sealed class RelationshipObject { [JsonPropertyName("links")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public RelationshipLinks Links { get; set; } + public RelationshipLinks? Links { get; set; } [JsonPropertyName("data")] // JsonIgnoreCondition is determined at runtime by WriteOnlyRelationshipObjectConverter. @@ -22,6 +20,6 @@ public sealed class RelationshipObject [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs index 227b9ee094..9b9de3afb8 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceIdentifierObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -14,18 +12,18 @@ public sealed class ResourceIdentifierObject : IResourceIdentity { [JsonPropertyName("type")] [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public string Type { get; set; } + public string? Type { get; set; } [JsonPropertyName("id")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Id { get; set; } + public string? Id { get; set; } [JsonPropertyName("lid")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Lid { get; set; } + public string? Lid { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs index 164318ebf5..ddee80c85d 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceLinks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,7 +11,7 @@ public sealed class ResourceLinks { [JsonPropertyName("self")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Self { get; set; } + public string? Self { get; set; } internal bool HasValue() { diff --git a/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs b/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs index 280c4a4fca..85f340075d 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/ResourceObject.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -14,30 +12,30 @@ public sealed class ResourceObject : IResourceIdentity { [JsonPropertyName("type")] [JsonIgnore(Condition = JsonIgnoreCondition.Never)] - public string Type { get; set; } + public string? Type { get; set; } [JsonPropertyName("id")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Id { get; set; } + public string? Id { get; set; } [JsonPropertyName("lid")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Lid { get; set; } + public string? Lid { get; set; } [JsonPropertyName("attributes")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Attributes { get; set; } + public IDictionary? Attributes { get; set; } [JsonPropertyName("relationships")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Relationships { get; set; } + public IDictionary? Relationships { get; set; } [JsonPropertyName("links")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public ResourceLinks Links { get; set; } + public ResourceLinks? Links { get; set; } [JsonPropertyName("meta")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public IDictionary Meta { get; set; } + public IDictionary? Meta { get; set; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs b/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs index ad12eacd60..548dde07e9 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/SingleOrManyData.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Text.Json; @@ -15,22 +13,24 @@ namespace JsonApiDotNetCore.Serialization.Objects /// [PublicAPI] public readonly struct SingleOrManyData - where T : class, IResourceIdentity + // The "new()" constraint exists for parity with SingleOrManyDataConverterFactory, which creates empty instances + // to ensure ManyValue never contains null items. + where T : class, IResourceIdentity, new() { // ReSharper disable once MergeConditionalExpression // Justification: ReSharper reporting this is a bug, which is fixed in v2021.2.1. This condition cannot be merged. - public object Value => ManyValue != null ? ManyValue : SingleValue; + public object? Value => ManyValue != null ? ManyValue : SingleValue; [JsonIgnore] public bool IsAssigned { get; } [JsonIgnore] - public T SingleValue { get; } + public T? SingleValue { get; } [JsonIgnore] - public IList ManyValue { get; } + public IList? ManyValue { get; } - public SingleOrManyData(object value) + public SingleOrManyData(object? value) { IsAssigned = true; @@ -42,7 +42,7 @@ public SingleOrManyData(object value) else { ManyValue = null; - SingleValue = (T)value; + SingleValue = (T?)value; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs b/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs index d61107787c..abb8a365e9 100644 --- a/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs +++ b/src/JsonApiDotNetCore/Serialization/Objects/TopLevelLinks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Text.Json.Serialization; using JetBrains.Annotations; @@ -13,31 +11,31 @@ public sealed class TopLevelLinks { [JsonPropertyName("self")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Self { get; set; } + public string? Self { get; set; } [JsonPropertyName("related")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Related { get; set; } + public string? Related { get; set; } [JsonPropertyName("describedby")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string DescribedBy { get; set; } + public string? DescribedBy { get; set; } [JsonPropertyName("first")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string First { get; set; } + public string? First { get; set; } [JsonPropertyName("last")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Last { get; set; } + public string? Last { get; set; } [JsonPropertyName("prev")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Prev { get; set; } + public string? Prev { get; set; } [JsonPropertyName("next")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] - public string Next { get; set; } + public string? Next { get; set; } internal bool HasValue() { diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs index 8d4f30b891..9898158818 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicOperationObjectAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; @@ -46,14 +44,14 @@ public OperationContainer Convert(AtomicOperationObject atomicOperationObject, R WriteOperation = writeOperation }; - (ResourceIdentityRequirements requirements, IIdentifiable primaryResource) = ConvertRef(atomicOperationObject, state); + (ResourceIdentityRequirements requirements, IIdentifiable? primaryResource) = ConvertRef(atomicOperationObject, state); if (writeOperation is WriteOperationKind.CreateResource or WriteOperationKind.UpdateResource) { primaryResource = _resourceDataInOperationsRequestAdapter.Convert(atomicOperationObject.Data, requirements, state); } - return new OperationContainer(primaryResource, state.WritableTargetedFields, state.Request); + return new OperationContainer(primaryResource!, state.WritableTargetedFields, state.Request); } private static void AssertNoHref(AtomicOperationObject atomicOperationObject, RequestAdapterState state) @@ -97,13 +95,13 @@ private WriteOperationKind ConvertOperationCode(AtomicOperationObject atomicOper throw new NotSupportedException($"Unknown operation code '{atomicOperationObject.Code}'."); } - private (ResourceIdentityRequirements requirements, IIdentifiable primaryResource) ConvertRef(AtomicOperationObject atomicOperationObject, + private (ResourceIdentityRequirements requirements, IIdentifiable? primaryResource) ConvertRef(AtomicOperationObject atomicOperationObject, RequestAdapterState state) { ResourceIdentityRequirements requirements = CreateIdentityRequirements(state); - IIdentifiable primaryResource = null; + IIdentifiable? primaryResource = null; - AtomicReferenceResult refResult = atomicOperationObject.Ref != null + AtomicReferenceResult? refResult = atomicOperationObject.Ref != null ? _atomicReferenceAdapter.Convert(atomicOperationObject.Ref, requirements, state) : null; @@ -118,7 +116,7 @@ private WriteOperationKind ConvertOperationCode(AtomicOperationObject atomicOper RelationshipName = refResult.Relationship?.PublicName }; - state.WritableRequest.PrimaryId = refResult.Resource.StringId; + state.WritableRequest!.PrimaryId = refResult.Resource.StringId; state.WritableRequest.PrimaryResourceType = refResult.ResourceType; state.WritableRequest.Relationship = refResult.Relationship; state.WritableRequest.IsCollection = refResult.Relationship is HasManyAttribute; @@ -147,11 +145,11 @@ private void ConvertRefRelationship(SingleOrManyData relationshi { if (refResult.Relationship != null) { - state.WritableRequest.SecondaryResourceType = refResult.Relationship.RightType; + state.WritableRequest!.SecondaryResourceType = refResult.Relationship.RightType; - state.WritableTargetedFields.Relationships.Add(refResult.Relationship); + state.WritableTargetedFields!.Relationships.Add(refResult.Relationship); - object rightValue = _relationshipDataAdapter.Convert(relationshipData, refResult.Relationship, true, state); + object? rightValue = _relationshipDataAdapter.Convert(relationshipData, refResult.Relationship, true, state); refResult.Relationship.SetValue(refResult.Resource, rightValue); } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs index f51bfef56c..b17c94edb6 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceAdapter.cs @@ -1,6 +1,5 @@ -#nullable disable - using System; +using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -9,6 +8,7 @@ namespace JsonApiDotNetCore.Serialization.Request.Adapters { /// + [PublicAPI] public sealed class AtomicReferenceAdapter : ResourceIdentityAdapter, IAtomicReferenceAdapter { public AtomicReferenceAdapter(IResourceGraph resourceGraph, IResourceFactory resourceFactory) @@ -26,7 +26,7 @@ public AtomicReferenceResult Convert(AtomicReference atomicReference, ResourceId using IDisposable _ = state.Position.PushElement("ref"); (IIdentifiable resource, ResourceType resourceType) = ConvertResourceIdentity(atomicReference, requirements, state); - RelationshipAttribute relationship = atomicReference.Relationship != null + RelationshipAttribute? relationship = atomicReference.Relationship != null ? ConvertRelationship(atomicReference.Relationship, resourceType, state) : null; @@ -36,7 +36,7 @@ public AtomicReferenceResult Convert(AtomicReference atomicReference, ResourceId private RelationshipAttribute ConvertRelationship(string relationshipName, ResourceType resourceType, RequestAdapterState state) { using IDisposable _ = state.Position.PushElement("relationship"); - RelationshipAttribute relationship = resourceType.FindRelationshipByPublicName(relationshipName); + RelationshipAttribute? relationship = resourceType.FindRelationshipByPublicName(relationshipName); AssertIsKnownRelationship(relationship, relationshipName, resourceType, state); AssertToManyInAddOrRemoveRelationship(relationship, state); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs index f2eea0242b..724a5da96c 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/AtomicReferenceResult.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; @@ -15,9 +13,9 @@ public sealed class AtomicReferenceResult { public IIdentifiable Resource { get; } public ResourceType ResourceType { get; } - public RelationshipAttribute Relationship { get; } + public RelationshipAttribute? Relationship { get; } - public AtomicReferenceResult(IIdentifiable resource, ResourceType resourceType, RelationshipAttribute relationship) + public AtomicReferenceResult(IIdentifiable resource, ResourceType resourceType, RelationshipAttribute? relationship) { ArgumentGuard.NotNull(resource, nameof(resource)); ArgumentGuard.NotNull(resourceType, nameof(resourceType)); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs index 57c67b3444..c225a6589f 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/BaseDataAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Serialization.Objects; @@ -12,7 +10,7 @@ public abstract class BaseDataAdapter { [AssertionMethod] protected static void AssertHasData(SingleOrManyData data, RequestAdapterState state) - where T : class, IResourceIdentity + where T : class, IResourceIdentity, new() { if (!data.IsAssigned) { @@ -22,7 +20,7 @@ protected static void AssertHasData(SingleOrManyData data, RequestAdapterS [AssertionMethod] protected static void AssertHasSingleValue(SingleOrManyData data, bool allowNull, RequestAdapterState state) - where T : class, IResourceIdentity + where T : class, IResourceIdentity, new() { if (data.SingleValue == null) { @@ -43,7 +41,7 @@ protected static void AssertHasSingleValue(SingleOrManyData data, bool all [AssertionMethod] protected static void AssertHasManyValue(SingleOrManyData data, RequestAdapterState state) - where T : class, IResourceIdentity + where T : class, IResourceIdentity, new() { if (data.ManyValue == null) { diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs index b13bf0b9a5..46bcc1ca25 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; @@ -30,7 +28,7 @@ public DocumentAdapter(IJsonApiRequest request, ITargetedFields targetedFields, } /// - public object Convert(Document document) + public object? Convert(Document document) { ArgumentGuard.NotNull(document, nameof(document)); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs index eeb2576515..8c0f082d35 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInOperationsRequestAdapter.cs @@ -1,7 +1,6 @@ -#nullable disable - using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; @@ -35,7 +34,7 @@ public IList Convert(Document document, RequestAdapterState return ConvertOperations(document.Operations, state); } - private static void AssertHasOperations(IEnumerable atomicOperationObjects, RequestAdapterState state) + private static void AssertHasOperations([NotNull] IEnumerable? atomicOperationObjects, RequestAdapterState state) { if (atomicOperationObjects.IsNullOrEmpty()) { @@ -43,7 +42,7 @@ private static void AssertHasOperations(IEnumerable atomi } } - private void AssertMaxOperationsNotExceeded(ICollection atomicOperationObjects, RequestAdapterState state) + private void AssertMaxOperationsNotExceeded(ICollection atomicOperationObjects, RequestAdapterState state) { if (atomicOperationObjects.Count > _options.MaximumOperationsPerRequest) { @@ -53,13 +52,19 @@ private void AssertMaxOperationsNotExceeded(ICollection a } } - private IList ConvertOperations(IEnumerable atomicOperationObjects, RequestAdapterState state) + private IList ConvertOperations(IEnumerable atomicOperationObjects, RequestAdapterState state) { var operations = new List(); int operationIndex = 0; - foreach (AtomicOperationObject atomicOperationObject in atomicOperationObjects) + foreach (AtomicOperationObject? atomicOperationObject in atomicOperationObjects) { + // [TODO-NRT]: Add tests for downstream failure on `null` object. + if (atomicOperationObject == null) + { + throw new ModelConversionException(state.Position, null, null); + } + using IDisposable _ = state.Position.PushArrayIndex(operationIndex); OperationContainer operation = _atomicOperationObjectAdapter.Convert(atomicOperationObject, state); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs index b200e442cd..1a127b49ed 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/DocumentInResourceOrRelationshipRequestAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; @@ -28,7 +26,7 @@ public DocumentInResourceOrRelationshipRequestAdapter(IJsonApiOptions options, I } /// - public object Convert(Document document, RequestAdapterState state) + public object? Convert(Document document, RequestAdapterState state) { state.WritableTargetedFields = new TargetedFields(); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs index 4ee1f946ee..5fb2c1d680 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicOperationObjectAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs index 81208557cd..bd4a12b2de 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IAtomicReferenceAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs index f09ea5f84c..78e3ed2f1a 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters @@ -35,6 +33,6 @@ public interface IDocumentAdapter /// /// /// - object Convert(Document document); + object? Convert(Document document); } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs index 57fc24747b..de39fa6c91 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInOperationsRequestAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs index 9cf8eb70e8..a1b8fc0585 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IDocumentInResourceOrRelationshipRequestAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Request.Adapters @@ -12,6 +10,6 @@ public interface IDocumentInResourceOrRelationshipRequestAdapter /// /// Validates and converts the specified . /// - object Convert(Document document, RequestAdapterState state); + object? Convert(Document document, RequestAdapterState state); } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs index b887b0ef83..222642dc76 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IRelationshipDataAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources.Annotations; using JsonApiDotNetCore.Serialization.Objects; @@ -15,12 +13,12 @@ public interface IRelationshipDataAdapter /// /// Validates and converts the specified . /// - object Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state); + object? Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state); /// /// Validates and converts the specified . /// - object Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, + object? Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state); } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs index b87b50dac5..e7dd737cfb 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs index d2d5fbb79f..f47e25dfa0 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceDataInOperationsRequestAdapter.cs @@ -1,5 +1,4 @@ -#nullable disable - +using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; @@ -8,6 +7,7 @@ namespace JsonApiDotNetCore.Serialization.Request.Adapters /// /// Validates and converts the data from an entry in an atomic:operations request that creates or updates a resource. /// + [PublicAPI] public interface IResourceDataInOperationsRequestAdapter { /// diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs index 4430200842..3105143908 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceIdentifierObjectAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs index 274189ef54..8245444e08 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/IResourceObjectAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs index c60494e22a..ebdd76945a 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/JsonElementConstraint.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCore.Serialization.Request.Adapters diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs index 76c176b128..4336baecd3 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RelationshipDataAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -25,7 +23,7 @@ public RelationshipDataAdapter(IResourceIdentifierObjectAdapter resourceIdentifi } /// - public object Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state) + public object? Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state) { SingleOrManyData identifierData = ToIdentifierData(data); return Convert(identifierData, relationship, useToManyElementType, state); @@ -38,7 +36,7 @@ private static SingleOrManyData ToIdentifierData(Singl return default; } - object newValue = null; + object? newValue = null; if (data.ManyValue != null) { @@ -63,7 +61,7 @@ private static SingleOrManyData ToIdentifierData(Singl } /// - public object Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, + public object? Convert(SingleOrManyData data, RelationshipAttribute relationship, bool useToManyElementType, RequestAdapterState state) { ArgumentGuard.NotNull(relationship, nameof(relationship)); @@ -84,7 +82,7 @@ public object Convert(SingleOrManyData data, Relations : ConvertToManyRelationshipData(data, relationship, requirements, useToManyElementType, state); } - private IIdentifiable ConvertToOneRelationshipData(SingleOrManyData data, ResourceIdentityRequirements requirements, + private IIdentifiable? ConvertToOneRelationshipData(SingleOrManyData data, ResourceIdentityRequirements requirements, RequestAdapterState state) { AssertHasSingleValue(data, true, state); @@ -100,7 +98,7 @@ private IEnumerable ConvertToManyRelationshipData(SingleOrManyData(); - foreach (ResourceIdentifierObject resourceIdentifierObject in data.ManyValue) + foreach (ResourceIdentifierObject resourceIdentifierObject in data.ManyValue!) { using IDisposable _ = state.Position.PushArrayIndex(arrayIndex); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs index 8927087cc5..252c0fe2a6 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterPosition.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -36,7 +34,7 @@ public IDisposable PushArrayIndex(int index) return _disposable; } - public string ToSourcePointer() + public string? ToSourcePointer() { if (!_stack.Any()) { diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs index 1e59c68f2c..b333b61140 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/RequestAdapterState.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.AtomicOperations; @@ -14,13 +12,13 @@ namespace JsonApiDotNetCore.Serialization.Request.Adapters [PublicAPI] public sealed class RequestAdapterState : IDisposable { - private readonly IDisposable _backupRequestState; + private readonly IDisposable? _backupRequestState; public IJsonApiRequest InjectableRequest { get; } public ITargetedFields InjectableTargetedFields { get; } - public JsonApiRequest WritableRequest { get; set; } - public TargetedFields WritableTargetedFields { get; set; } + public JsonApiRequest? WritableRequest { get; set; } + public TargetedFields? WritableTargetedFields { get; set; } public RequestAdapterPosition Position { get; } = new(); public IJsonApiRequest Request => WritableRequest ?? InjectableRequest; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs index 9babd21699..b81e0a22dc 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; @@ -45,7 +43,7 @@ public IIdentifiable Convert(SingleOrManyData data, ResourceIden protected virtual (IIdentifiable resource, ResourceType resourceType) ConvertResourceObject(SingleOrManyData data, ResourceIdentityRequirements requirements, RequestAdapterState state) { - return _resourceObjectAdapter.Convert(data.SingleValue, requirements, state); + return _resourceObjectAdapter.Convert(data.SingleValue!, requirements, state); } } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs index d7ab594356..5ebdb6f3cd 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceDataInOperationsRequestAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; @@ -21,7 +19,7 @@ protected override (IIdentifiable resource, ResourceType resourceType) ConvertRe (IIdentifiable resource, ResourceType resourceType) = base.ConvertResourceObject(data, requirements, state); - state.WritableRequest.PrimaryResourceType = resourceType; + state.WritableRequest!.PrimaryResourceType = resourceType; state.WritableRequest.PrimaryId = resource.StringId; return (resource, resourceType); diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs index 268fcf15eb..fc5cbfc3e4 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentifierObjectAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs index 57f2312369..0310ca5c08 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityAdapter.cs @@ -1,6 +1,5 @@ -#nullable disable - using System; +using System.Diagnostics.CodeAnalysis; using System.Net; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; @@ -42,10 +41,10 @@ protected ResourceIdentityAdapter(IResourceGraph resourceGraph, IResourceFactory private ResourceType ResolveType(IResourceIdentity identity, ResourceIdentityRequirements requirements, RequestAdapterState state) { - AssertHasType(identity, state); + AssertHasType(identity.Type, state); using IDisposable _ = state.Position.PushElement("type"); - ResourceType resourceType = _resourceGraph.FindResourceType(identity.Type); + ResourceType? resourceType = _resourceGraph.FindResourceType(identity.Type); AssertIsKnownResourceType(resourceType, identity.Type, state); AssertIsCompatibleResourceType(resourceType, requirements.ResourceType, requirements.RelationshipName, state); @@ -53,15 +52,15 @@ private ResourceType ResolveType(IResourceIdentity identity, ResourceIdentityReq return resourceType; } - private static void AssertHasType(IResourceIdentity identity, RequestAdapterState state) + private static void AssertHasType([NotNull] string? identityType, RequestAdapterState state) { - if (identity.Type == null) + if (identityType == null) { throw new ModelConversionException(state.Position, "The 'type' element is required.", null); } } - private static void AssertIsKnownResourceType(ResourceType resourceType, string typeName, RequestAdapterState state) + private static void AssertIsKnownResourceType([NotNull] ResourceType? resourceType, string typeName, RequestAdapterState state) { if (resourceType == null) { @@ -69,7 +68,7 @@ private static void AssertIsKnownResourceType(ResourceType resourceType, string } } - private static void AssertIsCompatibleResourceType(ResourceType actual, ResourceType expected, string relationshipName, RequestAdapterState state) + private static void AssertIsCompatibleResourceType(ResourceType actual, ResourceType? expected, string? relationshipName, RequestAdapterState state) { if (expected != null && !expected.ClrType.IsAssignableFrom(actual.ClrType)) { @@ -128,7 +127,7 @@ private static void AssertNoIdWithLid(IResourceIdentity identity, RequestAdapter private static void AssertHasIdOrLid(IResourceIdentity identity, ResourceIdentityRequirements requirements, RequestAdapterState state) { - string message = null; + string? message = null; if (requirements.IdValue != null && identity.Id == null) { @@ -158,7 +157,7 @@ private static void AssertHasNoId(IResourceIdentity identity, RequestAdapterStat } } - private static void AssertSameIdValue(IResourceIdentity identity, string expected, RequestAdapterState state) + private static void AssertSameIdValue(IResourceIdentity identity, string? expected, RequestAdapterState state) { if (expected != null && identity.Id != expected) { @@ -169,7 +168,7 @@ private static void AssertSameIdValue(IResourceIdentity identity, string expecte } } - private static void AssertSameLidValue(IResourceIdentity identity, string expected, RequestAdapterState state) + private static void AssertSameLidValue(IResourceIdentity identity, string? expected, RequestAdapterState state) { if (expected != null && identity.Lid != expected) { @@ -196,7 +195,7 @@ private void AssignStringId(IResourceIdentity identity, IIdentifiable resource, } } - protected static void AssertIsKnownRelationship(RelationshipAttribute relationship, string relationshipName, ResourceType resourceType, + protected static void AssertIsKnownRelationship([NotNull] RelationshipAttribute? relationship, string relationshipName, ResourceType resourceType, RequestAdapterState state) { if (relationship == null) diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs index 58d4b53e0e..0483723abd 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceIdentityRequirements.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Serialization.Objects; @@ -15,7 +13,7 @@ public sealed class ResourceIdentityRequirements /// /// When not null, indicates that the "type" element must be compatible with the specified resource type. /// - public ResourceType ResourceType { get; init; } + public ResourceType? ResourceType { get; init; } /// /// When not null, indicates the presence or absence of the "id" element. @@ -25,16 +23,16 @@ public sealed class ResourceIdentityRequirements /// /// When not null, indicates what the value of the "id" element must be. /// - public string IdValue { get; init; } + public string? IdValue { get; init; } /// /// When not null, indicates what the value of the "lid" element must be. /// - public string LidValue { get; init; } + public string? LidValue { get; init; } /// /// When not null, indicates the name of the relationship to use in error messages. /// - public string RelationshipName { get; init; } + public string? RelationshipName { get; init; } } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs index 07cb32659c..ef9ba58cba 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/Adapters/ResourceObjectAdapter.cs @@ -1,8 +1,6 @@ -#nullable disable - using System; using System.Collections.Generic; -using JetBrains.Annotations; +using System.Diagnostics.CodeAnalysis; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Middleware; using JsonApiDotNetCore.Resources; @@ -44,21 +42,22 @@ public ResourceObjectAdapter(IResourceGraph resourceGraph, IResourceFactory reso return (resource, resourceType); } - private void ConvertAttributes(IDictionary resourceObjectAttributes, IIdentifiable resource, ResourceType resourceType, + private void ConvertAttributes(IDictionary? resourceObjectAttributes, IIdentifiable resource, ResourceType resourceType, RequestAdapterState state) { using IDisposable _ = state.Position.PushElement("attributes"); - foreach ((string attributeName, object attributeValue) in resourceObjectAttributes.EmptyIfNull()) + foreach ((string attributeName, object? attributeValue) in resourceObjectAttributes.EmptyIfNull()) { ConvertAttribute(resource, attributeName, attributeValue, resourceType, state); } } - private void ConvertAttribute(IIdentifiable resource, string attributeName, object attributeValue, ResourceType resourceType, RequestAdapterState state) + private void ConvertAttribute(IIdentifiable resource, string attributeName, object? attributeValue, ResourceType resourceType, + RequestAdapterState state) { using IDisposable _ = state.Position.PushElement(attributeName); - AttrAttribute attr = resourceType.FindAttributeByPublicName(attributeName); + AttrAttribute? attr = resourceType.FindAttributeByPublicName(attributeName); if (attr == null && _options.AllowUnknownFieldsInRequestBody) { @@ -71,12 +70,11 @@ private void ConvertAttribute(IIdentifiable resource, string attributeName, obje AssertNoBlockedChange(attr, resourceType, state); AssertNotReadOnly(attr, resourceType, state); - attr!.SetValue(resource, attributeValue); - state.WritableTargetedFields.Attributes.Add(attr); + attr.SetValue(resource, attributeValue); + state.WritableTargetedFields!.Attributes.Add(attr); } - [AssertionMethod] - private static void AssertIsKnownAttribute(AttrAttribute attr, string attributeName, ResourceType resourceType, RequestAdapterState state) + private static void AssertIsKnownAttribute([NotNull] AttrAttribute? attr, string attributeName, ResourceType resourceType, RequestAdapterState state) { if (attr == null) { @@ -85,7 +83,7 @@ private static void AssertIsKnownAttribute(AttrAttribute attr, string attributeN } } - private static void AssertNoInvalidAttribute(object attributeValue, RequestAdapterState state) + private static void AssertNoInvalidAttribute(object? attributeValue, RequestAdapterState state) { if (attributeValue is JsonInvalidAttributeInfo info) { @@ -128,14 +126,15 @@ private static void AssertNotReadOnly(AttrAttribute attr, ResourceType resourceT } } - private void ConvertRelationships(IDictionary resourceObjectRelationships, IIdentifiable resource, + private void ConvertRelationships(IDictionary? resourceObjectRelationships, IIdentifiable resource, ResourceType resourceType, RequestAdapterState state) { using IDisposable _ = state.Position.PushElement("relationships"); - foreach ((string relationshipName, RelationshipObject relationshipObject) in resourceObjectRelationships.EmptyIfNull()) + foreach ((string relationshipName, RelationshipObject? relationshipObject) in resourceObjectRelationships.EmptyIfNull()) { - ConvertRelationship(relationshipName, relationshipObject.Data, resource, resourceType, state); + // [TODO-NRT]: Add tests for downstream failure on `null` relationship value. + ConvertRelationship(relationshipName, relationshipObject?.Data ?? default, resource, resourceType, state); } } @@ -143,7 +142,7 @@ private void ConvertRelationship(string relationshipName, SingleOrManyData /// Reads an object from the request body. /// - Task ReadAsync(HttpRequest httpRequest); + Task ReadAsync(HttpRequest httpRequest); } } diff --git a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs index 7a45cc1895..ef6b42f89e 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Net; using System.Text; @@ -38,7 +36,7 @@ public JsonApiReader(IJsonApiOptions options, IDocumentAdapter documentAdapter, } /// - public async Task ReadAsync(HttpRequest httpRequest) + public async Task ReadAsync(HttpRequest httpRequest) { ArgumentGuard.NotNull(httpRequest, nameof(httpRequest)); @@ -57,7 +55,7 @@ private static async Task ReceiveRequestBodyAsync(HttpRequest httpReques return await reader.ReadToEndAsync(); } - private object GetModel(string requestBody) + private object? GetModel(string requestBody) { AssertHasRequestBody(requestBody); @@ -83,7 +81,15 @@ private Document DeserializeDocument(string requestBody) using IDisposable _ = CodeTimingSessionManager.Current.Measure("JsonSerializer.Deserialize", MeasurementSettings.ExcludeJsonSerializationInPercentages); - return JsonSerializer.Deserialize(requestBody, _options.SerializerReadOptions); + Document? document = JsonSerializer.Deserialize(requestBody, _options.SerializerReadOptions); + + if (document == null) + { + // [TODO-NRT]: Add tests for incoming body `null`. + throw new InvalidRequestBodyException(_options.IncludeRequestBodyInErrors ? requestBody : null, null, null, null); + } + + return document; } catch (JsonException exception) { @@ -94,7 +100,7 @@ private Document DeserializeDocument(string requestBody) } } - private object ConvertDocumentToModel(Document document, string requestBody) + private object? ConvertDocumentToModel(Document document, string requestBody) { try { diff --git a/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs b/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs index e562ffbe01..7080da1c9d 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/JsonInvalidAttributeInfo.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json; @@ -14,10 +12,10 @@ internal sealed class JsonInvalidAttributeInfo public string AttributeName { get; } public Type AttributeType { get; } - public string JsonValue { get; } + public string? JsonValue { get; } public JsonValueKind JsonType { get; } - public JsonInvalidAttributeInfo(string attributeName, Type attributeType, string jsonValue, JsonValueKind jsonType) + public JsonInvalidAttributeInfo(string attributeName, Type attributeType, string? jsonValue, JsonValueKind jsonType) { ArgumentGuard.NotNullNorEmpty(attributeName, nameof(attributeName)); ArgumentGuard.NotNull(attributeType, nameof(attributeType)); diff --git a/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs b/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs index 2c0fbb6eaf..70be3f7366 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/ModelConversionException.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Net; using JetBrains.Annotations; @@ -13,12 +11,12 @@ namespace JsonApiDotNetCore.Serialization.Request [PublicAPI] public sealed class ModelConversionException : Exception { - public string GenericMessage { get; } - public string SpecificMessage { get; } + public string? GenericMessage { get; } + public string? SpecificMessage { get; } public HttpStatusCode? StatusCode { get; } - public string SourcePointer { get; } + public string? SourcePointer { get; } - public ModelConversionException(RequestAdapterPosition position, string genericMessage, string specificMessage, HttpStatusCode? statusCode = null) + public ModelConversionException(RequestAdapterPosition position, string? genericMessage, string? specificMessage, HttpStatusCode? statusCode = null) : base(genericMessage) { ArgumentGuard.NotNull(position, nameof(position)); diff --git a/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs index dcdce0bbb8..f2a78adb65 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ETagGenerator.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.Net.Http.Headers; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs b/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs index 809f984741..a787901494 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/EmptyResponseMeta.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; namespace JsonApiDotNetCore.Serialization.Response @@ -8,7 +6,7 @@ namespace JsonApiDotNetCore.Serialization.Response public sealed class EmptyResponseMeta : IResponseMeta { /// - public IReadOnlyDictionary GetMeta() + public IReadOnlyDictionary? GetMeta() { return null; } diff --git a/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs index c0a75b4220..9835bf5de3 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/FingerprintGenerator.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs index 7a195121b5..5fc5070129 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IETagGenerator.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.Net.Http.Headers; namespace JsonApiDotNetCore.Serialization.Response diff --git a/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs b/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs index ae5da11f20..7b18e7db19 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IFingerprintGenerator.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; diff --git a/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs b/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs index 727faf6dd2..8c904cf032 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IJsonApiWriter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading.Tasks; using JetBrains.Annotations; using Microsoft.AspNetCore.Http; @@ -15,6 +13,6 @@ public interface IJsonApiWriter /// /// Writes an object to the response body. /// - Task WriteAsync(object model, HttpContext httpContext); + Task WriteAsync(object? model, HttpContext httpContext); } } diff --git a/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs index 6f9336aed5..db16a774dd 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ILinkBuilder.cs @@ -1,7 +1,4 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; -using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; using JsonApiDotNetCore.Serialization.Objects; @@ -15,16 +12,16 @@ public interface ILinkBuilder /// /// Builds the links object that is included in the top-level of the document. /// - TopLevelLinks GetTopLevelLinks(); + TopLevelLinks? GetTopLevelLinks(); /// /// Builds the links object for a returned resource (primary or included). /// - ResourceLinks GetResourceLinks(ResourceType resourceType, string id); + ResourceLinks? GetResourceLinks(ResourceType resourceType, string id); /// /// Builds the links object for a relationship inside a returned resource. /// - RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, IIdentifiable leftResource); + RelationshipLinks? GetRelationshipLinks(RelationshipAttribute relationship, string leftId); } } diff --git a/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs index b82a8f8875..285f0df550 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IMetaBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; @@ -15,11 +13,11 @@ public interface IMetaBuilder /// Merges the specified dictionary with existing key/value pairs. In the event of a key collision, the value from the specified dictionary will /// overwrite the existing one. /// - void Add(IReadOnlyDictionary values); + void Add(IReadOnlyDictionary values); /// /// Builds the top-level meta data object. /// - IDictionary Build(); + IDictionary? Build(); } } diff --git a/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs b/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs index 95c6b9ac20..83596f9146 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IResponseMeta.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Serialization.Objects; @@ -15,6 +13,6 @@ public interface IResponseMeta /// /// Gets the global top-level JSON:API meta information to add to the response. /// - IReadOnlyDictionary GetMeta(); + IReadOnlyDictionary? GetMeta(); } } diff --git a/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs b/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs index d31af6db44..153e993b0d 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/IResponseModelAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Serialization.Objects; namespace JsonApiDotNetCore.Serialization.Response @@ -29,7 +27,7 @@ public interface IResponseModelAdapter /// /// /// - /// ]]> + /// ]]> /// /// /// @@ -44,6 +42,6 @@ public interface IResponseModelAdapter /// /// /// - Document Convert(object model); + Document Convert(object? model); } } diff --git a/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs b/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs index d978ef66c1..793a720c3a 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/JsonApiWriter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.IO; @@ -51,7 +49,7 @@ public JsonApiWriter(IJsonApiRequest request, IJsonApiOptions options, IResponse } /// - public async Task WriteAsync(object model, HttpContext httpContext) + public async Task WriteAsync(object? model, HttpContext httpContext) { ArgumentGuard.NotNull(httpContext, nameof(httpContext)); @@ -61,11 +59,11 @@ public async Task WriteAsync(object model, HttpContext httpContext) return; } - string responseBody = GetResponseBody(model, httpContext); + string? responseBody = GetResponseBody(model, httpContext); if (httpContext.Request.Method == HttpMethod.Head.Method) { - httpContext.Response.GetTypedHeaders().ContentLength = Encoding.UTF8.GetByteCount(responseBody); + httpContext.Response.GetTypedHeaders().ContentLength = responseBody == null ? 0 : Encoding.UTF8.GetByteCount(responseBody); return; } @@ -80,7 +78,7 @@ private static bool CanWriteBody(HttpStatusCode statusCode) return statusCode is not HttpStatusCode.NoContent and not HttpStatusCode.ResetContent and not HttpStatusCode.NotModified; } - private string GetResponseBody(object model, HttpContext httpContext) + private string? GetResponseBody(object? model, HttpContext httpContext) { using IDisposable _ = CodeTimingSessionManager.Current.Measure("Write response body"); @@ -122,7 +120,7 @@ private static bool IsSuccessStatusCode(HttpStatusCode statusCode) return new HttpResponseMessage(statusCode).IsSuccessStatusCode; } - private string RenderModel(object model) + private string RenderModel(object? model) { Document document = _responseModelAdapter.Convert(model); return SerializeDocument(document); @@ -145,12 +143,9 @@ private bool SetETagResponseHeader(HttpRequest request, HttpResponse response, s string url = request.GetEncodedUrl(); EntityTagHeaderValue responseETag = _eTagGenerator.Generate(url, responseContent); - if (responseETag != null) - { - response.Headers.Add(HeaderNames.ETag, responseETag.ToString()); + response.Headers.Add(HeaderNames.ETag, responseETag.ToString()); - return RequestContainsMatchingETag(request.Headers, responseETag); - } + return RequestContainsMatchingETag(request.Headers, responseETag); } return false; @@ -159,7 +154,7 @@ private bool SetETagResponseHeader(HttpRequest request, HttpResponse response, s private static bool RequestContainsMatchingETag(IHeaderDictionary requestHeaders, EntityTagHeaderValue responseETag) { if (requestHeaders.Keys.Contains(HeaderNames.IfNoneMatch) && - EntityTagHeaderValue.TryParseList(requestHeaders[HeaderNames.IfNoneMatch], out IList requestETags)) + EntityTagHeaderValue.TryParseList(requestHeaders[HeaderNames.IfNoneMatch], out IList? requestETags)) { foreach (EntityTagHeaderValue requestETag in requestETags) { @@ -173,7 +168,7 @@ private static bool RequestContainsMatchingETag(IHeaderDictionary requestHeaders return false; } - private async Task SendResponseBodyAsync(HttpResponse httpResponse, string responseBody) + private async Task SendResponseBodyAsync(HttpResponse httpResponse, string? responseBody) { if (!string.IsNullOrEmpty(responseBody)) { diff --git a/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs index 2536ae390e..e810552d18 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/LinkBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -41,6 +39,19 @@ public class LinkBuilder : ILinkBuilder private readonly LinkGenerator _linkGenerator; private readonly IControllerResourceMapping _controllerResourceMapping; + private HttpContext HttpContext + { + get + { + if (_httpContextAccessor.HttpContext == null) + { + throw new InvalidOperationException("An active HTTP request is required."); + } + + return _httpContextAccessor.HttpContext; + } + } + public LinkBuilder(IJsonApiOptions options, IJsonApiRequest request, IPaginationContext paginationContext, IHttpContextAccessor httpContextAccessor, LinkGenerator linkGenerator, IControllerResourceMapping controllerResourceMapping) { @@ -64,10 +75,10 @@ private static string NoAsyncSuffix(string actionName) } /// - public TopLevelLinks GetTopLevelLinks() + public TopLevelLinks? GetTopLevelLinks() { var links = new TopLevelLinks(); - ResourceType resourceType = _request.SecondaryResourceType ?? _request.PrimaryResourceType; + ResourceType? resourceType = _request.SecondaryResourceType ?? _request.PrimaryResourceType; if (ShouldIncludeTopLevelLink(LinkTypes.Self, resourceType)) { @@ -76,12 +87,12 @@ public TopLevelLinks GetTopLevelLinks() if (_request.Kind == EndpointKind.Relationship && _request.Relationship != null && ShouldIncludeTopLevelLink(LinkTypes.Related, resourceType)) { - links.Related = GetLinkForRelationshipRelated(_request.PrimaryId, _request.Relationship); + links.Related = GetLinkForRelationshipRelated(_request.PrimaryId!, _request.Relationship); } if (_request.IsCollection && _paginationContext.PageSize != null && ShouldIncludeTopLevelLink(LinkTypes.Paging, resourceType)) { - SetPaginationInTopLevelLinks(resourceType, links); + SetPaginationInTopLevelLinks(resourceType!, links); } return links.HasValue() ? links : null; @@ -91,7 +102,7 @@ public TopLevelLinks GetTopLevelLinks() /// Checks if the top-level should be added by first checking configuration on the , and if not /// configured, by checking with the global configuration in . /// - private bool ShouldIncludeTopLevelLink(LinkTypes linkType, ResourceType resourceType) + private bool ShouldIncludeTopLevelLink(LinkTypes linkType, ResourceType? resourceType) { if (resourceType != null && resourceType.TopLevelLinks != LinkTypes.NotConfigured) { @@ -103,14 +114,12 @@ private bool ShouldIncludeTopLevelLink(LinkTypes linkType, ResourceType resource private string GetLinkForTopLevelSelf() { - return _options.UseRelativeLinks - ? _httpContextAccessor.HttpContext!.Request.GetEncodedPathAndQuery() - : _httpContextAccessor.HttpContext!.Request.GetEncodedUrl(); + return _options.UseRelativeLinks ? HttpContext.Request.GetEncodedPathAndQuery() : HttpContext.Request.GetEncodedUrl(); } private void SetPaginationInTopLevelLinks(ResourceType resourceType, TopLevelLinks links) { - string pageSizeValue = CalculatePageSizeValue(_paginationContext.PageSize, resourceType); + string? pageSizeValue = CalculatePageSizeValue(_paginationContext.PageSize, resourceType); links.First = GetLinkForPagination(1, pageSizeValue); @@ -133,15 +142,15 @@ private void SetPaginationInTopLevelLinks(ResourceType resourceType, TopLevelLin } } - private string CalculatePageSizeValue(PageSize topPageSize, ResourceType resourceType) + private string? CalculatePageSizeValue(PageSize? topPageSize, ResourceType resourceType) { - string pageSizeParameterValue = _httpContextAccessor.HttpContext!.Request.Query[PageSizeParameterName]; + string pageSizeParameterValue = HttpContext.Request.Query[PageSizeParameterName]; - PageSize newTopPageSize = Equals(topPageSize, _options.DefaultPageSize) ? null : topPageSize; + PageSize? newTopPageSize = Equals(topPageSize, _options.DefaultPageSize) ? null : topPageSize; return ChangeTopPageSize(pageSizeParameterValue, newTopPageSize, resourceType); } - private string ChangeTopPageSize(string pageSizeParameterValue, PageSize topPageSize, ResourceType resourceType) + private string? ChangeTopPageSize(string pageSizeParameterValue, PageSize? topPageSize, ResourceType resourceType) { IImmutableList elements = ParsePageSizeExpression(pageSizeParameterValue, resourceType); int elementInTopScopeIndex = elements.FindIndex(expression => expression.Scope == null); @@ -166,7 +175,7 @@ private string ChangeTopPageSize(string pageSizeParameterValue, PageSize topPage return parameterValue == string.Empty ? null : parameterValue; } - private IImmutableList ParsePageSizeExpression(string pageSizeParameterValue, ResourceType resourceType) + private IImmutableList ParsePageSizeExpression(string? pageSizeParameterValue, ResourceType resourceType) { if (pageSizeParameterValue == null) { @@ -179,11 +188,11 @@ private IImmutableList ParsePageSiz return paginationExpression.Elements; } - private string GetLinkForPagination(int pageOffset, string pageSizeValue) + private string GetLinkForPagination(int pageOffset, string? pageSizeValue) { string queryStringValue = GetQueryStringInPaginationLink(pageOffset, pageSizeValue); - var builder = new UriBuilder(_httpContextAccessor.HttpContext!.Request.GetEncodedUrl()) + var builder = new UriBuilder(HttpContext.Request.GetEncodedUrl()) { Query = queryStringValue }; @@ -192,10 +201,9 @@ private string GetLinkForPagination(int pageOffset, string pageSizeValue) return builder.Uri.GetComponents(components, UriFormat.SafeUnescaped); } - private string GetQueryStringInPaginationLink(int pageOffset, string pageSizeValue) + private string GetQueryStringInPaginationLink(int pageOffset, string? pageSizeValue) { - IDictionary parameters = - _httpContextAccessor.HttpContext!.Request.Query.ToDictionary(pair => pair.Key, pair => pair.Value.ToString()); + IDictionary parameters = HttpContext.Request.Query.ToDictionary(pair => pair.Key, pair => (string?)pair.Value.ToString()); if (pageSizeValue == null) { @@ -215,7 +223,7 @@ private string GetQueryStringInPaginationLink(int pageOffset, string pageSizeVal parameters[PageNumberParameterName] = pageOffset.ToString(); } - string queryStringValue = QueryString.Create(parameters).Value; + string queryStringValue = QueryString.Create(parameters).Value ?? string.Empty; return DecodeSpecialCharacters(queryStringValue); } @@ -225,7 +233,7 @@ private static string DecodeSpecialCharacters(string uri) } /// - public ResourceLinks GetResourceLinks(ResourceType resourceType, string id) + public ResourceLinks? GetResourceLinks(ResourceType resourceType, string id) { ArgumentGuard.NotNull(resourceType, nameof(resourceType)); ArgumentGuard.NotNullNorEmpty(id, nameof(id)); @@ -256,28 +264,28 @@ private bool ShouldIncludeResourceLink(LinkTypes linkType, ResourceType resource private string GetLinkForResourceSelf(ResourceType resourceType, string resourceId) { - string controllerName = _controllerResourceMapping.GetControllerNameForResourceType(resourceType); - IDictionary routeValues = GetRouteValues(resourceId, null); + string? controllerName = _controllerResourceMapping.GetControllerNameForResourceType(resourceType); + IDictionary routeValues = GetRouteValues(resourceId, null); return RenderLinkForAction(controllerName, GetPrimaryControllerActionName, routeValues); } /// - public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship, IIdentifiable leftResource) + public RelationshipLinks? GetRelationshipLinks(RelationshipAttribute relationship, string leftId) { ArgumentGuard.NotNull(relationship, nameof(relationship)); - ArgumentGuard.NotNull(leftResource, nameof(leftResource)); + ArgumentGuard.NotNullNorEmpty(leftId, nameof(leftId)); var links = new RelationshipLinks(); if (ShouldIncludeRelationshipLink(LinkTypes.Self, relationship)) { - links.Self = GetLinkForRelationshipSelf(leftResource.StringId, relationship); + links.Self = GetLinkForRelationshipSelf(leftId, relationship); } if (ShouldIncludeRelationshipLink(LinkTypes.Related, relationship)) { - links.Related = GetLinkForRelationshipRelated(leftResource.StringId, relationship); + links.Related = GetLinkForRelationshipRelated(leftId, relationship); } return links.HasValue() ? links : null; @@ -285,26 +293,26 @@ public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship private string GetLinkForRelationshipSelf(string leftId, RelationshipAttribute relationship) { - string controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); - IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); + string? controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); + IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); return RenderLinkForAction(controllerName, GetRelationshipControllerActionName, routeValues); } private string GetLinkForRelationshipRelated(string leftId, RelationshipAttribute relationship) { - string controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); - IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); + string? controllerName = _controllerResourceMapping.GetControllerNameForResourceType(relationship.LeftType); + IDictionary routeValues = GetRouteValues(leftId, relationship.PublicName); return RenderLinkForAction(controllerName, GetSecondaryControllerActionName, routeValues); } - private IDictionary GetRouteValues(string primaryId, string relationshipName) + private IDictionary GetRouteValues(string primaryId, string? relationshipName) { // By default, we copy all route parameters from the *current* endpoint, which helps in case all endpoints have the same // set of non-standard parameters. There is no way we can know which non-standard parameters a *different* endpoint needs, // so users must override RenderLinkForAction to supply them, if applicable. - RouteValueDictionary routeValues = _httpContextAccessor.HttpContext!.Request.RouteValues; + RouteValueDictionary routeValues = HttpContext.Request.RouteValues; routeValues["id"] = primaryId; routeValues["relationshipName"] = relationshipName; @@ -312,7 +320,7 @@ private IDictionary GetRouteValues(string primaryId, string rela return routeValues; } - protected virtual string RenderLinkForAction(string controllerName, string actionName, IDictionary routeValues) + protected virtual string RenderLinkForAction(string? controllerName, string actionName, IDictionary routeValues) { return _options.UseRelativeLinks ? _linkGenerator.GetPathByAction(_httpContextAccessor.HttpContext, actionName, controllerName, routeValues) diff --git a/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs b/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs index 924d1d402a..ef75f6472a 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/MetaBuilder.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; @@ -16,7 +14,7 @@ public sealed class MetaBuilder : IMetaBuilder private readonly IJsonApiOptions _options; private readonly IResponseMeta _responseMeta; - private Dictionary _meta = new(); + private Dictionary _meta = new(); public MetaBuilder(IPaginationContext paginationContext, IJsonApiOptions options, IResponseMeta responseMeta) { @@ -30,7 +28,7 @@ public MetaBuilder(IPaginationContext paginationContext, IJsonApiOptions options } /// - public void Add(IReadOnlyDictionary values) + public void Add(IReadOnlyDictionary values) { ArgumentGuard.NotNull(values, nameof(values)); @@ -38,7 +36,7 @@ public void Add(IReadOnlyDictionary values) } /// - public IDictionary Build() + public IDictionary? Build() { if (_paginationContext.TotalResourceCount != null) { @@ -51,7 +49,7 @@ public IDictionary Build() _meta.Add(key, _paginationContext.TotalResourceCount); } - IReadOnlyDictionary extraMeta = _responseMeta.GetMeta(); + IReadOnlyDictionary? extraMeta = _responseMeta.GetMeta(); if (extraMeta != null) { diff --git a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs index 0cc6c6fb78..49142056e0 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Linq; @@ -24,10 +22,10 @@ internal sealed class ResourceObjectTreeNode : IEquatable _directChildren; + private List? _directChildren; // Related resource objects per relationship. These are emitted in 'included'. - private Dictionary> _childrenByRelationship; + private Dictionary>? _childrenByRelationship; private bool IsTreeRoot => RootType.Equals(Type); @@ -81,6 +79,11 @@ public void AttachRelationshipChild(RelationshipAttribute relationship, Resource ArgumentGuard.NotNull(relationship, nameof(relationship)); ArgumentGuard.NotNull(rightNode, nameof(rightNode)); + if (_childrenByRelationship == null) + { + throw new InvalidOperationException("Call EnsureHasRelationship() first."); + } + HashSet rightNodes = _childrenByRelationship[relationship]; rightNodes.Add(rightNode); } @@ -132,7 +135,7 @@ private static void VisitRelationshipChildrenInSubtree(ResourceObjectTreeNode tr { foreach (RelationshipAttribute relationship in treeNode.Type.Relationships) { - if (treeNode._childrenByRelationship.TryGetValue(relationship, out HashSet rightNodes)) + if (treeNode._childrenByRelationship.TryGetValue(relationship, out HashSet? rightNodes)) { VisitRelationshipChildInSubtree(rightNodes, visited); } @@ -148,9 +151,9 @@ private static void VisitRelationshipChildInSubtree(HashSet GetRightNodesInRelationship(RelationshipAttribute relationship) + public ISet? GetRightNodesInRelationship(RelationshipAttribute relationship) { - return _childrenByRelationship != null && _childrenByRelationship.TryGetValue(relationship, out HashSet rightNodes) + return _childrenByRelationship != null && _childrenByRelationship.TryGetValue(relationship, out HashSet? rightNodes) ? rightNodes : null; } @@ -197,7 +200,7 @@ private void AssertIsTreeRoot() } } - public bool Equals(ResourceObjectTreeNode other) + public bool Equals(ResourceObjectTreeNode? other) { if (ReferenceEquals(null, other)) { @@ -212,7 +215,7 @@ public bool Equals(ResourceObjectTreeNode other) return ResourceObjectComparer.Instance.Equals(ResourceObject, other.ResourceObject); } - public override bool Equals(object other) + public override bool Equals(object? other) { return Equals(other as ResourceObjectTreeNode); } @@ -241,8 +244,8 @@ public override string ToString() private sealed class EmptyResource : IIdentifiable { - public string StringId { get; set; } - public string LocalId { get; set; } + public string? StringId { get; set; } + public string? LocalId { get; set; } } private sealed class ResourceObjectComparer : IEqualityComparer @@ -253,7 +256,7 @@ private ResourceObjectComparer() { } - public bool Equals(ResourceObject x, ResourceObject y) + public bool Equals(ResourceObject? x, ResourceObject? y) { if (ReferenceEquals(x, y)) { diff --git a/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs b/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs index 755ee2fb67..40dd7c045c 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ResponseModelAdapter.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -61,21 +59,22 @@ public ResponseModelAdapter(IJsonApiRequest request, IJsonApiOptions options, IL } /// - public Document Convert(object model) + public Document Convert(object? model) { _sparseFieldSetCache.Reset(); _resourceToTreeNodeCache.Clear(); var document = new Document(); - IncludeExpression include = _evaluatedIncludeCache.Get(); + IncludeExpression? include = _evaluatedIncludeCache.Get(); IImmutableSet includeElements = include?.Elements ?? ImmutableHashSet.Empty; var rootNode = ResourceObjectTreeNode.CreateRoot(); - ResourceType resourceType = _request.SecondaryResourceType ?? _request.PrimaryResourceType; if (model is IEnumerable resources) { + ResourceType resourceType = (_request.SecondaryResourceType ?? _request.PrimaryResourceType)!; + foreach (IIdentifiable resource in resources) { TraverseResource(resource, resourceType, _request.Kind, includeElements, rootNode, null); @@ -88,6 +87,8 @@ public Document Convert(object model) } else if (model is IIdentifiable resource) { + ResourceType resourceType = (_request.SecondaryResourceType ?? _request.PrimaryResourceType)!; + TraverseResource(resource, resourceType, _request.Kind, includeElements, rootNode, null); PopulateRelationshipsInTree(rootNode, _request.Kind); @@ -98,7 +99,7 @@ public Document Convert(object model) { document.Data = new SingleOrManyData(null); } - else if (model is IEnumerable operations) + else if (model is IEnumerable operations) { using var _ = new RevertRequestStateOnDispose(_request, null); document.Results = operations.Select(operation => ConvertOperation(operation, includeElements)).ToList(); @@ -124,15 +125,15 @@ public Document Convert(object model) return document; } - protected virtual AtomicResultObject ConvertOperation(OperationContainer operation, IImmutableSet includeElements) + protected virtual AtomicResultObject ConvertOperation(OperationContainer? operation, IImmutableSet includeElements) { - ResourceObject resourceObject = null; + ResourceObject? resourceObject = null; if (operation != null) { _request.CopyFrom(operation.Request); - ResourceType resourceType = operation.Request.SecondaryResourceType ?? operation.Request.PrimaryResourceType; + ResourceType resourceType = (operation.Request.SecondaryResourceType ?? operation.Request.PrimaryResourceType)!; var rootNode = ResourceObjectTreeNode.CreateRoot(); TraverseResource(operation.Resource, resourceType, operation.Request.Kind, includeElements, rootNode, null); @@ -151,7 +152,7 @@ protected virtual AtomicResultObject ConvertOperation(OperationContainer operati } private void TraverseResource(IIdentifiable resource, ResourceType type, EndpointKind kind, IImmutableSet includeElements, - ResourceObjectTreeNode parentTreeNode, RelationshipAttribute parentRelationship) + ResourceObjectTreeNode parentTreeNode, RelationshipAttribute? parentRelationship) { ResourceObjectTreeNode treeNode = GetOrCreateTreeNode(resource, type, kind); @@ -172,7 +173,7 @@ private void TraverseResource(IIdentifiable resource, ResourceType type, Endpoin private ResourceObjectTreeNode GetOrCreateTreeNode(IIdentifiable resource, ResourceType type, EndpointKind kind) { - if (!_resourceToTreeNodeCache.TryGetValue(resource, out ResourceObjectTreeNode treeNode)) + if (!_resourceToTreeNodeCache.TryGetValue(resource, out ResourceObjectTreeNode? treeNode)) { ResourceObject resourceObject = ConvertResource(resource, type, kind); treeNode = new ResourceObjectTreeNode(resource, type, resourceObject); @@ -203,17 +204,17 @@ protected virtual ResourceObject ConvertResource(IIdentifiable resource, Resourc IImmutableSet fieldSet = _sparseFieldSetCache.GetSparseFieldSetForSerializer(type); resourceObject.Attributes = ConvertAttributes(resource, type, fieldSet); - resourceObject.Links = _linkBuilder.GetResourceLinks(type, resource.StringId); + resourceObject.Links = _linkBuilder.GetResourceLinks(type, resource.StringId!); resourceObject.Meta = _resourceDefinitionAccessor.GetMeta(type, resource); } return resourceObject; } - protected virtual IDictionary ConvertAttributes(IIdentifiable resource, ResourceType resourceType, + protected virtual IDictionary? ConvertAttributes(IIdentifiable resource, ResourceType resourceType, IImmutableSet fieldSet) { - var attrMap = new Dictionary(resourceType.Attributes.Count); + var attrMap = new Dictionary(resourceType.Attributes.Count); foreach (AttrAttribute attr in resourceType.Attributes) { @@ -222,7 +223,7 @@ protected virtual IDictionary ConvertAttributes(IIdentifiable re continue; } - object value = attr.GetValue(resource); + object? value = attr.GetValue(resource); if (_options.SerializerOptions.DefaultIgnoreCondition == JsonIgnoreCondition.WhenWritingNull && value == null) { @@ -253,7 +254,7 @@ private void TraverseRelationships(IIdentifiable leftResource, ResourceObjectTre private void TraverseRelationship(RelationshipAttribute relationship, IIdentifiable leftResource, ResourceObjectTreeNode leftTreeNode, IncludeElementExpression includeElement, EndpointKind kind) { - object rightValue = relationship.GetValue(leftResource); + object? rightValue = relationship.GetValue(leftResource); ICollection rightResources = CollectionConverter.ExtractResources(rightValue); leftTreeNode.EnsureHasRelationship(relationship); @@ -291,7 +292,7 @@ private void PopulateRelationshipsInResourceObject(ResourceObjectTreeNode treeNo private void PopulateRelationshipInResourceObject(ResourceObjectTreeNode treeNode, RelationshipAttribute relationship) { SingleOrManyData data = GetRelationshipData(treeNode, relationship); - RelationshipLinks links = _linkBuilder.GetRelationshipLinks(relationship, treeNode.Resource); + RelationshipLinks? links = _linkBuilder.GetRelationshipLinks(relationship, treeNode.Resource.StringId!); if (links != null || data.IsAssigned) { @@ -301,14 +302,14 @@ private void PopulateRelationshipInResourceObject(ResourceObjectTreeNode treeNod Data = data }; - treeNode.ResourceObject.Relationships ??= new Dictionary(); + treeNode.ResourceObject.Relationships ??= new Dictionary(); treeNode.ResourceObject.Relationships.Add(relationship.PublicName, relationshipObject); } } private static SingleOrManyData GetRelationshipData(ResourceObjectTreeNode treeNode, RelationshipAttribute relationship) { - ISet rightNodes = treeNode.GetRightNodesInRelationship(relationship); + ISet? rightNodes = treeNode.GetRightNodesInRelationship(relationship); if (rightNodes != null) { @@ -326,7 +327,7 @@ private static SingleOrManyData GetRelationshipData(Re return default; } - protected virtual JsonApiObject GetApiObject() + protected virtual JsonApiObject? GetApiObject() { if (!_options.IncludeJsonApiVersion) { @@ -349,7 +350,7 @@ protected virtual JsonApiObject GetApiObject() return jsonApiObject; } - private IList GetIncluded(ResourceObjectTreeNode rootNode) + private IList? GetIncluded(ResourceObjectTreeNode rootNode) { IList resourceObjects = rootNode.GetResponseIncluded(); diff --git a/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs b/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs index 80db52b92a..e93b294a22 100644 --- a/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs +++ b/src/JsonApiDotNetCore/Services/AsyncCollectionExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs b/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs index 524f8697b9..bc0ae069ff 100644 --- a/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IAddToRelationshipService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/ICreateService.cs b/src/JsonApiDotNetCore/Services/ICreateService.cs index 43fc45e4a2..56286f9fe7 100644 --- a/src/JsonApiDotNetCore/Services/ICreateService.cs +++ b/src/JsonApiDotNetCore/Services/ICreateService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -13,6 +11,6 @@ public interface ICreateService /// /// Handles a JSON:API request to create a new resource with attributes, relationships or both. /// - Task CreateAsync(TResource resource, CancellationToken cancellationToken); + Task CreateAsync(TResource resource, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Services/IDeleteService.cs b/src/JsonApiDotNetCore/Services/IDeleteService.cs index 6e920e652e..a509f10caa 100644 --- a/src/JsonApiDotNetCore/Services/IDeleteService.cs +++ b/src/JsonApiDotNetCore/Services/IDeleteService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IGetAllService.cs b/src/JsonApiDotNetCore/Services/IGetAllService.cs index 235ce108e0..a81caadd80 100644 --- a/src/JsonApiDotNetCore/Services/IGetAllService.cs +++ b/src/JsonApiDotNetCore/Services/IGetAllService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IGetByIdService.cs b/src/JsonApiDotNetCore/Services/IGetByIdService.cs index b4dcc9963f..3d942e15ce 100644 --- a/src/JsonApiDotNetCore/Services/IGetByIdService.cs +++ b/src/JsonApiDotNetCore/Services/IGetByIdService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; diff --git a/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs b/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs index 6c127a8792..d57962b72d 100644 --- a/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IGetRelationshipService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -15,6 +13,6 @@ public interface IGetRelationshipService /// /// Handles a JSON:API request to retrieve a single relationship. /// - Task GetRelationshipAsync(TId id, string relationshipName, CancellationToken cancellationToken); + Task GetRelationshipAsync(TId id, string relationshipName, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs b/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs index 2300717552..1820f435bd 100644 --- a/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs +++ b/src/JsonApiDotNetCore/Services/IGetSecondaryService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -16,6 +14,6 @@ public interface IGetSecondaryService /// Handles a JSON:API request to retrieve a single resource or a collection of resources for a secondary endpoint, such as /articles/1/author or /// /articles/1/revisions. /// - Task GetSecondaryAsync(TId id, string relationshipName, CancellationToken cancellationToken); + Task GetSecondaryAsync(TId id, string relationshipName, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs b/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs index 4062d26625..923753ba44 100644 --- a/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/IRemoveFromRelationshipService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/src/JsonApiDotNetCore/Services/IResourceCommandService.cs b/src/JsonApiDotNetCore/Services/IResourceCommandService.cs index ea407bbd52..06ad5af8ca 100644 --- a/src/JsonApiDotNetCore/Services/IResourceCommandService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceCommandService.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/IResourceQueryService.cs b/src/JsonApiDotNetCore/Services/IResourceQueryService.cs index 1d687dec54..55b210a7cc 100644 --- a/src/JsonApiDotNetCore/Services/IResourceQueryService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceQueryService.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/IResourceService.cs b/src/JsonApiDotNetCore/Services/IResourceService.cs index 6e344e9306..d6910c93b8 100644 --- a/src/JsonApiDotNetCore/Services/IResourceService.cs +++ b/src/JsonApiDotNetCore/Services/IResourceService.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Resources; namespace JsonApiDotNetCore.Services diff --git a/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs b/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs index 90812f8c11..2f6f8aefad 100644 --- a/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs +++ b/src/JsonApiDotNetCore/Services/ISetRelationshipService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -27,6 +25,6 @@ public interface ISetRelationshipService /// /// Propagates notification that request handling should be canceled. /// - Task SetRelationshipAsync(TId leftId, string relationshipName, object rightValue, CancellationToken cancellationToken); + Task SetRelationshipAsync(TId leftId, string relationshipName, object? rightValue, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Services/IUpdateService.cs b/src/JsonApiDotNetCore/Services/IUpdateService.cs index 3c4fab60a0..93bb79bca3 100644 --- a/src/JsonApiDotNetCore/Services/IUpdateService.cs +++ b/src/JsonApiDotNetCore/Services/IUpdateService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Resources; @@ -14,6 +12,6 @@ public interface IUpdateService /// Handles a JSON:API request to update the attributes and/or relationships of an existing resource. Only the values of sent attributes are replaced. /// And only the values of sent relationships are replaced. /// - Task UpdateAsync(TId id, TResource resource, CancellationToken cancellationToken); + Task UpdateAsync(TId id, TResource resource, CancellationToken cancellationToken); } } diff --git a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs index 7b5a3d25aa..5c27d7cdce 100644 --- a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs +++ b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections; using System.Collections.Generic; @@ -18,6 +16,7 @@ using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; using Microsoft.Extensions.Logging; +using SysNotNull = System.Diagnostics.CodeAnalysis.NotNullAttribute; namespace JsonApiDotNetCore.Services { @@ -66,9 +65,11 @@ public virtual async Task> GetAsync(CancellationT using IDisposable _ = CodeTimingSessionManager.Current.Measure("Service - Get resources"); + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); + if (_options.IncludeTotalResourceCount) { - FilterExpression topFilter = _queryLayerComposer.GetTopFilterFromConstraints(_request.PrimaryResourceType); + FilterExpression? topFilter = _queryLayerComposer.GetTopFilterFromConstraints(_request.PrimaryResourceType); _paginationContext.TotalResourceCount = await _repositoryAccessor.CountAsync(topFilter, cancellationToken); if (_paginationContext.TotalResourceCount == 0) @@ -102,7 +103,7 @@ public virtual async Task GetAsync(TId id, CancellationToken cancella } /// - public virtual async Task GetSecondaryAsync(TId id, string relationshipName, CancellationToken cancellationToken) + public virtual async Task GetSecondaryAsync(TId id, string relationshipName, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -112,19 +113,20 @@ public virtual async Task GetSecondaryAsync(TId id, string relationshipN using IDisposable _ = CodeTimingSessionManager.Current.Measure("Service - Get secondary resource(s)"); + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); AssertHasRelationship(_request.Relationship, relationshipName); - QueryLayer secondaryLayer = _queryLayerComposer.ComposeFromConstraints(_request.SecondaryResourceType); + QueryLayer secondaryLayer = _queryLayerComposer.ComposeFromConstraints(_request.SecondaryResourceType!); QueryLayer primaryLayer = _queryLayerComposer.WrapLayerForSecondaryEndpoint(secondaryLayer, _request.PrimaryResourceType, id, _request.Relationship); IReadOnlyCollection primaryResources = await _repositoryAccessor.GetAsync(primaryLayer, cancellationToken); - TResource primaryResource = primaryResources.SingleOrDefault(); + TResource? primaryResource = primaryResources.SingleOrDefault(); AssertPrimaryResourceExists(primaryResource); - object rightValue = _request.Relationship.GetValue(primaryResource); + object? rightValue = _request.Relationship.GetValue(primaryResource); if (rightValue is ICollection rightResources && secondaryLayer.Pagination?.PageSize?.Value == rightResources.Count) { @@ -135,7 +137,7 @@ public virtual async Task GetSecondaryAsync(TId id, string relationshipN } /// - public virtual async Task GetRelationshipAsync(TId id, string relationshipName, CancellationToken cancellationToken) + public virtual async Task GetRelationshipAsync(TId id, string relationshipName, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -147,23 +149,24 @@ public virtual async Task GetRelationshipAsync(TId id, string relationsh using IDisposable _ = CodeTimingSessionManager.Current.Measure("Service - Get relationship"); + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); AssertHasRelationship(_request.Relationship, relationshipName); - QueryLayer secondaryLayer = _queryLayerComposer.ComposeSecondaryLayerForRelationship(_request.SecondaryResourceType); + QueryLayer secondaryLayer = _queryLayerComposer.ComposeSecondaryLayerForRelationship(_request.SecondaryResourceType!); QueryLayer primaryLayer = _queryLayerComposer.WrapLayerForSecondaryEndpoint(secondaryLayer, _request.PrimaryResourceType, id, _request.Relationship); IReadOnlyCollection primaryResources = await _repositoryAccessor.GetAsync(primaryLayer, cancellationToken); - TResource primaryResource = primaryResources.SingleOrDefault(); + TResource? primaryResource = primaryResources.SingleOrDefault(); AssertPrimaryResourceExists(primaryResource); return _request.Relationship.GetValue(primaryResource); } /// - public virtual async Task CreateAsync(TResource resource, CancellationToken cancellationToken) + public virtual async Task CreateAsync(TResource resource, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -171,6 +174,7 @@ public virtual async Task CreateAsync(TResource resource, Cancellatio }); ArgumentGuard.NotNull(resource, nameof(resource)); + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); using IDisposable _ = CodeTimingSessionManager.Current.Measure("Service - Create resource"); @@ -191,12 +195,12 @@ public virtual async Task CreateAsync(TResource resource, Cancellatio { if (!Equals(resourceFromRequest.Id, default(TId))) { - TResource existingResource = + TResource? existingResource = await TryGetPrimaryResourceByIdAsync(resourceFromRequest.Id, TopFieldSelection.OnlyIdAttribute, cancellationToken); if (existingResource != null) { - throw new ResourceAlreadyExistsException(resourceFromRequest.StringId, _request.PrimaryResourceType.PublicName); + throw new ResourceAlreadyExistsException(resourceFromRequest.StringId!, _request.PrimaryResourceType.PublicName); } } @@ -224,7 +228,7 @@ protected async Task AssertResourcesToAssignInRelationshipsExistAsync(TResource foreach ((QueryLayer queryLayer, RelationshipAttribute relationship) in _queryLayerComposer.ComposeForGetTargetedSecondaryResourceIds( primaryResource)) { - object rightValue = relationship.GetValue(primaryResource); + object? rightValue = relationship.GetValue(primaryResource); ICollection rightResourceIds = _collectionConverter.ExtractResources(rightValue); IAsyncEnumerable missingResourcesInRelationship = @@ -245,14 +249,14 @@ private async IAsyncEnumerable GetMissingRightRes IReadOnlyCollection existingResources = await _repositoryAccessor.GetAsync(existingRightResourceIdsQueryLayer.ResourceType, existingRightResourceIdsQueryLayer, cancellationToken); - string[] existingResourceIds = existingResources.Select(resource => resource.StringId).ToArray(); + string[] existingResourceIds = existingResources.Select(resource => resource.StringId!).ToArray(); foreach (IIdentifiable rightResourceId in rightResourceIds) { if (!existingResourceIds.Contains(rightResourceId.StringId)) { yield return new MissingResourceInRelationship(relationship.PublicName, existingRightResourceIdsQueryLayer.ResourceType.PublicName, - rightResourceId.StringId); + rightResourceId.StringId!); } } } @@ -296,9 +300,11 @@ public virtual async Task AddToToManyRelationshipAsync(TId leftId, string relati private async Task RemoveExistingIdsFromRelationshipRightSideAsync(HasManyAttribute hasManyRelationship, TId leftId, ISet rightResourceIds, CancellationToken cancellationToken) { + AssertRelationshipInJsonApiRequestIsNotNull(_request.Relationship); + TResource leftResource = await GetForHasManyUpdateAsync(hasManyRelationship, leftId, rightResourceIds, cancellationToken); - object rightValue = _request.Relationship.GetValue(leftResource); + object? rightValue = _request.Relationship.GetValue(leftResource); ICollection existingRightResourceIds = _collectionConverter.ExtractResources(rightValue); rightResourceIds.ExceptWith(existingRightResourceIds); @@ -310,14 +316,16 @@ private async Task GetForHasManyUpdateAsync(HasManyAttribute hasManyR QueryLayer queryLayer = _queryLayerComposer.ComposeForHasMany(hasManyRelationship, leftId, rightResourceIds); IReadOnlyCollection leftResources = await _repositoryAccessor.GetAsync(queryLayer, cancellationToken); - TResource leftResource = leftResources.FirstOrDefault(); + TResource? leftResource = leftResources.FirstOrDefault(); AssertPrimaryResourceExists(leftResource); return leftResource; } - protected async Task AssertRightResourcesExistAsync(object rightValue, CancellationToken cancellationToken) + protected async Task AssertRightResourcesExistAsync(object? rightValue, CancellationToken cancellationToken) { + AssertRelationshipInJsonApiRequestIsNotNull(_request.Relationship); + ICollection rightResourceIds = _collectionConverter.ExtractResources(rightValue); if (rightResourceIds.Any()) @@ -335,7 +343,7 @@ protected async Task AssertRightResourcesExistAsync(object rightValue, Cancellat } /// - public virtual async Task UpdateAsync(TId id, TResource resource, CancellationToken cancellationToken) + public virtual async Task UpdateAsync(TId id, TResource resource, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -375,7 +383,7 @@ public virtual async Task UpdateAsync(TId id, TResource resource, Can } /// - public virtual async Task SetRelationshipAsync(TId leftId, string relationshipName, object rightValue, CancellationToken cancellationToken) + public virtual async Task SetRelationshipAsync(TId leftId, string relationshipName, object? rightValue, CancellationToken cancellationToken) { _traceWriter.LogMethodStart(new { @@ -454,14 +462,16 @@ public virtual async Task RemoveFromToManyRelationshipAsync(TId leftId, string r protected async Task GetPrimaryResourceByIdAsync(TId id, TopFieldSelection fieldSelection, CancellationToken cancellationToken) { - TResource primaryResource = await TryGetPrimaryResourceByIdAsync(id, fieldSelection, cancellationToken); + TResource? primaryResource = await TryGetPrimaryResourceByIdAsync(id, fieldSelection, cancellationToken); AssertPrimaryResourceExists(primaryResource); return primaryResource; } - private async Task TryGetPrimaryResourceByIdAsync(TId id, TopFieldSelection fieldSelection, CancellationToken cancellationToken) + private async Task TryGetPrimaryResourceByIdAsync(TId id, TopFieldSelection fieldSelection, CancellationToken cancellationToken) { + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); + QueryLayer primaryLayer = _queryLayerComposer.ComposeForGetById(id, _request.PrimaryResourceType, fieldSelection); IReadOnlyCollection primaryResources = await _repositoryAccessor.GetAsync(primaryLayer, cancellationToken); @@ -470,6 +480,8 @@ private async Task TryGetPrimaryResourceByIdAsync(TId id, TopFieldSel protected async Task GetPrimaryResourceForUpdateAsync(TId id, CancellationToken cancellationToken) { + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); + QueryLayer queryLayer = _queryLayerComposer.ComposeForUpdate(id, _request.PrimaryResourceType); var resource = await _repositoryAccessor.GetForUpdateAsync(queryLayer, cancellationToken); @@ -478,21 +490,44 @@ protected async Task GetPrimaryResourceForUpdateAsync(TId id, Cancell } [AssertionMethod] - private void AssertPrimaryResourceExists(TResource resource) + private void AssertPrimaryResourceExists([SysNotNull] TResource? resource) { + AssertPrimaryResourceTypeInJsonApiRequestIsNotNull(_request.PrimaryResourceType); + if (resource == null) { - throw new ResourceNotFoundException(_request.PrimaryId, _request.PrimaryResourceType.PublicName); + throw new ResourceNotFoundException(_request.PrimaryId!, _request.PrimaryResourceType.PublicName); } } [AssertionMethod] - private void AssertHasRelationship(RelationshipAttribute relationship, string name) + private void AssertHasRelationship([SysNotNull] RelationshipAttribute? relationship, string name) { if (relationship == null) { - throw new RelationshipNotFoundException(name, _request.PrimaryResourceType.PublicName); + throw new RelationshipNotFoundException(name, _request.PrimaryResourceType!.PublicName); } } + + [AssertionMethod] + private void AssertPrimaryResourceTypeInJsonApiRequestIsNotNull([SysNotNull] ResourceType? resourceType) + { + if (resourceType == null) + { + throw new InvalidOperationException( + $"Expected {nameof(IJsonApiRequest)}.{nameof(IJsonApiRequest.PrimaryResourceType)} not to be null at this point."); + } + } + + [AssertionMethod] + private void AssertRelationshipInJsonApiRequestIsNotNull([SysNotNull] RelationshipAttribute? relationship) + { + if (relationship == null) + { + throw new InvalidOperationException( + $"Expected {nameof(IJsonApiRequest)}.{nameof(IJsonApiRequest.Relationship)} not to be null at this point."); + } + } + } } diff --git a/src/JsonApiDotNetCore/TypeExtensions.cs b/src/JsonApiDotNetCore/TypeExtensions.cs index 60e313b438..41450afdf7 100644 --- a/src/JsonApiDotNetCore/TypeExtensions.cs +++ b/src/JsonApiDotNetCore/TypeExtensions.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Linq; @@ -10,7 +8,7 @@ internal static class TypeExtensions /// /// Whether the specified source type implements or equals the specified interface. /// - public static bool IsOrImplementsInterface(this Type source, Type interfaceType) + public static bool IsOrImplementsInterface(this Type? source, Type interfaceType) { ArgumentGuard.NotNull(interfaceType, nameof(interfaceType)); diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs index ba0ac5eb48..f134cfaa20 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastDefinition.cs @@ -48,7 +48,7 @@ public override FilterExpression OnApplyFilter(FilterExpression existingFilter) AttrAttribute archivedAtAttribute = ResourceType.GetAttributeByPropertyName(nameof(TelevisionBroadcast.ArchivedAt)); var archivedAtChain = new ResourceFieldChainExpression(archivedAtAttribute); - FilterExpression isUnarchived = new ComparisonExpression(ComparisonOperator.Equals, archivedAtChain, new NullConstantExpression()); + FilterExpression isUnarchived = new ComparisonExpression(ComparisonOperator.Equals, archivedAtChain, NullConstantExpression.Instance); return existingFilter == null ? isUnarchived : new LogicalExpression(LogicalOperator.And, existingFilter, isUnarchived); } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs index 0a273dff81..99e069cf91 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/PerformerRepository.cs @@ -15,7 +15,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations.Transactions [UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)] public sealed class PerformerRepository : IResourceRepository { - public Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { throw new NotImplementedException(); } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs index ec784cb5f8..e5625d20ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarCompositeKeyAwareRepository.cs @@ -26,11 +26,11 @@ public CarCompositeKeyAwareRepository(ITargetedFields targetedFields, IDbContext _writer = new CarExpressionRewriter(resourceGraph); } - protected override IQueryable ApplyQueryLayer(QueryLayer layer) + protected override IQueryable ApplyQueryLayer(QueryLayer queryLayer) { - RecursiveRewriteFilterInLayer(layer); + RecursiveRewriteFilterInLayer(queryLayer); - return base.ApplyQueryLayer(layer); + return base.ApplyQueryLayer(queryLayer); } private void RecursiveRewriteFilterInLayer(QueryLayer queryLayer) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs index dcfdd65417..18b84e14bb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/HexadecimalCodec.cs @@ -28,7 +28,7 @@ public int Decode(string value) }); } - string stringValue = FromHexString(value.Substring(1)); + string stringValue = FromHexString(value[1..]); return int.Parse(stringValue); } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs index 5c077783f2..d74fa70c49 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/SparseFieldSets/ResultCapturingRepository.cs @@ -29,9 +29,9 @@ public ResultCapturingRepository(ITargetedFields targetedFields, IDbContextResol _captureStore = captureStore; } - public override async Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public override async Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { - IReadOnlyCollection resources = await base.GetAsync(layer, cancellationToken); + IReadOnlyCollection resources = await base.GetAsync(queryLayer, cancellationToken); _captureStore.Add(resources); diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs index 627858c35c..dc4ac89f90 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetDefinition.cs @@ -54,7 +54,7 @@ public override FilterExpression OnApplyFilter(FilterExpression existingFilter) AttrAttribute privateNameAttribute = ResourceType.GetAttributeByPropertyName(nameof(Planet.PrivateName)); FilterExpression hasNoPrivateName = new ComparisonExpression(ComparisonOperator.Equals, new ResourceFieldChainExpression(privateNameAttribute), - new NullConstantExpression()); + NullConstantExpression.Instance); return existingFilter == null ? hasNoPrivateName : new LogicalExpression(LogicalOperator.And, hasNoPrivateName, existingFilter); } diff --git a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs index 4dae4d8195..69f55c7cf3 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/Links/LinkInclusionTests.cs @@ -329,7 +329,7 @@ public void Applies_cascading_settings_for_relationship_links(LinkTypes linksInR }; // Act - RelationshipLinks relationshipLinks = linkBuilder.GetRelationshipLinks(relationship, new ExampleResource()); + RelationshipLinks relationshipLinks = linkBuilder.GetRelationshipLinks(relationship, "?"); // Assert if (expected == LinkTypes.None) diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs index d329faccff..3023f4b5c0 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/FilterParseTests.cs @@ -107,7 +107,7 @@ public void Reader_Read_Fails(string parameterName, string parameterValue, strin // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be(parameterName); + exception.ParameterName.Should().Be(parameterName); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified filter is invalid."); diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs index c920d80b53..62215fb1c2 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/IncludeParseTests.cs @@ -69,7 +69,7 @@ public void Reader_Read_Fails(string parameterName, string parameterValue, strin // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be(parameterName); + exception.ParameterName.Should().Be(parameterName); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified include is invalid."); diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs index 8cbfb3b994..1a9c56b2c9 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/LegacyFilterParseTests.cs @@ -52,7 +52,7 @@ public void Reader_Read_Fails(string parameterName, string parameterValue, strin // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be(parameterName); + exception.ParameterName.Should().Be(parameterName); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified filter is invalid."); diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs index 51edf3a482..7e559d1682 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/PaginationParseTests.cs @@ -80,7 +80,7 @@ public void Reader_Read_Page_Number_Fails(string parameterValue, string errorMes // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be("page[number]"); + exception.ParameterName.Should().Be("page[number]"); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified paging is invalid."); @@ -113,7 +113,7 @@ public void Reader_Read_Page_Size_Fails(string parameterValue, string errorMessa // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be("page[size]"); + exception.ParameterName.Should().Be("page[size]"); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified paging is invalid."); diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs index 8c46b87738..54c308d22e 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SortParseTests.cs @@ -84,7 +84,7 @@ public void Reader_Read_Fails(string parameterName, string parameterValue, strin // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be(parameterName); + exception.ParameterName.Should().Be(parameterName); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified sort is invalid."); diff --git a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs index 5015e2874b..c572bf511d 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/QueryStringParameters/SparseFieldSetParseTests.cs @@ -76,7 +76,7 @@ public void Reader_Read_Fails(string parameterName, string parameterValue, strin // Assert InvalidQueryStringParameterException exception = action.Should().ThrowExactly().And; - exception.QueryParameterName.Should().Be(parameterName); + exception.ParameterName.Should().Be(parameterName); exception.Errors.Should().HaveCount(1); exception.Errors[0].StatusCode.Should().Be(HttpStatusCode.BadRequest); exception.Errors[0].Title.Should().Be("The specified fieldset is invalid."); diff --git a/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs b/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs index a380405c15..4253546bc8 100644 --- a/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs +++ b/test/UnitTests/Extensions/ServiceCollectionExtensionsTests.cs @@ -304,7 +304,7 @@ public Task RemoveFromToManyRelationshipAsync(Guid leftId, string relationshipNa [UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)] private sealed class ResourceRepositoryOfInt32 : IResourceRepository { - public Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { throw new NotImplementedException(); } @@ -359,7 +359,7 @@ public Task RemoveFromToManyRelationshipAsync(ResourceOfInt32 leftResource, ISet [UsedImplicitly(ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature)] private sealed class ResourceRepositoryOfGuid : IResourceRepository { - public Task> GetAsync(QueryLayer layer, CancellationToken cancellationToken) + public Task> GetAsync(QueryLayer queryLayer, CancellationToken cancellationToken) { throw new NotImplementedException(); } From 49fcacc0b5383424ea0bd5aaabac5dd51498cf91 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Thu, 14 Oct 2021 10:02:04 +0200 Subject: [PATCH 05/32] Use alternate public name for attribute, to improve test coverage --- .../ModelState/ModelStateValidationTests.cs | 38 +++++++++---------- .../ModelState/NoModelStateValidationTests.cs | 6 +-- .../ModelState/SystemDirectory.cs | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs index b4ed7c9e88..73bd61a77c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs @@ -55,7 +55,7 @@ public async Task Cannot_create_resource_with_omitted_required_attribute() error.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error.Title.Should().Be("Input validation failed."); error.Detail.Should().Be("The Name field is required."); - error.Source.Pointer.Should().Be("/data/attributes/name"); + error.Source.Pointer.Should().Be("/data/attributes/directoryName"); } [Fact] @@ -69,7 +69,7 @@ public async Task Cannot_create_resource_with_null_for_required_attribute_value( type = "systemDirectories", attributes = new { - name = (string)null, + directoryName = (string)null, isCaseSensitive = true } } @@ -89,7 +89,7 @@ public async Task Cannot_create_resource_with_null_for_required_attribute_value( error.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error.Title.Should().Be("Input validation failed."); error.Detail.Should().Be("The Name field is required."); - error.Source.Pointer.Should().Be("/data/attributes/name"); + error.Source.Pointer.Should().Be("/data/attributes/directoryName"); } [Fact] @@ -103,7 +103,7 @@ public async Task Cannot_create_resource_with_invalid_attribute_value() type = "systemDirectories", attributes = new { - name = "!@#$%^&*().-", + directoryName = "!@#$%^&*().-", isCaseSensitive = true } } @@ -123,7 +123,7 @@ public async Task Cannot_create_resource_with_invalid_attribute_value() error.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error.Title.Should().Be("Input validation failed."); error.Detail.Should().Be("The field Name must match the regular expression '^[\\w\\s]+$'."); - error.Source.Pointer.Should().Be("/data/attributes/name"); + error.Source.Pointer.Should().Be("/data/attributes/directoryName"); } [Fact] @@ -137,7 +137,7 @@ public async Task Can_create_resource_with_valid_attribute_value() type = "systemDirectories", attributes = new { - name = "Projects", + directoryName = "Projects", isCaseSensitive = true } } @@ -152,7 +152,7 @@ public async Task Can_create_resource_with_valid_attribute_value() httpResponse.Should().HaveStatusCode(HttpStatusCode.Created); responseDocument.Data.SingleValue.Should().NotBeNull(); - responseDocument.Data.SingleValue.Attributes["name"].Should().Be("Projects"); + responseDocument.Data.SingleValue.Attributes["directoryName"].Should().Be("Projects"); responseDocument.Data.SingleValue.Attributes["isCaseSensitive"].Should().Be(true); } @@ -186,7 +186,7 @@ public async Task Cannot_create_resource_with_multiple_violations() error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error1.Title.Should().Be("Input validation failed."); error1.Detail.Should().Be("The Name field is required."); - error1.Source.Pointer.Should().Be("/data/attributes/name"); + error1.Source.Pointer.Should().Be("/data/attributes/directoryName"); ErrorObject error2 = responseDocument.Errors[1]; error2.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); @@ -237,7 +237,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => type = "systemDirectories", attributes = new { - name = "Projects", + directoryName = "Projects", isCaseSensitive = true }, relationships = new @@ -285,7 +285,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => httpResponse.Should().HaveStatusCode(HttpStatusCode.Created); responseDocument.Data.SingleValue.Should().NotBeNull(); - responseDocument.Data.SingleValue.Attributes["name"].Should().Be("Projects"); + responseDocument.Data.SingleValue.Attributes["directoryName"].Should().Be("Projects"); responseDocument.Data.SingleValue.Attributes["isCaseSensitive"].Should().Be(true); } @@ -398,7 +398,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = (string)null + directoryName = (string)null } } }; @@ -417,7 +417,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => error.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error.Title.Should().Be("Input validation failed."); error.Detail.Should().Be("The Name field is required."); - error.Source.Pointer.Should().Be("/data/attributes/name"); + error.Source.Pointer.Should().Be("/data/attributes/directoryName"); } [Fact] @@ -444,7 +444,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "!@#$%^&*().-" + directoryName = "!@#$%^&*().-" } } }; @@ -463,7 +463,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => error.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error.Title.Should().Be("Input validation failed."); error.Detail.Should().Be("The field Name must match the regular expression '^[\\w\\s]+$'."); - error.Source.Pointer.Should().Be("/data/attributes/name"); + error.Source.Pointer.Should().Be("/data/attributes/directoryName"); } [Fact] @@ -490,7 +490,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = "-1", attributes = new { - name = "Repositories" + directoryName = "Repositories" }, relationships = new { @@ -556,7 +556,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "Repositories" + directoryName = "Repositories" } } }; @@ -634,7 +634,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "Project Files" + directoryName = "Project Files" }, relationships = new { @@ -707,7 +707,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "Project files" + directoryName = "Project files" }, relationships = new { @@ -766,7 +766,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "Project files" + directoryName = "Project files" }, relationships = new { diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs index 8b646394a1..429f6113f4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/NoModelStateValidationTests.cs @@ -33,7 +33,7 @@ public async Task Can_create_resource_with_invalid_attribute_value() type = "systemDirectories", attributes = new { - name = "!@#$%^&*().-", + directoryName = "!@#$%^&*().-", isCaseSensitive = false } } @@ -48,7 +48,7 @@ public async Task Can_create_resource_with_invalid_attribute_value() httpResponse.Should().HaveStatusCode(HttpStatusCode.Created); responseDocument.Data.SingleValue.Should().NotBeNull(); - responseDocument.Data.SingleValue.Attributes["name"].Should().Be("!@#$%^&*().-"); + responseDocument.Data.SingleValue.Attributes["directoryName"].Should().Be("!@#$%^&*().-"); } [Fact] @@ -75,7 +75,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => id = directory.StringId, attributes = new { - name = "!@#$%^&*().-" + directoryName = "!@#$%^&*().-" } } }; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs index 1ff01da705..10992b707d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectory.cs @@ -15,7 +15,7 @@ public sealed class SystemDirectory : Identifiable [RegularExpression("^[0-9]+$")] public override int Id { get; set; } - [Attr] + [Attr(PublicName = "directoryName")] [Required] [RegularExpression(@"^[\w\s]+$")] public string Name { get; set; } From a376207b87d9cdec63fcb7bb4d2b9c9efe8c5702 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Wed, 13 Oct 2021 13:26:35 +0200 Subject: [PATCH 06/32] Annotated example projects --- .../Controllers/BooksController.cs | 2 -- .../Controllers/PeopleController.cs | 2 -- .../GettingStarted/Data/SampleDbContext.cs | 9 +-------- src/Examples/GettingStarted/Models/Book.cs | 6 ++---- src/Examples/GettingStarted/Models/Person.cs | 6 ++---- src/Examples/GettingStarted/Program.cs | 2 -- src/Examples/GettingStarted/Startup.cs | 2 -- .../Controllers/NonJsonApiController.cs | 2 -- .../Controllers/OperationsController.cs | 2 -- .../Controllers/PeopleController.cs | 2 -- .../Controllers/TagsController.cs | 2 -- .../Controllers/TodoItemsController.cs | 2 -- .../Data/AppDbContext.cs | 12 +++--------- .../Definitions/TodoItemDefinition.cs | 4 +--- .../JsonApiDotNetCoreExample/Models/Person.cs | 8 +++----- .../JsonApiDotNetCoreExample/Models/Tag.cs | 9 +++------ .../JsonApiDotNetCoreExample/Models/TodoItem.cs | 14 +++++++------- .../Models/TodoItemPriority.cs | 2 -- .../JsonApiDotNetCoreExample/Program.cs | 2 -- .../JsonApiDotNetCoreExample/Startup.cs | 2 -- .../Controllers/ResourceAsController.cs | 2 -- .../Controllers/ResourceBsController.cs | 2 -- .../MultiDbContextExample/Data/DbContextA.cs | 4 +--- .../MultiDbContextExample/Data/DbContextB.cs | 4 +--- .../MultiDbContextExample/Models/ResourceA.cs | 4 +--- .../MultiDbContextExample/Models/ResourceB.cs | 4 +--- src/Examples/MultiDbContextExample/Program.cs | 2 -- .../Properties/launchSettings.json | 6 +++--- .../Repositories/DbContextARepository.cs | 2 -- .../Repositories/DbContextBRepository.cs | 2 -- src/Examples/MultiDbContextExample/Startup.cs | 2 -- .../Controllers/WorkItemsController.cs | 2 -- .../Data/AppDbContext.cs | 4 +--- .../NoEntityFrameworkExample/Models/WorkItem.cs | 4 +--- .../NoEntityFrameworkExample/Program.cs | 2 -- .../Properties/launchSettings.json | 4 ++-- .../Services/WorkItemService.cs | 12 +++++------- .../NoEntityFrameworkExample/Startup.cs | 2 -- .../Controllers/ReportsController.cs | 2 -- src/Examples/ReportsExample/Models/Report.cs | 6 ++---- .../ReportsExample/Models/ReportStatistics.cs | 4 +--- src/Examples/ReportsExample/Program.cs | 2 -- .../Properties/launchSettings.json | 8 ++++---- .../ReportsExample/Services/ReportService.cs | 3 +-- src/Examples/ReportsExample/Startup.cs | 2 -- test/NoEntityFrameworkTests/WorkItemTests.cs | 17 ++++++++++++++--- 46 files changed, 60 insertions(+), 140 deletions(-) diff --git a/src/Examples/GettingStarted/Controllers/BooksController.cs b/src/Examples/GettingStarted/Controllers/BooksController.cs index 17f990ae41..928dddc82b 100644 --- a/src/Examples/GettingStarted/Controllers/BooksController.cs +++ b/src/Examples/GettingStarted/Controllers/BooksController.cs @@ -1,5 +1,3 @@ -#nullable disable - using GettingStarted.Models; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/GettingStarted/Controllers/PeopleController.cs b/src/Examples/GettingStarted/Controllers/PeopleController.cs index f73a95bde6..cef47189ae 100644 --- a/src/Examples/GettingStarted/Controllers/PeopleController.cs +++ b/src/Examples/GettingStarted/Controllers/PeopleController.cs @@ -1,5 +1,3 @@ -#nullable disable - using GettingStarted.Models; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/GettingStarted/Data/SampleDbContext.cs b/src/Examples/GettingStarted/Data/SampleDbContext.cs index 81312ca1c1..c5460db810 100644 --- a/src/Examples/GettingStarted/Data/SampleDbContext.cs +++ b/src/Examples/GettingStarted/Data/SampleDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using GettingStarted.Models; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -9,16 +7,11 @@ namespace GettingStarted.Data [UsedImplicitly(ImplicitUseTargetFlags.Members)] public class SampleDbContext : DbContext { - public DbSet Books { get; set; } + public DbSet Books => Set(); public SampleDbContext(DbContextOptions options) : base(options) { } - - protected override void OnModelCreating(ModelBuilder builder) - { - builder.Entity(); - } } } diff --git a/src/Examples/GettingStarted/Models/Book.cs b/src/Examples/GettingStarted/Models/Book.cs index 8629e41ba1..0957461cd7 100644 --- a/src/Examples/GettingStarted/Models/Book.cs +++ b/src/Examples/GettingStarted/Models/Book.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -10,12 +8,12 @@ namespace GettingStarted.Models public sealed class Book : Identifiable { [Attr] - public string Title { get; set; } + public string Title { get; set; } = null!; [Attr] public int PublishYear { get; set; } [HasOne] - public Person Author { get; set; } + public Person Author { get; set; } = null!; } } diff --git a/src/Examples/GettingStarted/Models/Person.cs b/src/Examples/GettingStarted/Models/Person.cs index 1511bd8e1d..f9b8e55fff 100644 --- a/src/Examples/GettingStarted/Models/Person.cs +++ b/src/Examples/GettingStarted/Models/Person.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; @@ -11,9 +9,9 @@ namespace GettingStarted.Models public sealed class Person : Identifiable { [Attr] - public string Name { get; set; } + public string Name { get; set; } = null!; [HasMany] - public ICollection Books { get; set; } + public ICollection Books { get; set; } = new List(); } } diff --git a/src/Examples/GettingStarted/Program.cs b/src/Examples/GettingStarted/Program.cs index a34a179b11..68bca0ae86 100644 --- a/src/Examples/GettingStarted/Program.cs +++ b/src/Examples/GettingStarted/Program.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/GettingStarted/Startup.cs b/src/Examples/GettingStarted/Startup.cs index 6077819ece..13beab63fe 100644 --- a/src/Examples/GettingStarted/Startup.cs +++ b/src/Examples/GettingStarted/Startup.cs @@ -1,5 +1,3 @@ -#nullable disable - using GettingStarted.Data; using GettingStarted.Models; using JetBrains.Annotations; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs index ab1e781560..b26b82d27d 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/NonJsonApiController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs index 8c4411ab0e..4851336a9a 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs index 5d83153fe9..36c772b29b 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs index 5a6dfe1106..98b5051774 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs index be9d354f54..0eaa59b1ca 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs b/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs index 2f01267d2b..f9f6752990 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Data/AppDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCoreExample.Models; using Microsoft.EntityFrameworkCore; @@ -11,7 +9,7 @@ namespace JsonApiDotNetCoreExample.Data [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class AppDbContext : DbContext { - public DbSet TodoItems { get; set; } + public DbSet TodoItems => Set(); public AppDbContext(DbContextOptions options) : base(options) @@ -23,16 +21,12 @@ protected override void OnModelCreating(ModelBuilder builder) // When deleting a person, un-assign him/her from existing todo items. builder.Entity() .HasMany(person => person.AssignedTodoItems) - .WithOne(todoItem => todoItem.Assignee) - .IsRequired(false) - .OnDelete(DeleteBehavior.SetNull); + .WithOne(todoItem => todoItem.Assignee!); // When deleting a person, the todo items he/she owns are deleted too. builder.Entity() .HasOne(todoItem => todoItem.Owner) - .WithMany() - .IsRequired() - .OnDelete(DeleteBehavior.Cascade); + .WithMany(); } } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs b/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs index e0fcbe9003..306315d05f 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Definitions/TodoItemDefinition.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.ComponentModel; using System.Threading; using System.Threading.Tasks; @@ -24,7 +22,7 @@ public TodoItemDefinition(IResourceGraph resourceGraph, ISystemClock systemClock _systemClock = systemClock; } - public override SortExpression OnApplySort(SortExpression existingSort) + public override SortExpression OnApplySort(SortExpression? existingSort) { return existingSort ?? GetDefaultSortOrder(); } diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs b/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs index aa452e1d4d..44be2df864 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/Person.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; @@ -11,12 +9,12 @@ namespace JsonApiDotNetCoreExample.Models public sealed class Person : Identifiable { [Attr] - public string FirstName { get; set; } + public string? FirstName { get; set; } [Attr] - public string LastName { get; set; } + public string LastName { get; set; } = null!; [HasMany] - public ISet AssignedTodoItems { get; set; } + public ISet AssignedTodoItems { get; set; } = new HashSet(); } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs b/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs index 087cccc599..713eafe605 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/Tag.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; @@ -11,12 +9,11 @@ namespace JsonApiDotNetCoreExample.Models [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class Tag : Identifiable { - [Required] - [MinLength(1)] [Attr] - public string Name { get; set; } + [MinLength(1)] + public string Name { get; set; } = null!; [HasMany] - public ISet TodoItems { get; set; } + public ISet TodoItems { get; set; } = new HashSet(); } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs index bc8c5191d9..5c4d5c6ea1 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItem.cs @@ -1,7 +1,6 @@ -#nullable disable - using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -12,10 +11,11 @@ namespace JsonApiDotNetCoreExample.Models public sealed class TodoItem : Identifiable { [Attr] - public string Description { get; set; } + public string Description { get; set; } = null!; [Attr] - public TodoItemPriority Priority { get; set; } + [Required] + public TodoItemPriority? Priority { get; set; } [Attr(Capabilities = AttrCapabilities.AllowFilter | AttrCapabilities.AllowSort | AttrCapabilities.AllowView)] public DateTimeOffset CreatedAt { get; set; } @@ -24,12 +24,12 @@ public sealed class TodoItem : Identifiable public DateTimeOffset? LastModifiedAt { get; set; } [HasOne] - public Person Owner { get; set; } + public Person Owner { get; set; } = null!; [HasOne] - public Person Assignee { get; set; } + public Person? Assignee { get; set; } [HasMany] - public ISet Tags { get; set; } + public ISet Tags { get; set; } = new HashSet(); } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs index 28fbd94c3b..5f8687a064 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Models/TodoItemPriority.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace JsonApiDotNetCoreExample.Models diff --git a/src/Examples/JsonApiDotNetCoreExample/Program.cs b/src/Examples/JsonApiDotNetCoreExample/Program.cs index 029844ecc8..e185c3b4c2 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Program.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Program.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/JsonApiDotNetCoreExample/Startup.cs b/src/Examples/JsonApiDotNetCoreExample/Startup.cs index a5cc6d9f4d..f14c1df8ce 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Startup.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Startup.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json.Serialization; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs index d74bdd1ea8..6fc542cf1d 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs index 12b7511ad0..0316fbde1b 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/MultiDbContextExample/Data/DbContextA.cs b/src/Examples/MultiDbContextExample/Data/DbContextA.cs index 64194b2127..23b2f4a37c 100644 --- a/src/Examples/MultiDbContextExample/Data/DbContextA.cs +++ b/src/Examples/MultiDbContextExample/Data/DbContextA.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using MultiDbContextExample.Models; @@ -9,7 +7,7 @@ namespace MultiDbContextExample.Data [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class DbContextA : DbContext { - public DbSet ResourceAs { get; set; } + public DbSet ResourceAs => Set(); public DbContextA(DbContextOptions options) : base(options) diff --git a/src/Examples/MultiDbContextExample/Data/DbContextB.cs b/src/Examples/MultiDbContextExample/Data/DbContextB.cs index f644fb7b74..bf9c575fa9 100644 --- a/src/Examples/MultiDbContextExample/Data/DbContextB.cs +++ b/src/Examples/MultiDbContextExample/Data/DbContextB.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using MultiDbContextExample.Models; @@ -9,7 +7,7 @@ namespace MultiDbContextExample.Data [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class DbContextB : DbContext { - public DbSet ResourceBs { get; set; } + public DbSet ResourceBs => Set(); public DbContextB(DbContextOptions options) : base(options) diff --git a/src/Examples/MultiDbContextExample/Models/ResourceA.cs b/src/Examples/MultiDbContextExample/Models/ResourceA.cs index 0b3ce45873..1c754be6ed 100644 --- a/src/Examples/MultiDbContextExample/Models/ResourceA.cs +++ b/src/Examples/MultiDbContextExample/Models/ResourceA.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -10,6 +8,6 @@ namespace MultiDbContextExample.Models public sealed class ResourceA : Identifiable { [Attr] - public string NameA { get; set; } + public string? NameA { get; set; } } } diff --git a/src/Examples/MultiDbContextExample/Models/ResourceB.cs b/src/Examples/MultiDbContextExample/Models/ResourceB.cs index a595589e5a..70941a1f4d 100644 --- a/src/Examples/MultiDbContextExample/Models/ResourceB.cs +++ b/src/Examples/MultiDbContextExample/Models/ResourceB.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -10,6 +8,6 @@ namespace MultiDbContextExample.Models public sealed class ResourceB : Identifiable { [Attr] - public string NameB { get; set; } + public string? NameB { get; set; } } } diff --git a/src/Examples/MultiDbContextExample/Program.cs b/src/Examples/MultiDbContextExample/Program.cs index 4ec0e37bfc..d5800d95e8 100644 --- a/src/Examples/MultiDbContextExample/Program.cs +++ b/src/Examples/MultiDbContextExample/Program.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/MultiDbContextExample/Properties/launchSettings.json b/src/Examples/MultiDbContextExample/Properties/launchSettings.json index 6d7e1b5cbd..e328cc07be 100644 --- a/src/Examples/MultiDbContextExample/Properties/launchSettings.json +++ b/src/Examples/MultiDbContextExample/Properties/launchSettings.json @@ -1,4 +1,4 @@ -{ +{ "$schema": "http://json.schemastore.org/launchsettings.json", "iisSettings": { "windowsAuthentication": false, @@ -12,7 +12,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": false, - "launchUrl": "/resourceBs", + "launchUrl": "resourceBs", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -20,7 +20,7 @@ "Kestrel": { "commandName": "Project", "launchBrowser": false, - "launchUrl": "/resourceBs", + "launchUrl": "resourceBs", "applicationUrl": "https://localhost:44350;http://localhost:14150", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs b/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs index 448c290cc5..820c78f241 100644 --- a/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs +++ b/src/Examples/MultiDbContextExample/Repositories/DbContextARepository.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs b/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs index 3ff8781d2e..98156a7295 100644 --- a/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs +++ b/src/Examples/MultiDbContextExample/Repositories/DbContextBRepository.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/MultiDbContextExample/Startup.cs b/src/Examples/MultiDbContextExample/Startup.cs index 216eb2cf66..705bf8ef4c 100644 --- a/src/Examples/MultiDbContextExample/Startup.cs +++ b/src/Examples/MultiDbContextExample/Startup.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; diff --git a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs index 844d41189d..d50fa1183f 100644 --- a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs +++ b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs b/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs index 1c12914981..bfe2115f7d 100644 --- a/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs +++ b/src/Examples/NoEntityFrameworkExample/Data/AppDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using NoEntityFrameworkExample.Models; @@ -9,7 +7,7 @@ namespace NoEntityFrameworkExample.Data [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class AppDbContext : DbContext { - public DbSet WorkItems { get; set; } + public DbSet WorkItems => Set(); public AppDbContext(DbContextOptions options) : base(options) diff --git a/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs b/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs index b183bc0e54..083894fd04 100644 --- a/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs +++ b/src/Examples/NoEntityFrameworkExample/Models/WorkItem.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.Resources; @@ -14,7 +12,7 @@ public sealed class WorkItem : Identifiable public bool IsBlocked { get; set; } [Attr] - public string Title { get; set; } + public string Title { get; set; } = null!; [Attr] public long DurationInHours { get; set; } diff --git a/src/Examples/NoEntityFrameworkExample/Program.cs b/src/Examples/NoEntityFrameworkExample/Program.cs index d0f0310b96..6653408dc7 100755 --- a/src/Examples/NoEntityFrameworkExample/Program.cs +++ b/src/Examples/NoEntityFrameworkExample/Program.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/NoEntityFrameworkExample/Properties/launchSettings.json b/src/Examples/NoEntityFrameworkExample/Properties/launchSettings.json index 32bc82dfc2..d28c050bd8 100644 --- a/src/Examples/NoEntityFrameworkExample/Properties/launchSettings.json +++ b/src/Examples/NoEntityFrameworkExample/Properties/launchSettings.json @@ -12,7 +12,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": false, - "launchUrl": "/api/reports", + "launchUrl": "api/v1/workItems", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -20,7 +20,7 @@ "Kestrel": { "commandName": "Project", "launchBrowser": false, - "launchUrl": "/api/reports", + "launchUrl": "api/v1/workItems", "applicationUrl": "https://localhost:44349;http://localhost:14149", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs b/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs index 26df89e999..5fbd062b11 100644 --- a/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs +++ b/src/Examples/NoEntityFrameworkExample/Services/WorkItemService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Data; @@ -48,17 +46,17 @@ public async Task GetAsync(int id, CancellationToken cancellationToken return workItems.Single(); } - public Task GetSecondaryAsync(int id, string relationshipName, CancellationToken cancellationToken) + public Task GetSecondaryAsync(int id, string relationshipName, CancellationToken cancellationToken) { throw new NotImplementedException(); } - public Task GetRelationshipAsync(int id, string relationshipName, CancellationToken cancellationToken) + public Task GetRelationshipAsync(int id, string relationshipName, CancellationToken cancellationToken) { throw new NotImplementedException(); } - public async Task CreateAsync(WorkItem resource, CancellationToken cancellationToken) + public async Task CreateAsync(WorkItem resource, CancellationToken cancellationToken) { const string commandText = @"insert into ""WorkItems"" (""Title"", ""IsBlocked"", ""DurationInHours"", ""ProjectId"") values " + @"(@title, @isBlocked, @durationInHours, @projectId) returning ""Id"", ""Title"", ""IsBlocked"", ""DurationInHours"", ""ProjectId"""; @@ -80,12 +78,12 @@ public Task AddToToManyRelationshipAsync(int leftId, string relationshipName, IS throw new NotImplementedException(); } - public Task UpdateAsync(int id, WorkItem resource, CancellationToken cancellationToken) + public Task UpdateAsync(int id, WorkItem resource, CancellationToken cancellationToken) { throw new NotImplementedException(); } - public Task SetRelationshipAsync(int leftId, string relationshipName, object rightValue, CancellationToken cancellationToken) + public Task SetRelationshipAsync(int leftId, string relationshipName, object? rightValue, CancellationToken cancellationToken) { throw new NotImplementedException(); } diff --git a/src/Examples/NoEntityFrameworkExample/Startup.cs b/src/Examples/NoEntityFrameworkExample/Startup.cs index 5139ad91c9..14642d408f 100644 --- a/src/Examples/NoEntityFrameworkExample/Startup.cs +++ b/src/Examples/NoEntityFrameworkExample/Startup.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/ReportsExample/Controllers/ReportsController.cs b/src/Examples/ReportsExample/Controllers/ReportsController.cs index d7c0a07ed5..db1b73ec57 100644 --- a/src/Examples/ReportsExample/Controllers/ReportsController.cs +++ b/src/Examples/ReportsExample/Controllers/ReportsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading; using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; diff --git a/src/Examples/ReportsExample/Models/Report.cs b/src/Examples/ReportsExample/Models/Report.cs index 8691f22a8e..65f6972d16 100644 --- a/src/Examples/ReportsExample/Models/Report.cs +++ b/src/Examples/ReportsExample/Models/Report.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; @@ -10,9 +8,9 @@ namespace ReportsExample.Models public sealed class Report : Identifiable { [Attr] - public string Title { get; set; } + public string Title { get; set; } = null!; [Attr] - public ReportStatistics Statistics { get; set; } + public ReportStatistics Statistics { get; set; } = null!; } } diff --git a/src/Examples/ReportsExample/Models/ReportStatistics.cs b/src/Examples/ReportsExample/Models/ReportStatistics.cs index 3ed44772b2..7c520eded8 100644 --- a/src/Examples/ReportsExample/Models/ReportStatistics.cs +++ b/src/Examples/ReportsExample/Models/ReportStatistics.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; namespace ReportsExample.Models @@ -7,7 +5,7 @@ namespace ReportsExample.Models [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class ReportStatistics { - public string ProgressIndication { get; set; } + public string ProgressIndication { get; set; } = null!; public int HoursSpent { get; set; } } } diff --git a/src/Examples/ReportsExample/Program.cs b/src/Examples/ReportsExample/Program.cs index aef7d0e578..6356b0f52a 100644 --- a/src/Examples/ReportsExample/Program.cs +++ b/src/Examples/ReportsExample/Program.cs @@ -1,5 +1,3 @@ -#nullable disable - using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/src/Examples/ReportsExample/Properties/launchSettings.json b/src/Examples/ReportsExample/Properties/launchSettings.json index ee2eba1f80..7add074ef2 100644 --- a/src/Examples/ReportsExample/Properties/launchSettings.json +++ b/src/Examples/ReportsExample/Properties/launchSettings.json @@ -11,16 +11,16 @@ "profiles": { "IIS Express": { "commandName": "IISExpress", - "launchBrowser": false, - "launchUrl": "/api/reports", + "launchBrowser": true, + "launchUrl": "api/reports", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "Kestrel": { "commandName": "Project", - "launchBrowser": false, - "launchUrl": "/api/reports", + "launchBrowser": true, + "launchUrl": "api/reports", "applicationUrl": "https://localhost:44348;http://localhost:14148", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" diff --git a/src/Examples/ReportsExample/Services/ReportService.cs b/src/Examples/ReportsExample/Services/ReportService.cs index cc9c3fae03..19f18bfed3 100644 --- a/src/Examples/ReportsExample/Services/ReportService.cs +++ b/src/Examples/ReportsExample/Services/ReportService.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; @@ -35,6 +33,7 @@ private IReadOnlyCollection GetReports() { new() { + Id = 1, Title = "Status Report", Statistics = new ReportStatistics { diff --git a/src/Examples/ReportsExample/Startup.cs b/src/Examples/ReportsExample/Startup.cs index 4ae6472748..a030441258 100644 --- a/src/Examples/ReportsExample/Startup.cs +++ b/src/Examples/ReportsExample/Startup.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; diff --git a/test/NoEntityFrameworkTests/WorkItemTests.cs b/test/NoEntityFrameworkTests/WorkItemTests.cs index 9563814d31..39c133cec7 100644 --- a/test/NoEntityFrameworkTests/WorkItemTests.cs +++ b/test/NoEntityFrameworkTests/WorkItemTests.cs @@ -39,10 +39,15 @@ public WorkItemTests(WebApplicationFactory factory) [Fact] public async Task Can_get_WorkItems() { + var workItem = new WorkItem + { + Title = "Write some code." + }; + // Arrange await RunOnDatabaseAsync(async dbContext => { - dbContext.WorkItems.Add(new WorkItem()); + dbContext.WorkItems.Add(workItem); await dbContext.SaveChangesAsync(); }); @@ -61,7 +66,10 @@ await RunOnDatabaseAsync(async dbContext => public async Task Can_get_WorkItem_by_ID() { // Arrange - var workItem = new WorkItem(); + var workItem = new WorkItem + { + Title = "Write some code." + }; await RunOnDatabaseAsync(async dbContext => { @@ -127,7 +135,10 @@ public async Task Can_create_WorkItem() public async Task Can_delete_WorkItem() { // Arrange - var workItem = new WorkItem(); + var workItem = new WorkItem + { + Title = "Write some code." + }; await RunOnDatabaseAsync(async dbContext => { From 3319059ace6ce7623373039d4cbcbd4e47410872 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Wed, 13 Oct 2021 14:29:16 +0200 Subject: [PATCH 07/32] Annotated benchmark project - Removed LinkBuilderGetNamespaceFromPathBenchmarks, we don't have such code anymore - Cleanup query string benchmark --- benchmarks/BenchmarkResource.cs | 18 ----- benchmarks/BenchmarkResourcePublicNames.cs | 12 --- benchmarks/DependencyFactory.cs | 20 ----- .../DeserializationBenchmarkBase.cs | 30 ++++--- .../OperationsDeserializationBenchmarks.cs | 52 ++++++------ .../ResourceDeserializationBenchmarks.cs | 31 ++++--- ...nkBuilderGetNamespaceFromPathBenchmarks.cs | 80 ------------------- benchmarks/Program.cs | 8 +- .../QueryStringParserBenchmarks.cs} | 54 ++++--------- benchmarks/QueryString/QueryableResource.cs | 16 ++++ .../OperationsSerializationBenchmarks.cs | 14 ++-- .../ResourceSerializationBenchmarks.cs | 28 +++---- .../SerializationBenchmarkBase.cs | 48 ++++++----- benchmarks/SubResource.cs | 15 ---- 14 files changed, 128 insertions(+), 298 deletions(-) delete mode 100644 benchmarks/BenchmarkResource.cs delete mode 100644 benchmarks/BenchmarkResourcePublicNames.cs delete mode 100644 benchmarks/DependencyFactory.cs delete mode 100644 benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs rename benchmarks/{Query/QueryParserBenchmarks.cs => QueryString/QueryStringParserBenchmarks.cs} (54%) create mode 100644 benchmarks/QueryString/QueryableResource.cs delete mode 100644 benchmarks/SubResource.cs diff --git a/benchmarks/BenchmarkResource.cs b/benchmarks/BenchmarkResource.cs deleted file mode 100644 index 3b91436bac..0000000000 --- a/benchmarks/BenchmarkResource.cs +++ /dev/null @@ -1,18 +0,0 @@ -#nullable disable - -using JetBrains.Annotations; -using JsonApiDotNetCore.Resources; -using JsonApiDotNetCore.Resources.Annotations; - -namespace Benchmarks -{ - [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class BenchmarkResource : Identifiable - { - [Attr(PublicName = BenchmarkResourcePublicNames.NameAttr)] - public string Name { get; set; } - - [HasOne] - public SubResource Child { get; set; } - } -} diff --git a/benchmarks/BenchmarkResourcePublicNames.cs b/benchmarks/BenchmarkResourcePublicNames.cs deleted file mode 100644 index 02175e2a14..0000000000 --- a/benchmarks/BenchmarkResourcePublicNames.cs +++ /dev/null @@ -1,12 +0,0 @@ -#nullable disable - -#pragma warning disable AV1008 // Class should not be static - -namespace Benchmarks -{ - internal static class BenchmarkResourcePublicNames - { - public const string NameAttr = "full-name"; - public const string Type = "simple-types"; - } -} diff --git a/benchmarks/DependencyFactory.cs b/benchmarks/DependencyFactory.cs deleted file mode 100644 index 98440c6263..0000000000 --- a/benchmarks/DependencyFactory.cs +++ /dev/null @@ -1,20 +0,0 @@ -#nullable disable - -using JsonApiDotNetCore.Configuration; -using Microsoft.Extensions.Logging.Abstractions; - -namespace Benchmarks -{ - internal sealed class DependencyFactory - { - public IResourceGraph CreateResourceGraph(IJsonApiOptions options) - { - var builder = new ResourceGraphBuilder(options, NullLoggerFactory.Instance); - - builder.Add(BenchmarkResourcePublicNames.Type); - builder.Add(); - - return builder.Build(); - } - } -} diff --git a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs index 85fa662c35..3c4b6f9227 100644 --- a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs +++ b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.ComponentModel.Design; @@ -23,7 +21,7 @@ public abstract class DeserializationBenchmarkBase protected DeserializationBenchmarkBase() { var options = new JsonApiOptions(); - IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Build(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Build(); options.SerializerOptions.Converters.Add(new ResourceObjectConverter(resourceGraph)); SerializerReadOptions = ((IJsonApiOptions)options).SerializerReadOptions; @@ -32,7 +30,7 @@ protected DeserializationBenchmarkBase() var resourceDefinitionAccessor = new ResourceDefinitionAccessor(resourceGraph, serviceContainer); serviceContainer.AddService(typeof(IResourceDefinitionAccessor), resourceDefinitionAccessor); - serviceContainer.AddService(typeof(IResourceDefinition), new JsonApiResourceDefinition(resourceGraph)); + serviceContainer.AddService(typeof(IResourceDefinition), new JsonApiResourceDefinition(resourceGraph)); // ReSharper disable once VirtualMemberCallInConstructor JsonApiRequest request = CreateJsonApiRequest(resourceGraph); @@ -58,7 +56,7 @@ protected DeserializationBenchmarkBase() protected abstract JsonApiRequest CreateJsonApiRequest(IResourceGraph resourceGraph); [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class ResourceA : Identifiable + public sealed class IncomingResource : Identifiable { [Attr] public bool Attribute01 { get; set; } @@ -76,7 +74,7 @@ public sealed class ResourceA : Identifiable public float? Attribute05 { get; set; } [Attr] - public string Attribute06 { get; set; } + public string Attribute06 { get; set; } = null!; [Attr] public DateTime? Attribute07 { get; set; } @@ -91,34 +89,34 @@ public sealed class ResourceA : Identifiable public DayOfWeek Attribute10 { get; set; } [HasOne] - public ResourceA Single1 { get; set; } + public IncomingResource Single1 { get; set; } = null!; [HasOne] - public ResourceA Single2 { get; set; } + public IncomingResource Single2 { get; set; } = null!; [HasOne] - public ResourceA Single3 { get; set; } + public IncomingResource Single3 { get; set; } = null!; [HasOne] - public ResourceA Single4 { get; set; } + public IncomingResource Single4 { get; set; } = null!; [HasOne] - public ResourceA Single5 { get; set; } + public IncomingResource Single5 { get; set; } = null!; [HasMany] - public ISet Multi1 { get; set; } + public ISet Multi1 { get; set; } = null!; [HasMany] - public ISet Multi2 { get; set; } + public ISet Multi2 { get; set; } = null!; [HasMany] - public ISet Multi3 { get; set; } + public ISet Multi3 { get; set; } = null!; [HasMany] - public ISet Multi4 { get; set; } + public ISet Multi4 { get; set; } = null!; [HasMany] - public ISet Multi5 { get; set; } + public ISet Multi5 { get; set; } = null!; } } } diff --git a/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs b/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs index b66f860d12..687e29a89b 100644 --- a/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs +++ b/benchmarks/Deserialization/OperationsDeserializationBenchmarks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json; using BenchmarkDotNet.Attributes; @@ -22,7 +20,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase op = "add", data = new { - type = "resourceAs", + type = "incomingResources", lid = "a-1", attributes = new { @@ -43,7 +41,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "101" } }, @@ -51,7 +49,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "102" } }, @@ -59,7 +57,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "103" } }, @@ -67,7 +65,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "104" } }, @@ -75,7 +73,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "105" } }, @@ -85,7 +83,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "201" } } @@ -96,7 +94,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "202" } } @@ -107,7 +105,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "203" } } @@ -118,7 +116,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "204" } } @@ -129,7 +127,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "205" } } @@ -142,7 +140,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase op = "update", data = new { - type = "resourceAs", + type = "incomingResources", id = "1", attributes = new { @@ -163,7 +161,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "101" } }, @@ -171,7 +169,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "102" } }, @@ -179,7 +177,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "103" } }, @@ -187,7 +185,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "104" } }, @@ -195,7 +193,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "105" } }, @@ -205,7 +203,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "201" } } @@ -216,7 +214,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "202" } } @@ -227,7 +225,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "203" } } @@ -238,7 +236,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "204" } } @@ -249,7 +247,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "205" } } @@ -262,7 +260,7 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase op = "remove", @ref = new { - type = "resourceAs", + type = "incomingResources", lid = "a-1" } } @@ -270,9 +268,9 @@ public class OperationsDeserializationBenchmarks : DeserializationBenchmarkBase }).Replace("atomic__operations", "atomic:operations"); [Benchmark] - public object DeserializeOperationsRequest() + public object? DeserializeOperationsRequest() { - var document = JsonSerializer.Deserialize(RequestBody, SerializerReadOptions); + var document = JsonSerializer.Deserialize(RequestBody, SerializerReadOptions)!; return DocumentAdapter.Convert(document); } diff --git a/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs b/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs index dcf0f09a03..7538cef9cb 100644 --- a/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs +++ b/benchmarks/Deserialization/ResourceDeserializationBenchmarks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Text.Json; using BenchmarkDotNet.Attributes; @@ -17,7 +15,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", attributes = new { attribute01 = true, @@ -37,7 +35,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "101" } }, @@ -45,7 +43,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "102" } }, @@ -53,7 +51,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "103" } }, @@ -61,7 +59,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "104" } }, @@ -69,7 +67,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { data = new { - type = "resourceAs", + type = "incomingResources", id = "105" } }, @@ -79,7 +77,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "201" } } @@ -90,7 +88,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "202" } } @@ -101,7 +99,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "203" } } @@ -112,7 +110,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "204" } } @@ -123,7 +121,7 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase { new { - type = "resourceAs", + type = "incomingResources", id = "205" } } @@ -133,10 +131,9 @@ public class ResourceDeserializationBenchmarks : DeserializationBenchmarkBase }); [Benchmark] - public object DeserializeResourceRequest() + public object? DeserializeResourceRequest() { - var document = JsonSerializer.Deserialize(RequestBody, SerializerReadOptions); - + var document = JsonSerializer.Deserialize(RequestBody, SerializerReadOptions)!; return DocumentAdapter.Convert(document); } @@ -145,7 +142,7 @@ protected override JsonApiRequest CreateJsonApiRequest(IResourceGraph resourceGr return new() { Kind = EndpointKind.Primary, - PrimaryResourceType = resourceGraph.GetResourceType(), + PrimaryResourceType = resourceGraph.GetResourceType(), WriteOperation = WriteOperationKind.CreateResource }; } diff --git a/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs b/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs deleted file mode 100644 index 7feb1d52ea..0000000000 --- a/benchmarks/LinkBuilding/LinkBuilderGetNamespaceFromPathBenchmarks.cs +++ /dev/null @@ -1,80 +0,0 @@ -#nullable disable - -using System; -using System.Text; -using BenchmarkDotNet.Attributes; - -namespace Benchmarks.LinkBuilding -{ - // ReSharper disable once ClassCanBeSealed.Global - [MarkdownExporter] - [SimpleJob(3, 10, 20)] - [MemoryDiagnoser] - public class LinkBuilderGetNamespaceFromPathBenchmarks - { - private const string RequestPath = "/api/some-really-long-namespace-path/resources/current/articles/?some"; - private const string ResourceName = "articles"; - private const char PathDelimiter = '/'; - - [Benchmark] - public void UsingStringSplit() - { - GetNamespaceFromPathUsingStringSplit(RequestPath, ResourceName); - } - - [Benchmark] - public void UsingReadOnlySpan() - { - GetNamespaceFromPathUsingReadOnlySpan(RequestPath, ResourceName); - } - - private static void GetNamespaceFromPathUsingStringSplit(string path, string resourceName) - { - var namespaceBuilder = new StringBuilder(path.Length); - string[] segments = path.Split('/'); - - for (int index = 1; index < segments.Length; index++) - { - if (segments[index] == resourceName) - { - break; - } - - namespaceBuilder.Append(PathDelimiter); - namespaceBuilder.Append(segments[index]); - } - - _ = namespaceBuilder.ToString(); - } - - private static void GetNamespaceFromPathUsingReadOnlySpan(string path, string resourceName) - { - ReadOnlySpan resourceNameSpan = resourceName.AsSpan(); - ReadOnlySpan pathSpan = path.AsSpan(); - - for (int index = 0; index < pathSpan.Length; index++) - { - if (pathSpan[index].Equals(PathDelimiter)) - { - if (pathSpan.Length > index + resourceNameSpan.Length) - { - ReadOnlySpan possiblePathSegment = pathSpan.Slice(index + 1, resourceNameSpan.Length); - - if (resourceNameSpan.SequenceEqual(possiblePathSegment)) - { - int lastCharacterIndex = index + 1 + resourceNameSpan.Length; - - bool isAtEnd = lastCharacterIndex == pathSpan.Length; - bool hasDelimiterAfterSegment = pathSpan.Length >= lastCharacterIndex + 1 && pathSpan[lastCharacterIndex].Equals(PathDelimiter); - - if (isAtEnd || hasDelimiterAfterSegment) - { - _ = pathSpan[..index].ToString(); - } - } - } - } - } - } - } -} diff --git a/benchmarks/Program.cs b/benchmarks/Program.cs index bc01304374..45406133dd 100644 --- a/benchmarks/Program.cs +++ b/benchmarks/Program.cs @@ -1,9 +1,6 @@ -#nullable disable - using BenchmarkDotNet.Running; using Benchmarks.Deserialization; -using Benchmarks.LinkBuilding; -using Benchmarks.Query; +using Benchmarks.QueryString; using Benchmarks.Serialization; namespace Benchmarks @@ -18,8 +15,7 @@ private static void Main(string[] args) typeof(OperationsDeserializationBenchmarks), typeof(ResourceSerializationBenchmarks), typeof(OperationsSerializationBenchmarks), - typeof(QueryParserBenchmarks), - typeof(LinkBuilderGetNamespaceFromPathBenchmarks) + typeof(QueryStringParserBenchmarks) }); switcher.Run(args); diff --git a/benchmarks/Query/QueryParserBenchmarks.cs b/benchmarks/QueryString/QueryStringParserBenchmarks.cs similarity index 54% rename from benchmarks/Query/QueryParserBenchmarks.cs rename to benchmarks/QueryString/QueryStringParserBenchmarks.cs index c47ee9e130..6e576bc4a7 100644 --- a/benchmarks/Query/QueryParserBenchmarks.cs +++ b/benchmarks/QueryString/QueryStringParserBenchmarks.cs @@ -1,7 +1,4 @@ -#nullable disable - using System; -using System.Collections.Generic; using System.ComponentModel.Design; using BenchmarkDotNet.Attributes; using JsonApiDotNetCore; @@ -14,51 +11,32 @@ using Microsoft.AspNetCore.WebUtilities; using Microsoft.Extensions.Logging.Abstractions; -namespace Benchmarks.Query +namespace Benchmarks.QueryString { // ReSharper disable once ClassCanBeSealed.Global [MarkdownExporter] [SimpleJob(3, 10, 20)] [MemoryDiagnoser] - public class QueryParserBenchmarks + public class QueryStringParserBenchmarks { - private readonly DependencyFactory _dependencyFactory = new(); private readonly FakeRequestQueryStringAccessor _queryStringAccessor = new(); - private readonly QueryStringReader _queryStringReaderForSort; - private readonly QueryStringReader _queryStringReaderForAll; + private readonly QueryStringReader _queryStringReader; - public QueryParserBenchmarks() + public QueryStringParserBenchmarks() { IJsonApiOptions options = new JsonApiOptions { EnableLegacyFilterNotation = true }; - IResourceGraph resourceGraph = _dependencyFactory.CreateResourceGraph(options); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add("alt-resource-name").Build(); var request = new JsonApiRequest { - PrimaryResourceType = resourceGraph.GetResourceType(typeof(BenchmarkResource)), + PrimaryResourceType = resourceGraph.GetResourceType(typeof(QueryableResource)), IsCollection = true }; - _queryStringReaderForSort = CreateQueryParameterDiscoveryForSort(resourceGraph, request, options, _queryStringAccessor); - _queryStringReaderForAll = CreateQueryParameterDiscoveryForAll(resourceGraph, request, options, _queryStringAccessor); - } - - private static QueryStringReader CreateQueryParameterDiscoveryForSort(IResourceGraph resourceGraph, JsonApiRequest request, IJsonApiOptions options, - FakeRequestQueryStringAccessor queryStringAccessor) - { - var sortReader = new SortQueryStringParameterReader(request, resourceGraph); - - IEnumerable readers = sortReader.AsEnumerable(); - - return new QueryStringReader(options, queryStringAccessor, readers, NullLoggerFactory.Instance); - } - - private static QueryStringReader CreateQueryParameterDiscoveryForAll(IResourceGraph resourceGraph, JsonApiRequest request, IJsonApiOptions options, - FakeRequestQueryStringAccessor queryStringAccessor) - { var resourceFactory = new ResourceFactory(new ServiceContainer()); var includeReader = new IncludeQueryStringParameterReader(request, resourceGraph, options); @@ -70,25 +48,25 @@ private static QueryStringReader CreateQueryParameterDiscoveryForAll(IResourceGr IQueryStringParameterReader[] readers = ArrayFactory.Create(includeReader, filterReader, sortReader, sparseFieldSetReader, paginationReader); - return new QueryStringReader(options, queryStringAccessor, readers, NullLoggerFactory.Instance); + _queryStringReader = new QueryStringReader(options, _queryStringAccessor, readers, NullLoggerFactory.Instance); } [Benchmark] public void AscendingSort() { - string queryString = $"?sort={BenchmarkResourcePublicNames.NameAttr}"; + const string queryString = "?sort=alt-attr-name"; _queryStringAccessor.SetQueryString(queryString); - _queryStringReaderForSort.ReadAll(null); + _queryStringReader.ReadAll(null); } [Benchmark] public void DescendingSort() { - string queryString = $"?sort=-{BenchmarkResourcePublicNames.NameAttr}"; + const string queryString = "?sort=-alt-attr-name"; _queryStringAccessor.SetQueryString(queryString); - _queryStringReaderForSort.ReadAll(null); + _queryStringReader.ReadAll(null); } [Benchmark] @@ -96,13 +74,11 @@ public void ComplexQuery() { Run(100, () => { - const string resourceName = BenchmarkResourcePublicNames.Type; - const string attrName = BenchmarkResourcePublicNames.NameAttr; - - string queryString = $"?filter[{attrName}]=abc,eq:abc&sort=-{attrName}&include=child&page[size]=1&fields[{resourceName}]={attrName}"; + const string queryString = + "?filter[alt-attr-name]=abc,eq:abc&sort=-alt-attr-name&include=child&page[size]=1&fields[alt-resource-name]=alt-attr-name"; _queryStringAccessor.SetQueryString(queryString); - _queryStringReaderForAll.ReadAll(null); + _queryStringReader.ReadAll(null); }); } @@ -116,7 +92,7 @@ private void Run(int iterations, Action action) private sealed class FakeRequestQueryStringAccessor : IRequestQueryStringAccessor { - public IQueryCollection Query { get; private set; } + public IQueryCollection Query { get; private set; } = new QueryCollection(); public void SetQueryString(string queryString) { diff --git a/benchmarks/QueryString/QueryableResource.cs b/benchmarks/QueryString/QueryableResource.cs new file mode 100644 index 0000000000..bcf0a5075a --- /dev/null +++ b/benchmarks/QueryString/QueryableResource.cs @@ -0,0 +1,16 @@ +using JetBrains.Annotations; +using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.Resources.Annotations; + +namespace Benchmarks.QueryString +{ + [UsedImplicitly(ImplicitUseTargetFlags.Members)] + public sealed class QueryableResource : Identifiable + { + [Attr(PublicName = "alt-attr-name")] + public string? Name { get; set; } + + [HasOne] + public QueryableResource? Child { get; set; } + } +} diff --git a/benchmarks/Serialization/OperationsSerializationBenchmarks.cs b/benchmarks/Serialization/OperationsSerializationBenchmarks.cs index f6360235f2..3c5e3e7fc7 100644 --- a/benchmarks/Serialization/OperationsSerializationBenchmarks.cs +++ b/benchmarks/Serialization/OperationsSerializationBenchmarks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Text.Json; @@ -28,7 +26,7 @@ public OperationsSerializationBenchmarks() private static IEnumerable CreateResponseOperations(IJsonApiRequest request) { - var resource1 = new ResourceA + var resource1 = new OutgoingResource { Id = 1, Attribute01 = true, @@ -43,7 +41,7 @@ private static IEnumerable CreateResponseOperations(IJsonApi Attribute10 = DayOfWeek.Sunday }; - var resource2 = new ResourceA + var resource2 = new OutgoingResource { Id = 2, Attribute01 = false, @@ -58,7 +56,7 @@ private static IEnumerable CreateResponseOperations(IJsonApi Attribute10 = DayOfWeek.Monday }; - var resource3 = new ResourceA + var resource3 = new OutgoingResource { Id = 3, Attribute01 = true, @@ -73,7 +71,7 @@ private static IEnumerable CreateResponseOperations(IJsonApi Attribute10 = DayOfWeek.Tuesday }; - var resource4 = new ResourceA + var resource4 = new OutgoingResource { Id = 4, Attribute01 = false, @@ -88,7 +86,7 @@ private static IEnumerable CreateResponseOperations(IJsonApi Attribute10 = DayOfWeek.Wednesday }; - var resource5 = new ResourceA + var resource5 = new OutgoingResource { Id = 5, Attribute01 = true, @@ -127,7 +125,7 @@ protected override JsonApiRequest CreateJsonApiRequest(IResourceGraph resourceGr return new() { Kind = EndpointKind.AtomicOperations, - PrimaryResourceType = resourceGraph.GetResourceType() + PrimaryResourceType = resourceGraph.GetResourceType() }; } diff --git a/benchmarks/Serialization/ResourceSerializationBenchmarks.cs b/benchmarks/Serialization/ResourceSerializationBenchmarks.cs index 0e302fe7cf..9dd4103704 100644 --- a/benchmarks/Serialization/ResourceSerializationBenchmarks.cs +++ b/benchmarks/Serialization/ResourceSerializationBenchmarks.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -19,11 +17,11 @@ namespace Benchmarks.Serialization // ReSharper disable once ClassCanBeSealed.Global public class ResourceSerializationBenchmarks : SerializationBenchmarkBase { - private static readonly ResourceA ResponseResource = CreateResponseResource(); + private static readonly OutgoingResource ResponseResource = CreateResponseResource(); - private static ResourceA CreateResponseResource() + private static OutgoingResource CreateResponseResource() { - var resource1 = new ResourceA + var resource1 = new OutgoingResource { Id = 1, Attribute01 = true, @@ -38,7 +36,7 @@ private static ResourceA CreateResponseResource() Attribute10 = DayOfWeek.Sunday }; - var resource2 = new ResourceA + var resource2 = new OutgoingResource { Id = 2, Attribute01 = false, @@ -53,7 +51,7 @@ private static ResourceA CreateResponseResource() Attribute10 = DayOfWeek.Monday }; - var resource3 = new ResourceA + var resource3 = new OutgoingResource { Id = 3, Attribute01 = true, @@ -68,7 +66,7 @@ private static ResourceA CreateResponseResource() Attribute10 = DayOfWeek.Tuesday }; - var resource4 = new ResourceA + var resource4 = new OutgoingResource { Id = 4, Attribute01 = false, @@ -83,7 +81,7 @@ private static ResourceA CreateResponseResource() Attribute10 = DayOfWeek.Wednesday }; - var resource5 = new ResourceA + var resource5 = new OutgoingResource { Id = 5, Attribute01 = true, @@ -118,18 +116,18 @@ protected override JsonApiRequest CreateJsonApiRequest(IResourceGraph resourceGr return new() { Kind = EndpointKind.Primary, - PrimaryResourceType = resourceGraph.GetResourceType() + PrimaryResourceType = resourceGraph.GetResourceType() }; } protected override IEvaluatedIncludeCache CreateEvaluatedIncludeCache(IResourceGraph resourceGraph) { - ResourceType resourceAType = resourceGraph.GetResourceType(); + ResourceType resourceAType = resourceGraph.GetResourceType(); - RelationshipAttribute single2 = resourceAType.GetRelationshipByPropertyName(nameof(ResourceA.Single2)); - RelationshipAttribute single3 = resourceAType.GetRelationshipByPropertyName(nameof(ResourceA.Single3)); - RelationshipAttribute multi4 = resourceAType.GetRelationshipByPropertyName(nameof(ResourceA.Multi4)); - RelationshipAttribute multi5 = resourceAType.GetRelationshipByPropertyName(nameof(ResourceA.Multi5)); + RelationshipAttribute single2 = resourceAType.GetRelationshipByPropertyName(nameof(OutgoingResource.Single2)); + RelationshipAttribute single3 = resourceAType.GetRelationshipByPropertyName(nameof(OutgoingResource.Single3)); + RelationshipAttribute multi4 = resourceAType.GetRelationshipByPropertyName(nameof(OutgoingResource.Multi4)); + RelationshipAttribute multi5 = resourceAType.GetRelationshipByPropertyName(nameof(OutgoingResource.Multi5)); ImmutableArray chain = ArrayFactory.Create(single2, single3, multi4, multi5).ToImmutableArray(); IEnumerable chains = new ResourceFieldChainExpression(chain).AsEnumerable(); diff --git a/benchmarks/Serialization/SerializationBenchmarkBase.cs b/benchmarks/Serialization/SerializationBenchmarkBase.cs index e8d2d683c7..0737e45b1d 100644 --- a/benchmarks/Serialization/SerializationBenchmarkBase.cs +++ b/benchmarks/Serialization/SerializationBenchmarkBase.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using System.Collections.Generic; using System.Collections.Immutable; @@ -42,7 +40,7 @@ protected SerializationBenchmarkBase() } }; - ResourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Build(); + ResourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Build(); SerializerWriteOptions = ((IJsonApiOptions)options).SerializerWriteOptions; // ReSharper disable VirtualMemberCallInConstructor @@ -66,7 +64,7 @@ protected SerializationBenchmarkBase() protected abstract IEvaluatedIncludeCache CreateEvaluatedIncludeCache(IResourceGraph resourceGraph); [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class ResourceA : Identifiable + public sealed class OutgoingResource : Identifiable { [Attr] public bool Attribute01 { get; set; } @@ -84,7 +82,7 @@ public sealed class ResourceA : Identifiable public float? Attribute05 { get; set; } [Attr] - public string Attribute06 { get; set; } + public string Attribute06 { get; set; } = null!; [Attr] public DateTime? Attribute07 { get; set; } @@ -99,34 +97,34 @@ public sealed class ResourceA : Identifiable public DayOfWeek Attribute10 { get; set; } [HasOne] - public ResourceA Single1 { get; set; } + public OutgoingResource Single1 { get; set; } = null!; [HasOne] - public ResourceA Single2 { get; set; } + public OutgoingResource Single2 { get; set; } = null!; [HasOne] - public ResourceA Single3 { get; set; } + public OutgoingResource Single3 { get; set; } = null!; [HasOne] - public ResourceA Single4 { get; set; } + public OutgoingResource Single4 { get; set; } = null!; [HasOne] - public ResourceA Single5 { get; set; } + public OutgoingResource Single5 { get; set; } = null!; [HasMany] - public ISet Multi1 { get; set; } + public ISet Multi1 { get; set; } = null!; [HasMany] - public ISet Multi2 { get; set; } + public ISet Multi2 { get; set; } = null!; [HasMany] - public ISet Multi3 { get; set; } + public ISet Multi3 { get; set; } = null!; [HasMany] - public ISet Multi4 { get; set; } + public ISet Multi4 { get; set; } = null!; [HasMany] - public ISet Multi5 { get; set; } + public ISet Multi5 { get; set; } = null!; } private sealed class FakeResourceDefinitionAccessor : IResourceDefinitionAccessor @@ -136,32 +134,32 @@ public IImmutableSet OnApplyIncludes(ResourceType reso return existingIncludes; } - public FilterExpression OnApplyFilter(ResourceType resourceType, FilterExpression existingFilter) + public FilterExpression? OnApplyFilter(ResourceType resourceType, FilterExpression? existingFilter) { return existingFilter; } - public SortExpression OnApplySort(ResourceType resourceType, SortExpression existingSort) + public SortExpression? OnApplySort(ResourceType resourceType, SortExpression? existingSort) { return existingSort; } - public PaginationExpression OnApplyPagination(ResourceType resourceType, PaginationExpression existingPagination) + public PaginationExpression? OnApplyPagination(ResourceType resourceType, PaginationExpression? existingPagination) { return existingPagination; } - public SparseFieldSetExpression OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression existingSparseFieldSet) + public SparseFieldSetExpression? OnApplySparseFieldSet(ResourceType resourceType, SparseFieldSetExpression? existingSparseFieldSet) { return existingSparseFieldSet; } - public object GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName) + public object? GetQueryableHandlerForQueryStringParameter(Type resourceClrType, string parameterName) { return null; } - public IDictionary GetMeta(ResourceType resourceType, IIdentifiable resourceInstance) + public IDictionary? GetMeta(ResourceType resourceType, IIdentifiable resourceInstance) { return null; } @@ -172,8 +170,8 @@ public Task OnPrepareWriteAsync(TResource resource, WriteOperationKin return Task.CompletedTask; } - public Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, - IIdentifiable rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) + public Task OnSetToOneRelationshipAsync(TResource leftResource, HasOneAttribute hasOneRelationship, + IIdentifiable? rightResourceId, WriteOperationKind writeOperation, CancellationToken cancellationToken) where TResource : class, IIdentifiable { return Task.FromResult(rightResourceId); @@ -251,11 +249,11 @@ public RelationshipLinks GetRelationshipLinks(RelationshipAttribute relationship private sealed class FakeMetaBuilder : IMetaBuilder { - public void Add(IReadOnlyDictionary values) + public void Add(IReadOnlyDictionary values) { } - public IDictionary Build() + public IDictionary? Build() { return null; } diff --git a/benchmarks/SubResource.cs b/benchmarks/SubResource.cs deleted file mode 100644 index add3a0dac9..0000000000 --- a/benchmarks/SubResource.cs +++ /dev/null @@ -1,15 +0,0 @@ -#nullable disable - -using JetBrains.Annotations; -using JsonApiDotNetCore.Resources; -using JsonApiDotNetCore.Resources.Annotations; - -namespace Benchmarks -{ - [UsedImplicitly(ImplicitUseTargetFlags.Members)] - public sealed class SubResource : Identifiable - { - [Attr] - public string Value { get; set; } - } -} From 9a97132dda8044cda59dd6059b1c2a06bc85a8a9 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Sat, 16 Oct 2021 00:41:57 +0200 Subject: [PATCH 08/32] Enhanced rendering of error.source.pointer on ModelState validation errors --- CSharpGuidelinesAnalyzer.config | 2 +- docs/getting-started/step-by-step.md | 6 +- docs/usage/extensibility/controllers.md | 24 +- docs/usage/extensibility/services.md | 7 +- docs/usage/routing.md | 12 +- docs/usage/writing/bulk-batch-operations.md | 8 +- .../Controllers/BooksController.cs | 4 +- .../Controllers/PeopleController.cs | 4 +- .../Controllers/OperationsController.cs | 4 +- .../Controllers/PeopleController.cs | 4 +- .../Controllers/TagsController.cs | 4 +- .../Controllers/TodoItemsController.cs | 4 +- .../Controllers/ResourceAsController.cs | 4 +- .../Controllers/ResourceBsController.cs | 4 +- .../Controllers/WorkItemsController.cs | 4 +- .../Controllers/ReportsController.cs | 4 +- .../Controllers/BaseJsonApiController.cs | 19 +- .../BaseJsonApiOperationsController.cs | 54 +-- .../Controllers/JsonApiCommandController.cs | 4 +- .../Controllers/JsonApiController.cs | 8 +- .../JsonApiOperationsController.cs | 4 +- .../Controllers/JsonApiQueryController.cs | 4 +- .../Controllers/ModelStateViolation.cs | 31 -- .../Errors/InvalidModelStateException.cs | 352 +++++++++++++++--- .../Archiving/BroadcastCommentsController.cs | 4 +- .../TelevisionBroadcastsController.cs | 4 +- .../Archiving/TelevisionNetworksController.cs | 4 +- .../Archiving/TelevisionStationsController.cs | 4 +- .../CreateMusicTrackOperationsController.cs | 4 +- .../AtomicOperations/LyricsController.cs | 4 +- .../AtomicOperations/MusicTracksController.cs | 4 +- .../AtomicOperations/OperationsController.cs | 4 +- .../AtomicOperations/PerformersController.cs | 4 +- .../AtomicOperations/PlaylistsController.cs | 4 +- .../RecordCompaniesController.cs | 4 +- .../TextLanguagesController.cs | 4 +- .../CompositeKeys/CarsController.cs | 4 +- .../CompositeKeys/DealershipsController.cs | 4 +- .../CompositeKeys/EnginesController.cs | 4 +- .../OperationsController.cs | 4 +- .../ContentNegotiation/PoliciesController.cs | 4 +- .../ToothbrushesController.cs | 4 +- .../CustomRoutes/CiviliansController.cs | 4 +- .../CustomRoutes/TownsController.cs | 4 +- .../EagerLoading/BuildingsController.cs | 4 +- .../EagerLoading/StatesController.cs | 4 +- .../EagerLoading/StreetsController.cs | 4 +- .../ConsumerArticlesController.cs | 4 +- .../ThrowingArticlesController.cs | 4 +- .../HostingInIIS/ArtGalleriesController.cs | 4 +- .../HostingInIIS/PaintingsController.cs | 4 +- .../IdObfuscation/BankAccountsController.cs | 4 +- .../IdObfuscation/DebitCardsController.cs | 4 +- .../ObfuscatedIdentifiableController.cs | 4 +- .../ModelState/ModelStateValidationTests.cs | 4 +- .../ModelState/SystemDirectoriesController.cs | 4 +- .../ModelState/SystemFilesController.cs | 4 +- .../RequestBody/WorkflowsController.cs | 4 +- .../Links/PhotoAlbumsController.cs | 4 +- .../Links/PhotoLocationsController.cs | 4 +- .../Links/PhotosController.cs | 4 +- .../Logging/AuditEntriesController.cs | 4 +- .../Meta/ProductFamiliesController.cs | 4 +- .../Meta/SupportTicketsController.cs | 4 +- .../Microservices/DomainGroupsController.cs | 4 +- .../Microservices/DomainUsersController.cs | 4 +- .../MultiTenancy/WebProductsController.cs | 4 +- .../MultiTenancy/WebShopsController.cs | 4 +- .../DivingBoardsController.cs | 4 +- .../SwimmingPoolsController.cs | 4 +- .../QueryStrings/BlogPostsController.cs | 4 +- .../QueryStrings/BlogsController.cs | 4 +- .../QueryStrings/CalendarsController.cs | 4 +- .../QueryStrings/CommentsController.cs | 4 +- .../FilterableResourcesController.cs | 4 +- .../QueryStrings/WebAccountsController.cs | 4 +- .../ReadWrite/RgbColorsController.cs | 4 +- .../ReadWrite/UserAccountsController.cs | 4 +- .../ReadWrite/WorkItemGroupsController.cs | 4 +- .../ReadWrite/WorkItemsController.cs | 4 +- .../CustomersController.cs | 4 +- .../RequiredRelationships/OrdersController.cs | 4 +- .../ShipmentsController.cs | 4 +- .../GiftCertificatesController.cs | 4 +- .../PostOfficesController.cs | 4 +- .../Reading/MoonsController.cs | 4 +- .../Reading/PlanetsController.cs | 4 +- .../Reading/StarsController.cs | 4 +- .../Serialization/ScholarshipsController.cs | 4 +- .../Serialization/StudentsController.cs | 4 +- .../ResourceInheritance/MenController.cs | 4 +- .../BlockingHttpDeleteController.cs | 4 +- .../BlockingHttpPatchController.cs | 4 +- .../BlockingHttpPostController.cs | 4 +- .../BlockingWritesController.cs | 4 +- .../MeetingAttendeesController.cs | 4 +- .../Serialization/MeetingsController.cs | 4 +- .../SoftDeletion/CompaniesController.cs | 4 +- .../SoftDeletion/DepartmentsController.cs | 4 +- .../ZeroKeys/GamesController.cs | 4 +- .../ZeroKeys/MapsController.cs | 4 +- .../ZeroKeys/PlayersController.cs | 4 +- .../ModelStateValidationTests.cs | 162 ++++++++ .../Controllers/BaseJsonApiControllerTests.cs | 90 +++-- 104 files changed, 777 insertions(+), 362 deletions(-) delete mode 100644 src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs create mode 100644 test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs diff --git a/CSharpGuidelinesAnalyzer.config b/CSharpGuidelinesAnalyzer.config index acd0856299..89b568e155 100644 --- a/CSharpGuidelinesAnalyzer.config +++ b/CSharpGuidelinesAnalyzer.config @@ -1,5 +1,5 @@ - + diff --git a/docs/getting-started/step-by-step.md b/docs/getting-started/step-by-step.md index 75661780cc..adc9bdf8e4 100644 --- a/docs/getting-started/step-by-step.md +++ b/docs/getting-started/step-by-step.md @@ -69,9 +69,9 @@ where `TResource` is the model that inherits from `Identifiable`. ```c# public class PeopleController : JsonApiController { - public PeopleController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/docs/usage/extensibility/controllers.md b/docs/usage/extensibility/controllers.md index 2d5d24cec9..9fc9d380f1 100644 --- a/docs/usage/extensibility/controllers.md +++ b/docs/usage/extensibility/controllers.md @@ -5,9 +5,9 @@ You need to create controllers that inherit from `JsonApiController { - public ArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } @@ -24,9 +24,9 @@ This approach is ok, but introduces some boilerplate that can easily be avoided. ```c# public class ArticlesController : BaseJsonApiController { - public ArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } @@ -61,9 +61,9 @@ An attempt to use one of the blacklisted methods will result in a HTTP 405 Metho [HttpReadOnly] public class ArticlesController : BaseJsonApiController { - public ArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } @@ -80,9 +80,9 @@ For more information about resource service injection, see [Replacing injected s ```c# public class ReportsController : BaseJsonApiController { - public ReportsController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IGetAllService getAllService) - : base(options, loggerFactory, getAllService) + public ReportsController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IGetAllService getAllService) + : base(options, resourceGraph, loggerFactory, getAllService) { } diff --git a/docs/usage/extensibility/services.md b/docs/usage/extensibility/services.md index 83bb7e5ffa..1842a44606 100644 --- a/docs/usage/extensibility/services.md +++ b/docs/usage/extensibility/services.md @@ -156,9 +156,10 @@ Then in the controller, you should inherit from the base controller and pass the ```c# public class ArticlesController : BaseJsonApiController { - public ArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, - ICreateService create, IDeleteService delete) - : base(options, loggerFactory, create: create, delete: delete) + public ArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, ICreateService create, + IDeleteService delete) + : base(options, resourceGraph, loggerFactory, create: create, delete: delete) { } diff --git a/docs/usage/routing.md b/docs/usage/routing.md index 79ad1a1e05..c68914a04a 100644 --- a/docs/usage/routing.md +++ b/docs/usage/routing.md @@ -29,9 +29,9 @@ public class OrderLine : Identifiable public class OrderLineController : JsonApiController { - public OrderLineController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public OrderLineController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } @@ -65,9 +65,9 @@ It is possible to bypass the default routing convention for a controller. [Route("v1/custom/route/lines-in-order"), DisableRoutingConvention] public class OrderLineController : JsonApiController { - public OrderLineController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public OrderLineController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/docs/usage/writing/bulk-batch-operations.md b/docs/usage/writing/bulk-batch-operations.md index 549ff68025..21fe04b636 100644 --- a/docs/usage/writing/bulk-batch-operations.md +++ b/docs/usage/writing/bulk-batch-operations.md @@ -17,10 +17,10 @@ To enable operations, add a controller to your project that inherits from `JsonA ```c# public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, - IOperationsProcessor processor, IJsonApiRequest request, - ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, + ILoggerFactory loggerFactory, IOperationsProcessor processor, + IJsonApiRequest request, ITargetedFields targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } } diff --git a/src/Examples/GettingStarted/Controllers/BooksController.cs b/src/Examples/GettingStarted/Controllers/BooksController.cs index 928dddc82b..3f049429cd 100644 --- a/src/Examples/GettingStarted/Controllers/BooksController.cs +++ b/src/Examples/GettingStarted/Controllers/BooksController.cs @@ -8,8 +8,8 @@ namespace GettingStarted.Controllers { public sealed class BooksController : JsonApiController { - public BooksController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BooksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/GettingStarted/Controllers/PeopleController.cs b/src/Examples/GettingStarted/Controllers/PeopleController.cs index cef47189ae..41eb31c747 100644 --- a/src/Examples/GettingStarted/Controllers/PeopleController.cs +++ b/src/Examples/GettingStarted/Controllers/PeopleController.cs @@ -8,8 +8,8 @@ namespace GettingStarted.Controllers { public sealed class PeopleController : JsonApiController { - public PeopleController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs index 4851336a9a..84c39d348e 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs @@ -9,9 +9,9 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs index 36c772b29b..f9894136d9 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs @@ -8,8 +8,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class PeopleController : JsonApiController { - public PeopleController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs index 98b5051774..b08af4e399 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TagsController.cs @@ -8,8 +8,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class TagsController : JsonApiController { - public TagsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TagsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs index 0eaa59b1ca..0f2769e5cd 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs @@ -8,8 +8,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class TodoItemsController : JsonApiController { - public TodoItemsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TodoItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs index 6fc542cf1d..ad403367f2 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs @@ -8,8 +8,8 @@ namespace MultiDbContextExample.Controllers { public sealed class ResourceAsController : JsonApiController { - public ResourceAsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ResourceAsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs index 0316fbde1b..dd058290e8 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs @@ -8,8 +8,8 @@ namespace MultiDbContextExample.Controllers { public sealed class ResourceBsController : JsonApiController { - public ResourceBsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ResourceBsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs index d50fa1183f..c8bccc3c3e 100644 --- a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs +++ b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs @@ -8,8 +8,8 @@ namespace NoEntityFrameworkExample.Controllers { public sealed class WorkItemsController : JsonApiController { - public WorkItemsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/src/Examples/ReportsExample/Controllers/ReportsController.cs b/src/Examples/ReportsExample/Controllers/ReportsController.cs index db1b73ec57..8c177e7db0 100644 --- a/src/Examples/ReportsExample/Controllers/ReportsController.cs +++ b/src/Examples/ReportsExample/Controllers/ReportsController.cs @@ -12,8 +12,8 @@ namespace ReportsExample.Controllers [Route("api/[controller]")] public class ReportsController : BaseJsonApiController { - public ReportsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService getAllService) - : base(options, loggerFactory, getAllService) + public ReportsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IGetAllService getAllService) + : base(options, resourceGraph, loggerFactory, getAllService) { } diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs index 7dcd4d3ef2..e455cf5775 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs @@ -25,6 +25,7 @@ public abstract class BaseJsonApiController : CoreJsonApiControl where TResource : class, IIdentifiable { private readonly IJsonApiOptions _options; + private readonly IResourceGraph _resourceGraph; private readonly IGetAllService? _getAll; private readonly IGetByIdService? _getById; private readonly IGetSecondaryService? _getSecondary; @@ -40,17 +41,17 @@ public abstract class BaseJsonApiController : CoreJsonApiControl /// /// Creates an instance from a read/write service. /// - protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : this(options, loggerFactory, resourceService, resourceService) + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : this(options, resourceGraph, loggerFactory, resourceService, resourceService) { } /// /// Creates an instance from separate services for reading and writing. /// - protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceQueryService? queryService = null, + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceQueryService? queryService = null, IResourceCommandService? commandService = null) - : this(options, loggerFactory, queryService, queryService, queryService, queryService, commandService, commandService, commandService, + : this(options, resourceGraph, loggerFactory, queryService, queryService, queryService, queryService, commandService, commandService, commandService, commandService, commandService, commandService) { } @@ -58,7 +59,7 @@ protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFa /// /// Creates an instance from separate services for the various individual read and write methods. /// - protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService? getAll = null, + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IGetAllService? getAll = null, IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, IGetRelationshipService? getRelationship = null, ICreateService? create = null, IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, @@ -66,9 +67,11 @@ protected BaseJsonApiController(IJsonApiOptions options, ILoggerFactory loggerFa IRemoveFromRelationshipService? removeFromRelationship = null) { ArgumentGuard.NotNull(options, nameof(options)); + ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); ArgumentGuard.NotNull(loggerFactory, nameof(loggerFactory)); _options = options; + _resourceGraph = resourceGraph; _traceWriter = new TraceLogWriter>(loggerFactory); _getAll = getAll; _getById = getById; @@ -184,8 +187,7 @@ public virtual async Task PostAsync([FromBody] TResource resource if (_options.ValidateModelState && !ModelState.IsValid) { - throw new InvalidModelStateException(ModelState, typeof(TResource), _options.IncludeExceptionStackTraceInErrors, - _options.SerializerOptions.PropertyNamingPolicy); + throw new InvalidModelStateException(ModelState, typeof(TResource), _options.IncludeExceptionStackTraceInErrors, _resourceGraph); } TResource? newResource = await _create.CreateAsync(resource, cancellationToken); @@ -261,8 +263,7 @@ public virtual async Task PatchAsync(TId id, [FromBody] TResource if (_options.ValidateModelState && !ModelState.IsValid) { - throw new InvalidModelStateException(ModelState, typeof(TResource), _options.IncludeExceptionStackTraceInErrors, - _options.SerializerOptions.PropertyNamingPolicy); + throw new InvalidModelStateException(ModelState, typeof(TResource), _options.IncludeExceptionStackTraceInErrors, _resourceGraph); } TResource? updated = await _update.UpdateAsync(id, resource, cancellationToken); diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs index 2b7344918e..ebd3d9833e 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs @@ -23,21 +23,24 @@ namespace JsonApiDotNetCore.Controllers public abstract class BaseJsonApiOperationsController : CoreJsonApiController { private readonly IJsonApiOptions _options; + private readonly IResourceGraph _resourceGraph; private readonly IOperationsProcessor _processor; private readonly IJsonApiRequest _request; private readonly ITargetedFields _targetedFields; private readonly TraceLogWriter _traceWriter; - protected BaseJsonApiOperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, - IJsonApiRequest request, ITargetedFields targetedFields) + protected BaseJsonApiOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) { ArgumentGuard.NotNull(options, nameof(options)); + ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); ArgumentGuard.NotNull(loggerFactory, nameof(loggerFactory)); ArgumentGuard.NotNull(processor, nameof(processor)); ArgumentGuard.NotNull(request, nameof(request)); ArgumentGuard.NotNull(targetedFields, nameof(targetedFields)); _options = options; + _resourceGraph = resourceGraph; _processor = processor; _request = request; _targetedFields = targetedFields; @@ -122,16 +125,16 @@ public virtual async Task PostOperationsAsync([FromBody] IList result != null) ? Ok(results) : NoContent(); } - protected virtual void ValidateModelState(IEnumerable operations) + protected virtual void ValidateModelState(IList operations) { // We must validate the resource inside each operation manually, because they are typed as IIdentifiable. // Instead of validating IIdentifiable we need to validate the resource runtime-type. - var violations = new List(); - - int index = 0; using IDisposable _ = new RevertRequestStateOnDispose(_request, _targetedFields); + int operationIndex = 0; + var requestModelState = new Dictionary(); + foreach (OperationContainer operation in operations) { if (operation.Request.WriteOperation is WriteOperationKind.CreateResource or WriteOperationKind.UpdateResource) @@ -142,38 +145,35 @@ protected virtual void ValidateModelState(IEnumerable operat var validationContext = new ActionContext(); ObjectValidator.Validate(validationContext, null, string.Empty, operation.Resource); - if (!validationContext.ModelState.IsValid) - { - AddValidationErrors(validationContext.ModelState, operation.Resource.GetType(), index, violations); - } + CopyValidationErrorsFromOperation(validationContext.ModelState, operationIndex, requestModelState); } - index++; + operationIndex++; } - if (violations.Any()) + if (requestModelState.Any()) { - throw new InvalidModelStateException(violations, _options.IncludeExceptionStackTraceInErrors, _options.SerializerOptions.PropertyNamingPolicy); + throw new InvalidModelStateException(requestModelState, typeof(IList), _options.IncludeExceptionStackTraceInErrors, + _resourceGraph, + (collectionType, index) => collectionType == typeof(IList) ? operations[index].Resource.GetType() : null); } } - private static void AddValidationErrors(ModelStateDictionary modelState, Type resourceClrType, int operationIndex, List violations) + private static void CopyValidationErrorsFromOperation(ModelStateDictionary operationModelState, int operationIndex, + Dictionary requestModelState) { - foreach ((string propertyName, ModelStateEntry entry) in modelState) + if (!operationModelState.IsValid) { - AddValidationErrors(entry, propertyName, resourceClrType, operationIndex, violations); - } - } - - private static void AddValidationErrors(ModelStateEntry entry, string propertyName, Type resourceClrType, int operationIndex, - List violations) - { - foreach (ModelError error in entry.Errors) - { - string prefix = $"/atomic:operations[{operationIndex}]/data/attributes/"; - var violation = new ModelStateViolation(prefix, propertyName, resourceClrType, error); + foreach (string key in operationModelState.Keys) + { + ModelStateEntry entry = operationModelState[key]; - violations.Add(violation); + if (entry.ValidationState == ModelValidationState.Invalid) + { + string operationKey = $"[{operationIndex}].{nameof(OperationContainer.Resource)}." + key; + requestModelState[operationKey] = entry; + } + } } } } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs index 3e463e9b4a..5c893edcc1 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs @@ -26,8 +26,8 @@ public abstract class JsonApiCommandController : BaseJsonApiCont /// /// Creates an instance from a write-only service. /// - protected JsonApiCommandController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceCommandService commandService) - : base(options, loggerFactory, null, commandService) + protected JsonApiCommandController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceCommandService commandService) + : base(options, resourceGraph, loggerFactory, null, commandService) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index 1bccc8478a..c82cf662f3 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -23,19 +23,19 @@ public abstract class JsonApiController : BaseJsonApiController< where TResource : class, IIdentifiable { /// - protected JsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } /// - protected JsonApiController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService? getAll = null, + protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IGetAllService? getAll = null, IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, IGetRelationshipService? getRelationship = null, ICreateService? create = null, IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, ISetRelationshipService? setRelationship = null, IDeleteService? delete = null, IRemoveFromRelationshipService? removeFromRelationship = null) - : base(options, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, delete, + : base(options, resourceGraph, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, delete, removeFromRelationship) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs index 7e8e4956ac..84f032c7e8 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs @@ -16,9 +16,9 @@ namespace JsonApiDotNetCore.Controllers /// public abstract class JsonApiOperationsController : BaseJsonApiOperationsController { - protected JsonApiOperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, + protected JsonApiOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs index 05446ca2b1..d4f1bf6d42 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs @@ -25,8 +25,8 @@ public abstract class JsonApiQueryController : BaseJsonApiContro /// /// Creates an instance from a read-only service. /// - protected JsonApiQueryController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceQueryService queryService) - : base(options, loggerFactory, queryService) + protected JsonApiQueryController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceQueryService queryService) + : base(options, resourceGraph, loggerFactory, queryService) { } diff --git a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs b/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs deleted file mode 100644 index 49a935a7ef..0000000000 --- a/src/JsonApiDotNetCore/Controllers/ModelStateViolation.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using JetBrains.Annotations; -using Microsoft.AspNetCore.Mvc.ModelBinding; - -namespace JsonApiDotNetCore.Controllers -{ - /// - /// Represents the violation of a model state validation rule. - /// - [PublicAPI] - public sealed class ModelStateViolation - { - public string Prefix { get; } - public string PropertyName { get; } - public Type ResourceClrType { get; set; } - public ModelError Error { get; } - - public ModelStateViolation(string prefix, string propertyName, Type resourceClrType, ModelError error) - { - ArgumentGuard.NotNullNorEmpty(prefix, nameof(prefix)); - ArgumentGuard.NotNullNorEmpty(propertyName, nameof(propertyName)); - ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); - ArgumentGuard.NotNull(error, nameof(error)); - - Prefix = prefix; - PropertyName = propertyName; - ResourceClrType = resourceClrType; - Error = error; - } - } -} diff --git a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs index c0895d63ac..bbb78e293d 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs @@ -4,9 +4,10 @@ using System.Linq; using System.Net; using System.Reflection; -using System.Text.Json; +using System.Text.Json.Serialization; using JetBrains.Annotations; -using JsonApiDotNetCore.Controllers; +using JsonApiDotNetCore.Configuration; +using JsonApiDotNetCore.Resources; using JsonApiDotNetCore.Resources.Annotations; using JsonApiDotNetCore.Serialization.Objects; using Microsoft.AspNetCore.Mvc.ModelBinding; @@ -19,97 +20,172 @@ namespace JsonApiDotNetCore.Errors [PublicAPI] public sealed class InvalidModelStateException : JsonApiException { - public InvalidModelStateException(ModelStateDictionary modelState, Type resourceClrType, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy? namingPolicy) - : this(FromModelStateDictionary(modelState, resourceClrType), includeExceptionStackTraceInErrors, namingPolicy) + public InvalidModelStateException(IReadOnlyDictionary modelState, Type modelType, bool includeExceptionStackTraceInErrors, + IResourceGraph resourceGraph, Func? getCollectionElementTypeCallback = null) + : base(FromModelStateDictionary(modelState, modelType, resourceGraph, includeExceptionStackTraceInErrors, getCollectionElementTypeCallback)) { } - public InvalidModelStateException(IEnumerable violations, bool includeExceptionStackTraceInErrors, JsonNamingPolicy? namingPolicy) - : base(FromModelStateViolations(violations, includeExceptionStackTraceInErrors, namingPolicy)) - { - } - - private static IEnumerable FromModelStateDictionary(ModelStateDictionary modelState, Type resourceClrType) + private static IEnumerable FromModelStateDictionary(IReadOnlyDictionary modelState, Type modelType, IResourceGraph resourceGraph, + bool includeExceptionStackTraceInErrors, Func? getCollectionElementTypeCallback) { ArgumentGuard.NotNull(modelState, nameof(modelState)); - ArgumentGuard.NotNull(resourceClrType, nameof(resourceClrType)); + ArgumentGuard.NotNull(modelType, nameof(modelType)); + ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); - var violations = new List(); + List errorObjects = new(); - foreach ((string propertyName, ModelStateEntry entry) in modelState) + foreach ((ModelStateEntry entry, string? sourcePointer) in ResolveSourcePointers(modelState, modelType, resourceGraph, + getCollectionElementTypeCallback)) { - AddValidationErrors(entry, propertyName, resourceClrType, violations); + AppendToErrorObjects(entry, errorObjects, sourcePointer, includeExceptionStackTraceInErrors); } - return violations; + return errorObjects; } - private static void AddValidationErrors(ModelStateEntry entry, string propertyName, Type resourceClrType, List violations) + private static IEnumerable<(ModelStateEntry entry, string? sourcePointer)> ResolveSourcePointers( + IReadOnlyDictionary modelState, Type modelType, IResourceGraph resourceGraph, + Func? getCollectionElementTypeCallback) { - foreach (ModelError error in entry.Errors) + foreach (string key in modelState.Keys) { - var violation = new ModelStateViolation("/data/attributes/", propertyName, resourceClrType, error); - violations.Add(violation); + var rootSegment = ModelStateKeySegment.Create(modelType, key, getCollectionElementTypeCallback); + string? sourcePointer = ResolveSourcePointer(rootSegment, resourceGraph); + + yield return (modelState[key], sourcePointer); } } - private static IEnumerable FromModelStateViolations(IEnumerable violations, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy? namingPolicy) + private static string? ResolveSourcePointer(ModelStateKeySegment segment, IResourceGraph resourceGraph) { - ArgumentGuard.NotNull(violations, nameof(violations)); - - return violations.SelectMany(violation => FromModelStateViolation(violation, includeExceptionStackTraceInErrors, namingPolicy)); - } + if (segment is ArrayIndexerSegment indexerSegment) + { + return ResolveSourcePointerInArrayIndexer(indexerSegment, resourceGraph); + } - private static IEnumerable FromModelStateViolation(ModelStateViolation violation, bool includeExceptionStackTraceInErrors, - JsonNamingPolicy? namingPolicy) - { - if (violation.Error.Exception is JsonApiException jsonApiException) + if (segment is PropertySegment propertySegment) { - foreach (ErrorObject error in jsonApiException.Errors) + if (segment.IsInComplexType) { - yield return error; + return ResolveSourcePointerInComplexType(propertySegment, resourceGraph); + } + + if (propertySegment.PropertyName == nameof(OperationContainer.Resource) && propertySegment.Parent != null && + propertySegment.Parent.ModelType == typeof(IList)) + { + // Special case: Stepping over OperationContainer.Resource property. + + if (segment.GetNextSegment(propertySegment.ModelType, false, $"{segment.SourcePointer}/data") is not PropertySegment nextPropertySegment) + { + return null; + } + + propertySegment = nextPropertySegment; } + + return ResolveSourcePointerInResourceField(propertySegment, resourceGraph); } - else - { - string attributeName = GetDisplayNameForProperty(violation.PropertyName, violation.ResourceClrType, namingPolicy); - string attributePath = $"{violation.Prefix}{attributeName}"; - yield return FromModelError(violation.Error, attributePath, includeExceptionStackTraceInErrors); + return segment.SourcePointer; + } + + private static string? ResolveSourcePointerInArrayIndexer(ArrayIndexerSegment segment, IResourceGraph resourceGraph) + { + string sourcePointer = $"{segment.SourcePointer ?? "/atomic:operations"}[{segment.ArrayIndex}]"; + Type elementType = segment.GetCollectionElementType(); + + ModelStateKeySegment? nextSegment = segment.GetNextSegment(elementType, segment.IsInComplexType, sourcePointer); + return nextSegment != null ? ResolveSourcePointer(nextSegment, resourceGraph) : sourcePointer; + } + + private static string? ResolveSourcePointerInComplexType(PropertySegment segment, IResourceGraph resourceGraph) + { + PropertyInfo? property = segment.ModelType.GetProperty(segment.PropertyName); + + if (property == null) + { + return null; } + + string publicName = PropertySegment.GetPublicNameForProperty(property); + string? sourcePointer = segment.SourcePointer != null ? $"{segment.SourcePointer}/{publicName}" : null; + + ModelStateKeySegment? nextSegment = segment.GetNextSegment(property.PropertyType, true, sourcePointer); + return nextSegment != null ? ResolveSourcePointer(nextSegment, resourceGraph) : sourcePointer; } - private static string GetDisplayNameForProperty(string propertyName, Type resourceClrType, JsonNamingPolicy? namingPolicy) + private static string? ResolveSourcePointerInResourceField(PropertySegment segment, IResourceGraph resourceGraph) { - PropertyInfo? property = resourceClrType.GetProperty(propertyName); + ResourceType? resourceType = resourceGraph.FindResourceType(segment.ModelType); - if (property != null) + if (resourceType != null) { - var attrAttribute = property.GetCustomAttribute(); + AttrAttribute? attribute = resourceType.FindAttributeByPropertyName(segment.PropertyName); - if (attrAttribute?.PublicName != null) + if (attribute != null) { - return attrAttribute.PublicName; + return ResolveSourcePointerInAttribute(segment, attribute, resourceGraph); } - return namingPolicy != null ? namingPolicy.ConvertName(property.Name) : property.Name; + RelationshipAttribute? relationship = resourceType.FindRelationshipByPropertyName(segment.PropertyName); + + if (relationship != null) + { + return ResolveSourcePointerInRelationship(segment, relationship, resourceGraph); + } } - return propertyName; + return null; + } + + private static string? ResolveSourcePointerInAttribute(PropertySegment segment, AttrAttribute attribute, IResourceGraph resourceGraph) + { + string sourcePointer = attribute.Property.Name == nameof(Identifiable.Id) + ? $"{segment.SourcePointer ?? "/data"}/{attribute.PublicName}" + : $"{segment.SourcePointer ?? "/data"}/attributes/{attribute.PublicName}"; + + ModelStateKeySegment? nextSegment = segment.GetNextSegment(attribute.Property.PropertyType, true, sourcePointer); + return nextSegment != null ? ResolveSourcePointer(nextSegment, resourceGraph) : sourcePointer; + } + + private static string? ResolveSourcePointerInRelationship(PropertySegment segment, RelationshipAttribute relationship, IResourceGraph resourceGraph) + { + string sourcePointer = $"{segment.SourcePointer ?? "/data"}/relationships/{relationship.PublicName}/data"; + + ModelStateKeySegment? nextSegment = segment.GetNextSegment(relationship.RightType.ClrType, false, sourcePointer); + return nextSegment != null ? ResolveSourcePointer(nextSegment, resourceGraph) : sourcePointer; + } + + private static void AppendToErrorObjects(ModelStateEntry entry, List errorObjects, string? sourcePointer, + bool includeExceptionStackTraceInErrors) + { + foreach (ModelError error in entry.Errors) + { + if (error.Exception is JsonApiException jsonApiException) + { + errorObjects.AddRange(jsonApiException.Errors); + } + else + { + ErrorObject errorObject = FromModelError(error, sourcePointer, includeExceptionStackTraceInErrors); + errorObjects.Add(errorObject); + } + } } - private static ErrorObject FromModelError(ModelError modelError, string attributePath, bool includeExceptionStackTraceInErrors) + private static ErrorObject FromModelError(ModelError modelError, string? sourcePointer, bool includeExceptionStackTraceInErrors) { var error = new ErrorObject(HttpStatusCode.UnprocessableEntity) { Title = "Input validation failed.", Detail = modelError.ErrorMessage, - Source = new ErrorSource - { - Pointer = attributePath - } + Source = sourcePointer == null + ? null + : new ErrorSource + { + Pointer = sourcePointer + } }; if (includeExceptionStackTraceInErrors && modelError.Exception != null) @@ -126,5 +202,181 @@ private static ErrorObject FromModelError(ModelError modelError, string attribut return error; } + + /// + /// Base type that represents a segment in a ModelState key. + /// + private abstract class ModelStateKeySegment + { + private const char Dot = '.'; + private const char BracketOpen = '['; + private const char BracketClose = ']'; + private static readonly char[] KeySegmentStartTokens = ArrayFactory.Create(Dot, BracketOpen); + + // The right part of the full key, which nested segments are produced from. + private readonly string _nextKey; + + // Enables to resolve the runtime-type of a collection element, such as the resource type in an atomic:operation. + protected Func? GetCollectionElementTypeCallback { get; } + + // In case of a property, its declaring type. In case of an indexer, the collection type or collection element type (in case the parent is a relationship). + public Type ModelType { get; } + + // Indicates we're in a complex object, so to determine public name, inspect [JsonPropertyName] instead of [Attr], [HasOne] etc. + public bool IsInComplexType { get; } + + // The source pointer we've built up, so far. This is null whenever input is not recognized. + public string? SourcePointer { get; } + + public ModelStateKeySegment? Parent { get; } + + protected ModelStateKeySegment(Type modelType, bool isInComplexType, string nextKey, string? sourcePointer, ModelStateKeySegment? parent, + Func? getCollectionElementTypeCallback) + { + ArgumentGuard.NotNull(modelType, nameof(modelType)); + ArgumentGuard.NotNull(nextKey, nameof(nextKey)); + + ModelType = modelType; + IsInComplexType = isInComplexType; + _nextKey = nextKey; + SourcePointer = sourcePointer; + Parent = parent; + GetCollectionElementTypeCallback = getCollectionElementTypeCallback; + } + + public ModelStateKeySegment? GetNextSegment(Type modelType, bool isInComplexType, string? sourcePointer) + { + ArgumentGuard.NotNull(modelType, nameof(modelType)); + + return _nextKey == string.Empty + ? null + : CreateSegment(modelType, _nextKey, isInComplexType, this, sourcePointer, GetCollectionElementTypeCallback); + } + + public static ModelStateKeySegment Create(Type modelType, string key, Func? getCollectionElementTypeCallback) + { + ArgumentGuard.NotNull(modelType, nameof(modelType)); + ArgumentGuard.NotNull(key, nameof(key)); + + return CreateSegment(modelType, key, false, null, null, getCollectionElementTypeCallback); + } + + private static ModelStateKeySegment CreateSegment(Type modelType, string key, bool isInComplexType, ModelStateKeySegment? parent, + string? sourcePointer, Func? getCollectionElementTypeCallback) + { + string? segmentValue = null; + string? nextKey = null; + + int segmentEndIndex = key.IndexOfAny(KeySegmentStartTokens); + + if (segmentEndIndex == 0 && key[0] == BracketOpen) + { + int bracketCloseIndex = key.IndexOf(BracketClose); + + if (bracketCloseIndex != -1) + { + segmentValue = key[1.. bracketCloseIndex]; + + int nextKeyStartIndex = key.Length > bracketCloseIndex + 1 && key[bracketCloseIndex + 1] == Dot + ? bracketCloseIndex + 2 + : bracketCloseIndex + 1; + + nextKey = key[nextKeyStartIndex..]; + + if (int.TryParse(segmentValue, out int indexValue)) + { + return new ArrayIndexerSegment(indexValue, modelType, isInComplexType, nextKey, sourcePointer, parent, + getCollectionElementTypeCallback); + } + + // If the value between brackets is not numeric, consider it an unspeakable property. For example: + // "Foo[Bar]" instead of "Foo.Bar". Its unclear when this happens, but ASP.NET source contains tests for such keys. + } + } + + if (segmentValue == null) + { + segmentValue = segmentEndIndex == -1 ? key : key[..segmentEndIndex]; + + nextKey = segmentEndIndex != -1 && key.Length > segmentEndIndex && key[segmentEndIndex] == Dot + ? key[(segmentEndIndex + 1)..] + : key[segmentValue.Length..]; + } + + // Workaround for a quirk in ModelState validation. Some controller action methods have an 'id' parameter before the [FromBody] parameter. + // When a validation error occurs on top-level 'Id' in the request body, its key contains 'id' instead of 'Id' (the error message is correct, though). + // We compensate for that case here, so that we'll find 'Id' in the resource graph when building the source pointer. + if (segmentValue == "id") + { + segmentValue = "Id"; + } + + return new PropertySegment(segmentValue, modelType, isInComplexType, nextKey!, sourcePointer, parent, getCollectionElementTypeCallback); + } + } + + /// + /// Represents an array indexer in a ModelState key, such as "1" in "Customer.Orders[1].Amount". + /// + private sealed class ArrayIndexerSegment : ModelStateKeySegment + { + private static readonly CollectionConverter CollectionConverter = new(); + + public int ArrayIndex { get; } + + public ArrayIndexerSegment(int arrayIndex, Type modelType, bool isInComplexType, string nextKey, string? sourcePointer, + ModelStateKeySegment? parent, Func? getCollectionElementTypeCallback) + : base(modelType, isInComplexType, nextKey, sourcePointer, parent, getCollectionElementTypeCallback) + { + ArrayIndex = arrayIndex; + } + + public Type GetCollectionElementType() + { + Type? type = GetCollectionElementTypeCallback?.Invoke(ModelType, ArrayIndex); + return type ?? GetDeclaredCollectionElementType(); + } + + private Type GetDeclaredCollectionElementType() + { + if (ModelType != typeof(string)) + { + Type? elementType = CollectionConverter.TryGetCollectionElementType(ModelType); + + if (elementType != null) + { + return elementType; + } + } + + // In case of a to-many relationship, the ModelType already contains the element type. + return ModelType; + } + } + + /// + /// Represents a property in a ModelState key, such as "Orders" in "Customer.Orders[1].Amount". + /// + private sealed class PropertySegment : ModelStateKeySegment + { + public string PropertyName { get; } + + public PropertySegment(string propertyName, Type modelType, bool isInComplexType, string nextKey, string? sourcePointer, + ModelStateKeySegment? parent, Func? getCollectionElementTypeCallback) + : base(modelType, isInComplexType, nextKey, sourcePointer, parent, getCollectionElementTypeCallback) + { + ArgumentGuard.NotNull(propertyName, nameof(propertyName)); + + PropertyName = propertyName; + } + + public static string GetPublicNameForProperty(PropertyInfo property) + { + ArgumentGuard.NotNull(property, nameof(property)); + + var jsonNameAttribute = (JsonPropertyNameAttribute?)property.GetCustomAttribute(typeof(JsonPropertyNameAttribute)); + return jsonNameAttribute?.Name ?? property.Name; + } + } } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs index 9ffcaafcfe..b69a632842 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class BroadcastCommentsController : JsonApiController { - public BroadcastCommentsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BroadcastCommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs index ebef1678b5..8dc602c70e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionBroadcastsController : JsonApiController { - public TelevisionBroadcastsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TelevisionBroadcastsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs index dcf1dc3c3c..6be6a50295 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionNetworksController : JsonApiController { - public TelevisionNetworksController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TelevisionNetworksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs index a957641ee4..feb8d18b26 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionStationsController : JsonApiController { - public TelevisionStationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TelevisionStationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs index 4e61e01d42..dbf3147b27 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs @@ -21,9 +21,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations.Controllers [Route("/operations/musicTracks/create")] public sealed class CreateMusicTrackOperationsController : JsonApiOperationsController { - public CreateMusicTrackOperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, + public CreateMusicTrackOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs index 9b61e09a67..9331aa5ac8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class LyricsController : JsonApiController { - public LyricsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public LyricsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs index 7a4d0086ae..118899f0da 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class MusicTracksController : JsonApiController { - public MusicTracksController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MusicTracksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs index 388b9e4de3..b64a89af67 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs @@ -11,9 +11,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs index 9ebefcbaf2..ef83d87bae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class PerformersController : JsonApiController { - public PerformersController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PerformersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs index 1659a78c1b..fc4ed36d2e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class PlaylistsController : JsonApiController { - public PlaylistsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PlaylistsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs index 65f6e0223e..40cd08026c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class RecordCompaniesController : JsonApiController { - public RecordCompaniesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public RecordCompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs index 7f7b8ee3cd..01e9ace0b4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class TextLanguagesController : JsonApiController { - public TextLanguagesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public TextLanguagesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs index 9fa0da7a8e..1007917499 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class CarsController : JsonApiController { - public CarsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs index 35643c8d10..38bc3c5c7e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class DealershipsController : JsonApiController { - public DealershipsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DealershipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs index d22c23b954..e7f4f21530 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class EnginesController : JsonApiController { - public EnginesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public EnginesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs index 6fe7ba91a5..474277b163 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs @@ -11,9 +11,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ContentNegotiation { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) - : base(options, loggerFactory, processor, request, targetedFields) + : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs index 2c24e37a7e..1fcc84763b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ContentNegotiation { public sealed class PoliciesController : JsonApiController { - public PoliciesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PoliciesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs index 47f9b47027..b692aaa822 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs @@ -20,8 +20,8 @@ public sealed class ToothbrushesController : BaseJsonApiController resourceService) - : base(options, loggerFactory, resourceService) + public ToothbrushesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs index c3e72e1c0b..08a654df66 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs @@ -15,8 +15,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CustomRoutes [Route("world-civilians")] public sealed class CiviliansController : JsonApiController { - public CiviliansController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CiviliansController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs index 559f181de1..2e7859ba2d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs @@ -20,9 +20,9 @@ public sealed class TownsController : JsonApiController { private readonly CustomRouteDbContext _dbContext; - public TownsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService, + public TownsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService, CustomRouteDbContext dbContext) - : base(options, loggerFactory, resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { _dbContext = dbContext; } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs index 7ca155d8b4..747a19cb27 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class BuildingsController : JsonApiController { - public BuildingsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BuildingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs index c66f00b23d..caf929089f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class StatesController : JsonApiController { - public StatesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public StatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs index 469601ed85..9b76628542 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class StreetsController : JsonApiController { - public StreetsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public StreetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs index 36f7e15739..5498628ad0 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ExceptionHandling { public sealed class ConsumerArticlesController : JsonApiController { - public ConsumerArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ConsumerArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs index 3d48b6d767..2178d0e075 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ExceptionHandling { public sealed class ThrowingArticlesController : JsonApiController { - public ThrowingArticlesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ThrowingArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs index 5b96e1be2b..d4c1e1eca9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.HostingInIIS { public sealed class ArtGalleriesController : JsonApiController { - public ArtGalleriesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ArtGalleriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs index ea973ce4b3..7efc9277e7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs @@ -13,8 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.HostingInIIS [Route("custom/path/to/paintings-of-the-world")] public sealed class PaintingsController : JsonApiController { - public PaintingsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PaintingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs index ef8ab5f48b..7ebe290474 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs @@ -8,8 +8,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation { public sealed class BankAccountsController : ObfuscatedIdentifiableController { - public BankAccountsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BankAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs index b499b05303..2ecf9c0ee2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs @@ -8,8 +8,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation { public sealed class DebitCardsController : ObfuscatedIdentifiableController { - public DebitCardsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DebitCardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs index e94ca1e38a..02695b37cd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs @@ -17,8 +17,8 @@ public abstract class ObfuscatedIdentifiableController : BaseJsonApiC { private readonly HexadecimalCodec _codec = new(); - protected ObfuscatedIdentifiableController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + protected ObfuscatedIdentifiableController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs index 73bd61a77c..9a25186307 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs @@ -523,13 +523,13 @@ await _testContext.RunOnDatabaseAsync(async dbContext => error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error1.Title.Should().Be("Input validation failed."); error1.Detail.Should().Be("The field Id must match the regular expression '^[0-9]+$'."); - error1.Source.Pointer.Should().Be("/data/attributes/id"); + error1.Source.Pointer.Should().Be("/data/id"); ErrorObject error2 = responseDocument.Errors[1]; error2.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error2.Title.Should().Be("Input validation failed."); error2.Detail.Should().Be("The field Id must match the regular expression '^[0-9]+$'."); - error2.Source.Pointer.Should().Be("/data/attributes/Subdirectories[0].Id"); + error2.Source.Pointer.Should().Be("/data/relationships/subdirectories/data[0]/id"); } [Fact] diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs index 2a48a98f53..72520d7cad 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.ModelState { public sealed class SystemDirectoriesController : JsonApiController { - public SystemDirectoriesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public SystemDirectoriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs index db91d37299..be69ddf1f4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.ModelState { public sealed class SystemFilesController : JsonApiController { - public SystemFilesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public SystemFilesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs index 882f02ad99..b538c41b42 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.RequestBody { public sealed class WorkflowsController : JsonApiController { - public WorkflowsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WorkflowsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs index 05ec748f37..747f200c8f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotoAlbumsController : JsonApiController { - public PhotoAlbumsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PhotoAlbumsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs index 0b8366d676..a786606e60 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotoLocationsController : JsonApiController { - public PhotoLocationsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PhotoLocationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs index 95baaa379d..59a0dc9ab5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotosController : JsonApiController { - public PhotosController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PhotosController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs index 825dd30456..846a29fe83 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Logging { public sealed class AuditEntriesController : JsonApiController { - public AuditEntriesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public AuditEntriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs index 9bb013a3a2..822596a8f8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Meta { public sealed class ProductFamiliesController : JsonApiController { - public ProductFamiliesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ProductFamiliesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs index 87063a0bca..fa16e24db5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Meta { public sealed class SupportTicketsController : JsonApiController { - public SupportTicketsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public SupportTicketsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs index e4f9b951ff..3a88b10945 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices { public sealed class DomainGroupsController : JsonApiController { - public DomainGroupsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DomainGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs index 78e3c435c5..82255552bc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices { public sealed class DomainUsersController : JsonApiController { - public DomainUsersController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DomainUsersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs index e099c0e68f..e0e1448fe8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs @@ -13,8 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.MultiTenancy [Route("{countryCode}/products")] public sealed class WebProductsController : JsonApiController { - public WebProductsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WebProductsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs index ad50a657ab..b3a2a586c5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs @@ -13,8 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.MultiTenancy [Route("{countryCode}/shops")] public sealed class WebShopsController : JsonApiController { - public WebShopsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WebShopsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs index f4202962d1..0ae90d4d09 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions { public sealed class DivingBoardsController : JsonApiController { - public DivingBoardsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DivingBoardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs index 2c64cc9716..8b37514644 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions { public sealed class SwimmingPoolsController : JsonApiController { - public SwimmingPoolsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public SwimmingPoolsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs index 35a2d44abc..5540cb046e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class BlogPostsController : JsonApiController { - public BlogPostsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlogPostsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs index e8362b5a0d..f6a52e5779 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class BlogsController : JsonApiController { - public BlogsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlogsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs index 4ba6c962bf..fc4f3586fc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class CalendarsController : JsonApiController { - public CalendarsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CalendarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs index 4c5284df7b..39234a76b7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class CommentsController : JsonApiController { - public CommentsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs index aaf1bc8e85..ee8dda8b21 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings.Filtering { public sealed class FilterableResourcesController : JsonApiController { - public FilterableResourcesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public FilterableResourcesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs index 55550c5f10..281026c510 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class WebAccountsController : JsonApiController { - public WebAccountsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WebAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs index c2719f7781..d72a19eaa7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class RgbColorsController : JsonApiController { - public RgbColorsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public RgbColorsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs index b93c0d667d..5eff1e39ca 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class UserAccountsController : JsonApiController { - public UserAccountsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public UserAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs index 23031258bd..95fadf3eb1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class WorkItemGroupsController : JsonApiController { - public WorkItemGroupsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WorkItemGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs index a9e96279c5..e0c06fcd06 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class WorkItemsController : JsonApiController { - public WorkItemsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs index 65dd76ef73..fd4ba7983f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class CustomersController : JsonApiController { - public CustomersController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CustomersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs index 3fc62992ec..3d03cc3955 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class OrdersController : JsonApiController { - public OrdersController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public OrdersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs index a0572212ca..da106855c7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class ShipmentsController : JsonApiController { - public ShipmentsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ShipmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs index d720f8a6bc..abb0e58466 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceConstructorInjection { public sealed class GiftCertificatesController : JsonApiController { - public GiftCertificatesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public GiftCertificatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs index ee3ef0ebd9..1fd9649621 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceConstructorInjection { public sealed class PostOfficesController : JsonApiController { - public PostOfficesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PostOfficesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs index 6c6780f6a4..a296caf5aa 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { public sealed class MoonsController : JsonApiController { - public MoonsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MoonsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs index 70ac77ecca..367a06ca8a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { public sealed class PlanetsController : JsonApiController { - public PlanetsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PlanetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs index d223451796..c9dad2f31c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { public sealed class StarsController : JsonApiController { - public StarsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public StarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs index ca04389d8d..dd74896699 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Serializat { public sealed class ScholarshipsController : JsonApiController { - public ScholarshipsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ScholarshipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs index bfbef34a7e..141df9a0ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Serializat { public sealed class StudentsController : JsonApiController { - public StudentsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public StudentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs index 93c0ae618f..f8d64298dc 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceInheritance { public sealed class MenController : JsonApiController { - public MenController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MenController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs index f2bd333d07..825d94dbc8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs @@ -13,8 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [DisableQueryString(JsonApiQueryStringParameters.Sort | JsonApiQueryStringParameters.Page)] public sealed class BlockingHttpDeleteController : JsonApiController { - public BlockingHttpDeleteController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlockingHttpDeleteController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs index 48142e595b..d8ffaed221 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs @@ -11,8 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [NoHttpPatch] public sealed class BlockingHttpPatchController : JsonApiController { - public BlockingHttpPatchController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlockingHttpPatchController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs index 2265786efb..59695832fd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs @@ -11,8 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [NoHttpPost] public sealed class BlockingHttpPostController : JsonApiController { - public BlockingHttpPostController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlockingHttpPostController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs index 15c4268f37..47a4d594c9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs @@ -12,8 +12,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [DisableQueryString("skipCache")] public sealed class BlockingWritesController : JsonApiController { - public BlockingWritesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public BlockingWritesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs index ba49ceb126..30512ff165 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Serialization { public sealed class MeetingAttendeesController : JsonApiController { - public MeetingAttendeesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MeetingAttendeesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs index 77e103e270..fccfcb1e72 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Serialization { public sealed class MeetingsController : JsonApiController { - public MeetingsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MeetingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs index 23243327c8..128bd11a9a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.SoftDeletion { public sealed class CompaniesController : JsonApiController { - public CompaniesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public CompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs index 4295b55600..a8c69b0d14 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.SoftDeletion { public sealed class DepartmentsController : JsonApiController { - public DepartmentsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public DepartmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs index 68d9e6cd5e..88ef07bf9f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ZeroKeys { public sealed class GamesController : JsonApiController { - public GamesController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public GamesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs index 48f55c061b..09a7bd78f4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs @@ -10,8 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ZeroKeys { public sealed class MapsController : JsonApiController { - public MapsController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public MapsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs index e59181cc68..c247b6b248 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ZeroKeys { public sealed class PlayersController : JsonApiController { - public PlayersController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public PlayersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } } diff --git a/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs new file mode 100644 index 0000000000..0b61f55f5f --- /dev/null +++ b/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Text.Json.Serialization; +using FluentAssertions; +using JetBrains.Annotations; +using JsonApiDotNetCore.Configuration; +using JsonApiDotNetCore.Errors; +using JsonApiDotNetCore.Resources; +using JsonApiDotNetCore.Resources.Annotations; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging.Abstractions; +using TestBuildingBlocks; +using Xunit; + +namespace JsonApiDotNetCoreTests.UnitTests.ModelStateValidation +{ + public sealed class ModelStateValidationTests + { + [Theory] + [InlineData("", null)] + [InlineData("NotMappedInParent", null)] + [InlineData("Id", "/data/id")] + [InlineData("One", "/data/attributes/publicNameOfOne")] + [InlineData("ComplexObject", "/data/attributes/publicNameOfComplexObject")] + [InlineData("ComplexObject.First", "/data/attributes/publicNameOfComplexObject/jsonFirst")] + [InlineData("ComplexObject.ParentObject.First", "/data/attributes/publicNameOfComplexObject/jsonParentObject/jsonFirst")] + [InlineData("ComplexObject.Elements[0]", "/data/attributes/publicNameOfComplexObject/jsonElements[0]")] + [InlineData("ComplexObject.Elements[0].First", "/data/attributes/publicNameOfComplexObject/jsonElements[0]/jsonFirst")] + [InlineData("[ComplexObject][Elements][0][First]", "/data/attributes/publicNameOfComplexObject/jsonElements[0]/jsonFirst")] + [InlineData("ComplexList", "/data/attributes/publicNameOfComplexList")] + [InlineData("ComplexList[0].First", "/data/attributes/publicNameOfComplexList[0]/jsonFirst")] + [InlineData("PrimaryChild", "/data/relationships/publicNameOfPrimaryChild/data")] + [InlineData("PrimaryChild.NotMappedInChild", null)] + [InlineData("PrimaryChild.Id", "/data/relationships/publicNameOfPrimaryChild/data/id")] + [InlineData("Children[0]", "/data/relationships/publicNameOfChildren/data[0]")] + [InlineData("Children[0].NotMappedInChild", null)] + [InlineData("Children[0].Id", "/data/relationships/publicNameOfChildren/data[0]/id")] + public void Renders_JSON_path_for_ModelState_key_in_resource_request(string modelStateKey, string? expectedJsonPath) + { + // Arrange + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Add().Build(); + + var modelState = new ModelStateDictionary(); + modelState.AddModelError(modelStateKey, "(ignored error message)"); + + // Act + var exception = new InvalidModelStateException(modelState, typeof(Parent), false, resourceGraph); + + // Assert + exception.Errors.Should().HaveCount(1); + + if (expectedJsonPath == null) + { + exception.Errors[0].Source.Should().BeNull(); + } + else + { + exception.Errors[0].Source.Should().NotBeNull(); + exception.Errors[0].Source!.Pointer.Should().Be(expectedJsonPath); + } + } + + [Theory] + [InlineData("[0]", "/atomic:operations[0]")] + [InlineData("[0].Resource", null)] + [InlineData("[0].Resource.NotMappedInParent", null)] + [InlineData("[0].Resource.Id", "/atomic:operations[0]/data/id")] + [InlineData("[0].Resource.One", "/atomic:operations[0]/data/attributes/publicNameOfOne")] + [InlineData("[0].Resource.ComplexObject", "/atomic:operations[0]/data/attributes/publicNameOfComplexObject")] + [InlineData("[0].Resource.ComplexObject.First", "/atomic:operations[0]/data/attributes/publicNameOfComplexObject/jsonFirst")] + [InlineData("[0].Resource.ComplexObject.ParentObject.First", + "/atomic:operations[0]/data/attributes/publicNameOfComplexObject/jsonParentObject/jsonFirst")] + [InlineData("[0].Resource.ComplexObject.Elements[0]", "/atomic:operations[0]/data/attributes/publicNameOfComplexObject/jsonElements[0]")] + [InlineData("[0].Resource.ComplexObject.Elements[0].First", + "/atomic:operations[0]/data/attributes/publicNameOfComplexObject/jsonElements[0]/jsonFirst")] + [InlineData("[0][Resource][ComplexObject][Elements][0][First]", + "/atomic:operations[0]/data/attributes/publicNameOfComplexObject/jsonElements[0]/jsonFirst")] + [InlineData("[0].Resource.ComplexList", "/atomic:operations[0]/data/attributes/publicNameOfComplexList")] + [InlineData("[0].Resource.ComplexList[0].First", "/atomic:operations[0]/data/attributes/publicNameOfComplexList[0]/jsonFirst")] + [InlineData("[0].Resource.PrimaryChild", "/atomic:operations[0]/data/relationships/publicNameOfPrimaryChild/data")] + [InlineData("[0].Resource.PrimaryChild.NotMappedInChild", null)] + [InlineData("[0].Resource.PrimaryChild.Id", "/atomic:operations[0]/data/relationships/publicNameOfPrimaryChild/data/id")] + [InlineData("[0].Resource.Children[0]", "/atomic:operations[0]/data/relationships/publicNameOfChildren/data[0]")] + [InlineData("[0].Resource.Children[0].NotMappedInChild", null)] + [InlineData("[0].Resource.Children[0].Id", "/atomic:operations[0]/data/relationships/publicNameOfChildren/data[0]/id")] + public void Renders_JSON_path_for_ModelState_key_in_operations_request(string modelStateKey, string? expectedJsonPath) + { + // Arrange + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Add().Add().Build(); + + var modelState = new ModelStateDictionary(); + modelState.AddModelError(modelStateKey, "(ignored error message)"); + + Func getOperationTypeCallback = (collectionType, _) => + collectionType == typeof(IList) ? typeof(Parent) : null; + + // Act + var exception = new InvalidModelStateException(modelState, typeof(IList), false, resourceGraph, getOperationTypeCallback); + + // Assert + exception.Errors.Should().HaveCount(1); + + if (expectedJsonPath == null) + { + exception.Errors[0].Source.Should().BeNull(); + } + else + { + exception.Errors[0].Source.Should().NotBeNull(); + exception.Errors[0].Source!.Pointer.Should().Be(expectedJsonPath); + } + } + + [UsedImplicitly(ImplicitUseTargetFlags.Members)] + private sealed class Parent : Identifiable + { + public string? NotMappedInParent { get; set; } + + [Attr(PublicName = "publicNameOfOne")] + public string? One { get; set; } + + [Attr(PublicName = "publicNameOfComplexObject")] + public ComplexObject? ComplexObject { get; set; } + + [Attr(PublicName = "publicNameOfComplexList")] + public IList ComplexList { get; set; } = null!; + + [HasOne(PublicName = "publicNameOfPrimaryChild")] + public Child? PrimaryChild { get; set; } + + [HasMany(PublicName = "publicNameOfChildren")] + public ISet Children { get; set; } = null!; + } + + [UsedImplicitly(ImplicitUseTargetFlags.Members)] + private sealed class Child : Identifiable + { + public string? NotMappedInChild { get; set; } + + [Attr(PublicName = "publicNameOfTwo")] + public string? Two { get; set; } + + [HasOne(PublicName = "publicNameOfParent")] + public Parent? Parent { get; set; } + } + + [UsedImplicitly(ImplicitUseTargetFlags.Members)] + private sealed class ComplexObject + { + [JsonPropertyName("jsonFirst")] + public string? First { get; set; } + + [JsonPropertyName("jsonParentObject")] + public ComplexObject? ParentObject { get; set; } + + [JsonPropertyName("jsonElements")] + public IList Elements { get; set; } = null!; + } + } +} diff --git a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs index 858d1a6bd8..b48601c1d8 100644 --- a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs +++ b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs @@ -28,7 +28,9 @@ public async Task GetAsync_Calls_Service() { // Arrange var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, serviceMock.Object); // Act await controller.GetAsync(CancellationToken.None); @@ -41,7 +43,9 @@ public async Task GetAsync_Calls_Service() public async Task GetAsync_Throws_405_If_No_Service() { // Arrange - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, null); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, null); // Act Func asyncAction = () => controller.GetAsync(CancellationToken.None); @@ -58,7 +62,9 @@ public async Task GetAsyncById_Calls_Service() // Arrange const int id = 0; var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, getById: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, getById: serviceMock.Object); // Act await controller.GetAsync(id, CancellationToken.None); @@ -72,7 +78,9 @@ public async Task GetAsyncById_Throws_405_If_No_Service() { // Arrange const int id = 0; - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.GetAsync(id, CancellationToken.None); @@ -90,7 +98,9 @@ public async Task GetRelationshipsAsync_Calls_Service() const int id = 0; const string relationshipName = "articles"; var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, getRelationship: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, getRelationship: serviceMock.Object); // Act await controller.GetRelationshipAsync(id, relationshipName, CancellationToken.None); @@ -104,7 +114,9 @@ public async Task GetRelationshipsAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.GetRelationshipAsync(id, "articles", CancellationToken.None); @@ -122,7 +134,9 @@ public async Task GetRelationshipAsync_Calls_Service() const int id = 0; const string relationshipName = "articles"; var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, getSecondary: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, getSecondary: serviceMock.Object); // Act await controller.GetSecondaryAsync(id, relationshipName, CancellationToken.None); @@ -136,7 +150,9 @@ public async Task GetRelationshipAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.GetSecondaryAsync(id, "articles", CancellationToken.None); @@ -154,8 +170,9 @@ public async Task PatchAsync_Calls_Service() const int id = 0; var resource = new Resource(); var serviceMock = new Mock>(); - - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, update: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, update: serviceMock.Object); // Act await controller.PatchAsync(id, resource, CancellationToken.None); @@ -170,7 +187,9 @@ public async Task PatchAsync_Throws_405_If_No_Service() // Arrange const int id = 0; var resource = new Resource(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.PatchAsync(id, resource, CancellationToken.None); @@ -187,13 +206,15 @@ public async Task PostAsync_Calls_Service() // Arrange var resource = new Resource(); var serviceMock = new Mock>(); - - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, create: serviceMock.Object); serviceMock.Setup(service => service.CreateAsync(It.IsAny(), It.IsAny())).ReturnsAsync(resource); - - controller.ControllerContext = new ControllerContext + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, create: serviceMock.Object) { - HttpContext = new DefaultHttpContext() + ControllerContext = new ControllerContext + { + HttpContext = new DefaultHttpContext() + } }; // Act @@ -210,7 +231,9 @@ public async Task PatchRelationshipsAsync_Calls_Service() const int id = 0; const string relationshipName = "articles"; var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, setRelationship: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, setRelationship: serviceMock.Object); // Act await controller.PatchRelationshipAsync(id, relationshipName, null, CancellationToken.None); @@ -224,7 +247,9 @@ public async Task PatchRelationshipsAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.PatchRelationshipAsync(id, "articles", null, CancellationToken.None); @@ -241,7 +266,9 @@ public async Task DeleteAsync_Calls_Service() // Arrange const int id = 0; var serviceMock = new Mock>(); - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance, delete: serviceMock.Object); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, delete: serviceMock.Object); // Act await controller.DeleteAsync(id, CancellationToken.None); @@ -255,7 +282,9 @@ public async Task DeleteAsync_Throws_405_If_No_Service() { // Arrange const int id = 0; - var controller = new ResourceController(new JsonApiOptions(), NullLoggerFactory.Instance); + var options = new JsonApiOptions(); + IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance); // Act Func asyncAction = () => controller.DeleteAsync(id, CancellationToken.None); @@ -275,19 +304,20 @@ public sealed class Resource : Identifiable private sealed class ResourceController : BaseJsonApiController { - public ResourceController(IJsonApiOptions options, ILoggerFactory loggerFactory, IResourceService resourceService) - : base(options, loggerFactory, resourceService) + public ResourceController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) + : base(options, resourceGraph, loggerFactory, resourceService) { } - public ResourceController(IJsonApiOptions options, ILoggerFactory loggerFactory, IGetAllService getAll = null, - IGetByIdService getById = null, IGetSecondaryService getSecondary = null, - IGetRelationshipService getRelationship = null, ICreateService create = null, - IAddToRelationshipService addToRelationship = null, IUpdateService update = null, - ISetRelationshipService setRelationship = null, IDeleteService delete = null, - IRemoveFromRelationshipService removeFromRelationship = null) - : base(options, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, delete, - removeFromRelationship) + public ResourceController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IGetAllService getAll = null, IGetByIdService getById = null, + IGetSecondaryService getSecondary = null, IGetRelationshipService getRelationship = null, + ICreateService create = null, IAddToRelationshipService addToRelationship = null, + IUpdateService update = null, ISetRelationshipService setRelationship = null, + IDeleteService delete = null, IRemoveFromRelationshipService removeFromRelationship = null) + : base(options, resourceGraph, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, + setRelationship, delete, removeFromRelationship) { } } From 11034f186e49610cbbc084908c92140a80c3f931 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 18 Oct 2021 11:44:10 +0200 Subject: [PATCH 09/32] Respect configured MaxModelValidationErrors in operations --- .../BaseJsonApiOperationsController.cs | 67 +++++++++---- .../Errors/InvalidModelStateException.cs | 6 +- .../AtomicModelStateValidationTests.cs | 93 ++++++++++++++++++- .../ModelState/ModelStateValidationTests.cs | 42 ++++++++- .../Startups/ModelStateValidationStartup.cs | 8 ++ 5 files changed, 189 insertions(+), 27 deletions(-) diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs index ebd3d9833e..83d59aa537 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiOperationsController.cs @@ -133,48 +133,79 @@ protected virtual void ValidateModelState(IList operations) using IDisposable _ = new RevertRequestStateOnDispose(_request, _targetedFields); int operationIndex = 0; - var requestModelState = new Dictionary(); + var requestModelState = new List<(string key, ModelStateEntry entry)>(); + int maxErrorsRemaining = ModelState.MaxAllowedErrors; foreach (OperationContainer operation in operations) { - if (operation.Request.WriteOperation is WriteOperationKind.CreateResource or WriteOperationKind.UpdateResource) + if (maxErrorsRemaining < 1) { - _targetedFields.CopyFrom(operation.TargetedFields); - _request.CopyFrom(operation.Request); - - var validationContext = new ActionContext(); - ObjectValidator.Validate(validationContext, null, string.Empty, operation.Resource); - - CopyValidationErrorsFromOperation(validationContext.ModelState, operationIndex, requestModelState); + break; } + maxErrorsRemaining = ValidateOperation(operation, operationIndex, requestModelState, maxErrorsRemaining); + operationIndex++; } if (requestModelState.Any()) { - throw new InvalidModelStateException(requestModelState, typeof(IList), _options.IncludeExceptionStackTraceInErrors, + Dictionary modelStateDictionary = requestModelState.ToDictionary(tuple => tuple.key, tuple => tuple.entry); + + throw new InvalidModelStateException(modelStateDictionary, typeof(IList), _options.IncludeExceptionStackTraceInErrors, _resourceGraph, (collectionType, index) => collectionType == typeof(IList) ? operations[index].Resource.GetType() : null); } } - private static void CopyValidationErrorsFromOperation(ModelStateDictionary operationModelState, int operationIndex, - Dictionary requestModelState) + private int ValidateOperation(OperationContainer operation, int operationIndex, List<(string key, ModelStateEntry entry)> requestModelState, + int maxErrorsRemaining) { - if (!operationModelState.IsValid) + if (operation.Request.WriteOperation is WriteOperationKind.CreateResource or WriteOperationKind.UpdateResource) { - foreach (string key in operationModelState.Keys) + _targetedFields.CopyFrom(operation.TargetedFields); + _request.CopyFrom(operation.Request); + + var validationContext = new ActionContext + { + ModelState = + { + MaxAllowedErrors = maxErrorsRemaining + } + }; + + ObjectValidator.Validate(validationContext, null, string.Empty, operation.Resource); + + if (!validationContext.ModelState.IsValid) { - ModelStateEntry entry = operationModelState[key]; + int errorsRemaining = maxErrorsRemaining; - if (entry.ValidationState == ModelValidationState.Invalid) + foreach (string key in validationContext.ModelState.Keys) { - string operationKey = $"[{operationIndex}].{nameof(OperationContainer.Resource)}." + key; - requestModelState[operationKey] = entry; + ModelStateEntry entry = validationContext.ModelState[key]; + + if (entry.ValidationState == ModelValidationState.Invalid) + { + string operationKey = $"[{operationIndex}].{nameof(OperationContainer.Resource)}.{key}"; + + if (entry.Errors.Count > 0 && entry.Errors[0].Exception is TooManyModelErrorsException) + { + requestModelState.Insert(0, (operationKey, entry)); + } + else + { + requestModelState.Add((operationKey, entry)); + } + + errorsRemaining -= entry.Errors.Count; + } } + + return errorsRemaining; } } + + return maxErrorsRemaining; } } } diff --git a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs index bbb78e293d..0c89874f96 100644 --- a/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs +++ b/src/JsonApiDotNetCore/Errors/InvalidModelStateException.cs @@ -26,8 +26,8 @@ public InvalidModelStateException(IReadOnlyDictionary m { } - private static IEnumerable FromModelStateDictionary(IReadOnlyDictionary modelState, Type modelType, IResourceGraph resourceGraph, - bool includeExceptionStackTraceInErrors, Func? getCollectionElementTypeCallback) + private static IEnumerable FromModelStateDictionary(IReadOnlyDictionary modelState, Type modelType, + IResourceGraph resourceGraph, bool includeExceptionStackTraceInErrors, Func? getCollectionElementTypeCallback) { ArgumentGuard.NotNull(modelState, nameof(modelState)); ArgumentGuard.NotNull(modelType, nameof(modelType)); @@ -179,7 +179,7 @@ private static ErrorObject FromModelError(ModelError modelError, string? sourceP var error = new ErrorObject(HttpStatusCode.UnprocessableEntity) { Title = "Input validation failed.", - Detail = modelError.ErrorMessage, + Detail = modelError.Exception is TooManyModelErrorsException tooManyException ? tooManyException.Message : modelError.ErrorMessage, Source = sourcePointer == null ? null : new ErrorSource diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs index c8a4d1b69d..8ca3d6166a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/ModelStateValidation/AtomicModelStateValidationTests.cs @@ -448,6 +448,7 @@ public async Task Validates_all_operations_before_execution_starts() type = "musicTracks", attributes = new { + title = "some", lengthInSeconds = -1 } } @@ -463,7 +464,7 @@ public async Task Validates_all_operations_before_execution_starts() // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.UnprocessableEntity); - responseDocument.Errors.Should().HaveCount(3); + responseDocument.Errors.Should().HaveCount(2); ErrorObject error1 = responseDocument.Errors[0]; error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); @@ -474,14 +475,96 @@ public async Task Validates_all_operations_before_execution_starts() ErrorObject error2 = responseDocument.Errors[1]; error2.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error2.Title.Should().Be("Input validation failed."); - error2.Detail.Should().Be("The Title field is required."); - error2.Source.Pointer.Should().Be("/atomic:operations[1]/data/attributes/title"); + error2.Detail.Should().Be("The field LengthInSeconds must be between 1 and 1440."); + error2.Source.Pointer.Should().Be("/atomic:operations[1]/data/attributes/lengthInSeconds"); + } + + [Fact] + public async Task Does_not_exceed_MaxModelValidationErrors() + { + // Arrange + var requestBody = new + { + atomic__operations = new object[] + { + new + { + op = "add", + data = new + { + type = "playlists", + attributes = new + { + name = (string)null + } + } + }, + new + { + op = "add", + data = new + { + type = "playlists", + attributes = new + { + name = (string)null + } + } + }, + new + { + op = "add", + data = new + { + type = "musicTracks", + attributes = new + { + lengthInSeconds = -1 + } + } + }, + new + { + op = "add", + data = new + { + type = "playlists", + attributes = new + { + name = (string)null + } + } + } + } + }; + + const string route = "/operations"; + + // Act + (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePostAtomicAsync(route, requestBody); + + // Assert + httpResponse.Should().HaveStatusCode(HttpStatusCode.UnprocessableEntity); + + responseDocument.Errors.Should().HaveCount(3); + + ErrorObject error1 = responseDocument.Errors[0]; + error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); + error1.Title.Should().Be("Input validation failed."); + error1.Detail.Should().Be("The maximum number of allowed model errors has been reached."); + error1.Source.Should().BeNull(); + + ErrorObject error2 = responseDocument.Errors[1]; + error2.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); + error2.Title.Should().Be("Input validation failed."); + error2.Detail.Should().Be("The Name field is required."); + error2.Source.Pointer.Should().Be("/atomic:operations[0]/data/attributes/name"); ErrorObject error3 = responseDocument.Errors[2]; error3.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); error3.Title.Should().Be("Input validation failed."); - error3.Detail.Should().Be("The field LengthInSeconds must be between 1 and 1440."); - error3.Source.Pointer.Should().Be("/atomic:operations[1]/data/attributes/lengthInSeconds"); + error2.Detail.Should().Be("The Name field is required."); + error3.Source.Pointer.Should().Be("/atomic:operations[1]/data/attributes/name"); } } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs index 9a25186307..b3f4e2d2c9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateValidationTests.cs @@ -167,6 +167,7 @@ public async Task Cannot_create_resource_with_multiple_violations() type = "systemDirectories", attributes = new { + isCaseSensitive = false, sizeInBytes = -1 } } @@ -180,7 +181,7 @@ public async Task Cannot_create_resource_with_multiple_violations() // Assert httpResponse.Should().HaveStatusCode(HttpStatusCode.UnprocessableEntity); - responseDocument.Errors.Should().HaveCount(3); + responseDocument.Errors.Should().HaveCount(2); ErrorObject error1 = responseDocument.Errors[0]; error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); @@ -193,6 +194,45 @@ public async Task Cannot_create_resource_with_multiple_violations() error2.Title.Should().Be("Input validation failed."); error2.Detail.Should().Be("The field SizeInBytes must be between 0 and 9223372036854775807."); error2.Source.Pointer.Should().Be("/data/attributes/sizeInBytes"); + } + + [Fact] + public async Task Does_not_exceed_MaxModelValidationErrors() + { + // Arrange + var requestBody = new + { + data = new + { + type = "systemDirectories", + attributes = new + { + sizeInBytes = -1 + } + } + }; + + const string route = "/systemDirectories"; + + // Act + (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePostAsync(route, requestBody); + + // Assert + httpResponse.Should().HaveStatusCode(HttpStatusCode.UnprocessableEntity); + + responseDocument.Errors.Should().HaveCount(3); + + ErrorObject error1 = responseDocument.Errors[0]; + error1.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); + error1.Title.Should().Be("Input validation failed."); + error1.Detail.Should().Be("The maximum number of allowed model errors has been reached."); + error1.Source.Should().BeNull(); + + ErrorObject error2 = responseDocument.Errors[1]; + error2.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); + error2.Title.Should().Be("Input validation failed."); + error2.Detail.Should().Be("The Name field is required."); + error2.Source.Pointer.Should().Be("/data/attributes/directoryName"); ErrorObject error3 = responseDocument.Errors[2]; error3.StatusCode.Should().Be(HttpStatusCode.UnprocessableEntity); diff --git a/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs b/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs index b66284d40e..616504800d 100644 --- a/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs +++ b/test/JsonApiDotNetCoreTests/Startups/ModelStateValidationStartup.cs @@ -3,6 +3,7 @@ using JetBrains.Annotations; using JsonApiDotNetCore.Configuration; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; using TestBuildingBlocks; namespace JsonApiDotNetCoreTests.Startups @@ -11,6 +12,13 @@ namespace JsonApiDotNetCoreTests.Startups public sealed class ModelStateValidationStartup : TestableStartup where TDbContext : DbContext { + public override void ConfigureServices(IServiceCollection services) + { + IMvcCoreBuilder mvcBuilder = services.AddMvcCore(options => options.MaxModelValidationErrors = 3); + + services.AddJsonApi(SetJsonApiOptions, mvcBuilder: mvcBuilder); + } + protected override void SetJsonApiOptions(JsonApiOptions options) { base.SetJsonApiOptions(options); From 534e635a241343d90e5125e22d28f4bb37dbae83 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 18 Oct 2021 12:28:59 +0200 Subject: [PATCH 10/32] Added docs for nullable reference types --- docs/internals/queries.md | 2 +- docs/usage/options.md | 4 +- docs/usage/resources/nullability.md | 85 +++++++++++++++++++++++++++++ docs/usage/toc.md | 1 + 4 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 docs/usage/resources/nullability.md diff --git a/docs/internals/queries.md b/docs/internals/queries.md index b5e5c2cf19..dd6c694c6f 100644 --- a/docs/internals/queries.md +++ b/docs/internals/queries.md @@ -5,7 +5,7 @@ _since v4.0_ The query pipeline roughly looks like this: ``` -HTTP --[ASP.NET Core]--> QueryString --[JADNC:QueryStringParameterReader]--> QueryExpression[] --[JADNC:ResourceService]--> QueryLayer --[JADNC:Repository]--> IQueryable --[EF Core]--> SQL +HTTP --[ASP.NET]--> QueryString --[JADNC:QueryStringParameterReader]--> QueryExpression[] --[JADNC:ResourceService]--> QueryLayer --[JADNC:Repository]--> IQueryable --[EF Core]--> SQL ``` Processing a request involves the following steps: diff --git a/docs/usage/options.md b/docs/usage/options.md index 54eb7f0d3b..7f80f6254d 100644 --- a/docs/usage/options.md +++ b/docs/usage/options.md @@ -102,7 +102,9 @@ Because we copy resource properties into an intermediate object before serializa ## Enable ModelState Validation -If you would like to use ASP.NET Core ModelState validation into your controllers when creating / updating resources, set `ValidateModelState` to `true`. By default, no model validation is performed. +If you would like to use ASP.NET ModelState validation into your controllers when creating / updating resources, set `ValidateModelState` to `true`. By default, no model validation is performed. + +How nullability affects ModelState validation is described [here](~/usage/resources/nullability.md). ```c# options.ValidateModelState = true; diff --git a/docs/usage/resources/nullability.md b/docs/usage/resources/nullability.md new file mode 100644 index 0000000000..a92aaefa47 --- /dev/null +++ b/docs/usage/resources/nullability.md @@ -0,0 +1,85 @@ +# Nullability in resources + +Properties on a resource class can be declared as nullable or non-nullable. This affects both ASP.NET ModelState validation and the way Entity Framework Core generates database columns. + +Note that ModelState validation is turned off by default. It can be enabled in [options](~/usage/options.md#enable-modelstate-validation). + +# Value types + +When ModelState validation is enabled, non-nullable value types will **not** trigger a validation error when omitted in the request body. +To make JsonApiDotNetCore return an error when such a property is missing on resource creation, declare it as nullable and annotate it with `[Required]`. + +Example: + +```c# +public sealed class User : Identifiable +{ + [Attr] + [Required] + public bool? IsAdministrator { get; set; } +} +``` + +This makes EF Core generate non-nullable columns. And model errors are returned when nullable fields are omitted. + +# Reference types + +When the [nullable reference types](https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references) (NRT) compiler feature is enabled, it affects both ASP.NET ModelState validation and Entity Framework Core. + +## NRT turned off + +When NRT is turned off, use `[Required]` on required attributes and relationships. This makes EF Core generate non-nullable columns. And model errors are returned when required fields are omitted. + +Example: + +```c# +public sealed class Label : Identifiable +{ + [Attr] + [Required] + public string Name { get; set; } + + [Attr] + public string RgbColor { get; set; } + + [HasOne] + [Required] + public Person Creator { get; set; } + + [HasOne] + public Label Parent { get; set; } + + [HasMany] + public ISet TodoItems { get; set; } +} +``` + +## NRT turned on + +When NRT is turned on, use nullability annotations (?) on attributes and relationships. This makes EF Core generate non-nullable columns. And model errors are returned when non-nullable fields are omitted. + +The [EF Core guidance on NRT](https://docs.microsoft.com/en-us/ef/core/miscellaneous/nullable-reference-types) recommends to use constructor binding to initialize non-nullable properties, but JsonApiDotNetCore does not support that. For required navigation properties, it suggests to use a non-nullable property with a nullable backing field. JsonApiDotNetCore does not support that either. In both cases, just use the null-forgiving operator (!). + +When ModelState validation is turned on, to-many relationships must be assigned an empty collection. Otherwise an error is returned when they don't occur in the request body. + +Example: + +```c# +public sealed class Label : Identifiable +{ + [Attr] + public string Name { get; set; } = null!; + + [Attr] + public string? RgbColor { get; set; } + + [HasOne] + public Person Creator { get; set; } = null!; + + [HasOne] + public Label? Parent { get; set; } + + [HasMany] + public ISet TodoItems { get; set; } = new HashSet(); +} +``` diff --git a/docs/usage/toc.md b/docs/usage/toc.md index a8b5473007..f6924036ea 100644 --- a/docs/usage/toc.md +++ b/docs/usage/toc.md @@ -1,6 +1,7 @@ # [Resources](resources/index.md) ## [Attributes](resources/attributes.md) ## [Relationships](resources/relationships.md) +## [Nullability](resources/nullability.md) # Reading data ## [Filtering](reading/filtering.md) From 9003eda83c15cc74ad1be9058d997fa0d86d3838 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 18 Oct 2021 13:10:30 +0200 Subject: [PATCH 11/32] Automated cleanup code --- .../DeserializationBenchmarkBase.cs | 4 +++- .../Controllers/PeopleController.cs | 3 ++- .../Controllers/OperationsController.cs | 4 ++-- .../Controllers/PeopleController.cs | 3 ++- .../Controllers/TodoItemsController.cs | 3 ++- .../Controllers/ResourceAsController.cs | 3 ++- .../Controllers/ResourceBsController.cs | 3 ++- .../Controllers/WorkItemsController.cs | 3 ++- .../Controllers/BaseJsonApiController.cs | 23 ++++++++++--------- .../Controllers/JsonApiCommandController.cs | 3 ++- .../Controllers/JsonApiController.cs | 19 +++++++-------- .../JsonApiOperationsController.cs | 4 ++-- .../Controllers/JsonApiQueryController.cs | 3 ++- .../Middleware/JsonApiRoutingConvention.cs | 4 +++- .../QueryableBuilding/WhereClauseBuilder.cs | 2 +- .../Resources/Annotations/AttrAttribute.cs | 1 - .../Serialization/Request/JsonApiReader.cs | 2 +- .../Services/JsonApiResourceService.cs | 4 +--- .../Archiving/BroadcastCommentsController.cs | 3 ++- .../TelevisionBroadcastsController.cs | 3 ++- .../Archiving/TelevisionNetworksController.cs | 3 ++- .../Archiving/TelevisionStationsController.cs | 3 ++- .../CreateMusicTrackOperationsController.cs | 4 ++-- .../AtomicOperations/LyricsController.cs | 3 ++- .../AtomicOperations/MusicTracksController.cs | 3 ++- .../AtomicOperations/OperationsController.cs | 4 ++-- .../AtomicOperations/PerformersController.cs | 3 ++- .../AtomicOperations/PlaylistsController.cs | 3 ++- .../RecordCompaniesController.cs | 3 ++- .../TextLanguagesController.cs | 3 ++- .../CompositeKeys/CarsController.cs | 3 ++- .../CompositeKeys/DealershipsController.cs | 3 ++- .../CompositeKeys/EnginesController.cs | 3 ++- .../OperationsController.cs | 4 ++-- .../ContentNegotiation/PoliciesController.cs | 3 ++- .../ToothbrushesController.cs | 3 ++- .../CustomRoutes/CiviliansController.cs | 3 ++- .../EagerLoading/BuildingsController.cs | 3 ++- .../EagerLoading/StatesController.cs | 3 ++- .../EagerLoading/StreetsController.cs | 3 ++- .../ConsumerArticlesController.cs | 3 ++- .../ThrowingArticlesController.cs | 3 ++- .../HostingInIIS/ArtGalleriesController.cs | 3 ++- .../HostingInIIS/PaintingsController.cs | 3 ++- .../IdObfuscation/BankAccountsController.cs | 3 ++- .../IdObfuscation/DebitCardsController.cs | 3 ++- .../ObfuscatedIdentifiableController.cs | 3 ++- .../ModelState/SystemDirectoriesController.cs | 3 ++- .../ModelState/SystemFilesController.cs | 3 ++- .../RequestBody/WorkflowsController.cs | 3 ++- .../Links/PhotoAlbumsController.cs | 3 ++- .../Links/PhotoLocationsController.cs | 3 ++- .../Links/PhotosController.cs | 3 ++- .../Logging/AuditEntriesController.cs | 3 ++- .../Meta/ProductFamiliesController.cs | 3 ++- .../Meta/SupportTicketsController.cs | 3 ++- .../Microservices/DomainGroupsController.cs | 3 ++- .../Microservices/DomainUsersController.cs | 3 ++- .../MultiTenancy/WebProductsController.cs | 3 ++- .../MultiTenancy/WebShopsController.cs | 3 ++- .../DivingBoardsController.cs | 3 ++- .../SwimmingPoolsController.cs | 3 ++- .../QueryStrings/BlogPostsController.cs | 3 ++- .../QueryStrings/CalendarsController.cs | 3 ++- .../QueryStrings/CommentsController.cs | 3 ++- .../FilterableResourcesController.cs | 3 ++- .../QueryStrings/WebAccountsController.cs | 3 ++- .../ReadWrite/RgbColorsController.cs | 3 ++- .../ReadWrite/UserAccountsController.cs | 3 ++- .../ReadWrite/WorkItemGroupsController.cs | 3 ++- .../ReadWrite/WorkItemsController.cs | 3 ++- .../CustomersController.cs | 3 ++- .../RequiredRelationships/OrdersController.cs | 3 ++- .../ShipmentsController.cs | 3 ++- .../GiftCertificatesController.cs | 3 ++- .../PostOfficesController.cs | 3 ++- .../Reading/PlanetsController.cs | 3 ++- .../Serialization/ScholarshipsController.cs | 3 ++- .../Serialization/StudentsController.cs | 3 ++- .../BlockingHttpDeleteController.cs | 3 ++- .../BlockingHttpPatchController.cs | 3 ++- .../BlockingHttpPostController.cs | 3 ++- .../BlockingWritesController.cs | 3 ++- .../MeetingAttendeesController.cs | 3 ++- .../Serialization/MeetingsController.cs | 3 ++- .../SoftDeletion/CompaniesController.cs | 3 ++- .../SoftDeletion/DepartmentsController.cs | 3 ++- .../ZeroKeys/GamesController.cs | 3 ++- .../ZeroKeys/PlayersController.cs | 3 ++- .../ModelStateValidationTests.cs | 1 - .../Controllers/BaseJsonApiControllerTests.cs | 1 + 91 files changed, 194 insertions(+), 115 deletions(-) diff --git a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs index 3c4b6f9227..8b2deb98b9 100644 --- a/benchmarks/Deserialization/DeserializationBenchmarkBase.cs +++ b/benchmarks/Deserialization/DeserializationBenchmarkBase.cs @@ -30,7 +30,9 @@ protected DeserializationBenchmarkBase() var resourceDefinitionAccessor = new ResourceDefinitionAccessor(resourceGraph, serviceContainer); serviceContainer.AddService(typeof(IResourceDefinitionAccessor), resourceDefinitionAccessor); - serviceContainer.AddService(typeof(IResourceDefinition), new JsonApiResourceDefinition(resourceGraph)); + + serviceContainer.AddService(typeof(IResourceDefinition), + new JsonApiResourceDefinition(resourceGraph)); // ReSharper disable once VirtualMemberCallInConstructor JsonApiRequest request = CreateJsonApiRequest(resourceGraph); diff --git a/src/Examples/GettingStarted/Controllers/PeopleController.cs b/src/Examples/GettingStarted/Controllers/PeopleController.cs index 41eb31c747..e7a5537f14 100644 --- a/src/Examples/GettingStarted/Controllers/PeopleController.cs +++ b/src/Examples/GettingStarted/Controllers/PeopleController.cs @@ -8,7 +8,8 @@ namespace GettingStarted.Controllers { public sealed class PeopleController : JsonApiController { - public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs index 84c39d348e..3d29f72af1 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/OperationsController.cs @@ -9,8 +9,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, - ITargetedFields targetedFields) + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, + IJsonApiRequest request, ITargetedFields targetedFields) : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs index f9894136d9..0ebafd1767 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/PeopleController.cs @@ -8,7 +8,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class PeopleController : JsonApiController { - public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PeopleController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs index 0f2769e5cd..c862853302 100644 --- a/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs +++ b/src/Examples/JsonApiDotNetCoreExample/Controllers/TodoItemsController.cs @@ -8,7 +8,8 @@ namespace JsonApiDotNetCoreExample.Controllers { public sealed class TodoItemsController : JsonApiController { - public TodoItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public TodoItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs index ad403367f2..5fd3c662a4 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceAsController.cs @@ -8,7 +8,8 @@ namespace MultiDbContextExample.Controllers { public sealed class ResourceAsController : JsonApiController { - public ResourceAsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ResourceAsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs index dd058290e8..33b89aa9ec 100644 --- a/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs +++ b/src/Examples/MultiDbContextExample/Controllers/ResourceBsController.cs @@ -8,7 +8,8 @@ namespace MultiDbContextExample.Controllers { public sealed class ResourceBsController : JsonApiController { - public ResourceBsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ResourceBsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs index c8bccc3c3e..055fa60ed8 100644 --- a/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs +++ b/src/Examples/NoEntityFrameworkExample/Controllers/WorkItemsController.cs @@ -8,7 +8,8 @@ namespace NoEntityFrameworkExample.Controllers { public sealed class WorkItemsController : JsonApiController { - public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs index e455cf5775..a1d3ceda0d 100644 --- a/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/BaseJsonApiController.cs @@ -41,7 +41,8 @@ public abstract class BaseJsonApiController : CoreJsonApiControl /// /// Creates an instance from a read/write service. /// - protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : this(options, resourceGraph, loggerFactory, resourceService, resourceService) { } @@ -49,22 +50,22 @@ protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resource /// /// Creates an instance from separate services for reading and writing. /// - protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceQueryService? queryService = null, - IResourceCommandService? commandService = null) - : this(options, resourceGraph, loggerFactory, queryService, queryService, queryService, queryService, commandService, commandService, commandService, - commandService, commandService, commandService) + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceQueryService? queryService = null, IResourceCommandService? commandService = null) + : this(options, resourceGraph, loggerFactory, queryService, queryService, queryService, queryService, commandService, commandService, + commandService, commandService, commandService, commandService) { } /// /// Creates an instance from separate services for the various individual read and write methods. /// - protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IGetAllService? getAll = null, - IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, - IGetRelationshipService? getRelationship = null, ICreateService? create = null, - IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, - ISetRelationshipService? setRelationship = null, IDeleteService? delete = null, - IRemoveFromRelationshipService? removeFromRelationship = null) + protected BaseJsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IGetAllService? getAll = null, IGetByIdService? getById = null, + IGetSecondaryService? getSecondary = null, IGetRelationshipService? getRelationship = null, + ICreateService? create = null, IAddToRelationshipService? addToRelationship = null, + IUpdateService? update = null, ISetRelationshipService? setRelationship = null, + IDeleteService? delete = null, IRemoveFromRelationshipService? removeFromRelationship = null) { ArgumentGuard.NotNull(options, nameof(options)); ArgumentGuard.NotNull(resourceGraph, nameof(resourceGraph)); diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs index 5c893edcc1..5c641804e5 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiCommandController.cs @@ -26,7 +26,8 @@ public abstract class JsonApiCommandController : BaseJsonApiCont /// /// Creates an instance from a write-only service. /// - protected JsonApiCommandController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceCommandService commandService) + protected JsonApiCommandController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceCommandService commandService) : base(options, resourceGraph, loggerFactory, null, commandService) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs index c82cf662f3..6654dc534c 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiController.cs @@ -23,20 +23,21 @@ public abstract class JsonApiController : BaseJsonApiController< where TResource : class, IIdentifiable { /// - protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } /// - protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IGetAllService? getAll = null, - IGetByIdService? getById = null, IGetSecondaryService? getSecondary = null, - IGetRelationshipService? getRelationship = null, ICreateService? create = null, - IAddToRelationshipService? addToRelationship = null, IUpdateService? update = null, - ISetRelationshipService? setRelationship = null, IDeleteService? delete = null, - IRemoveFromRelationshipService? removeFromRelationship = null) - : base(options, resourceGraph, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, delete, - removeFromRelationship) + protected JsonApiController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IGetAllService? getAll = null, IGetByIdService? getById = null, + IGetSecondaryService? getSecondary = null, IGetRelationshipService? getRelationship = null, + ICreateService? create = null, IAddToRelationshipService? addToRelationship = null, + IUpdateService? update = null, ISetRelationshipService? setRelationship = null, + IDeleteService? delete = null, IRemoveFromRelationshipService? removeFromRelationship = null) + : base(options, resourceGraph, loggerFactory, getAll, getById, getSecondary, getRelationship, create, addToRelationship, update, setRelationship, + delete, removeFromRelationship) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs index 84f032c7e8..3f034c08d8 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiOperationsController.cs @@ -16,8 +16,8 @@ namespace JsonApiDotNetCore.Controllers /// public abstract class JsonApiOperationsController : BaseJsonApiOperationsController { - protected JsonApiOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, - ITargetedFields targetedFields) + protected JsonApiOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs index d4f1bf6d42..90dcb6d9b5 100644 --- a/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs +++ b/src/JsonApiDotNetCore/Controllers/JsonApiQueryController.cs @@ -25,7 +25,8 @@ public abstract class JsonApiQueryController : BaseJsonApiContro /// /// Creates an instance from a read-only service. /// - protected JsonApiQueryController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceQueryService queryService) + protected JsonApiQueryController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceQueryService queryService) : base(options, resourceGraph, loggerFactory, queryService) { } diff --git a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs index b49f98872d..a6b7e426c9 100644 --- a/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Middleware/JsonApiRoutingConvention.cs @@ -49,7 +49,9 @@ public JsonApiRoutingConvention(IJsonApiOptions options, IResourceGraph resource /// public ResourceType? GetResourceTypeForController(Type? controllerType) { - return controllerType != null && _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType? resourceType) ? resourceType : null; + return controllerType != null && _resourceTypePerControllerTypeMap.TryGetValue(controllerType, out ResourceType? resourceType) + ? resourceType + : null; } /// diff --git a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs index 8ef9535f1c..5d6db0bfe1 100644 --- a/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs +++ b/src/JsonApiDotNetCore/Queries/Internal/QueryableBuilding/WhereClauseBuilder.cs @@ -116,7 +116,7 @@ public override Expression VisitAny(AnyExpression expression, Type? argument) { Expression property = Visit(expression.TargetAttribute, argument); - IList valueList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(property.Type))!; + var valueList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(property.Type))!; foreach (LiteralConstantExpression constant in expression.Constants) { diff --git a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs index e0b4bc1253..79ffbbed3d 100644 --- a/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs +++ b/src/JsonApiDotNetCore/Resources/Annotations/AttrAttribute.cs @@ -1,5 +1,4 @@ using System; -using System.Reflection; using JetBrains.Annotations; namespace JsonApiDotNetCore.Resources.Annotations diff --git a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs index ef6b42f89e..aac200eac4 100644 --- a/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs +++ b/src/JsonApiDotNetCore/Serialization/Request/JsonApiReader.cs @@ -81,7 +81,7 @@ private Document DeserializeDocument(string requestBody) using IDisposable _ = CodeTimingSessionManager.Current.Measure("JsonSerializer.Deserialize", MeasurementSettings.ExcludeJsonSerializationInPercentages); - Document? document = JsonSerializer.Deserialize(requestBody, _options.SerializerReadOptions); + var document = JsonSerializer.Deserialize(requestBody, _options.SerializerReadOptions); if (document == null) { diff --git a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs index 5c27d7cdce..0374251db6 100644 --- a/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs +++ b/src/JsonApiDotNetCore/Services/JsonApiResourceService.cs @@ -524,10 +524,8 @@ private void AssertRelationshipInJsonApiRequestIsNotNull([SysNotNull] Relationsh { if (relationship == null) { - throw new InvalidOperationException( - $"Expected {nameof(IJsonApiRequest)}.{nameof(IJsonApiRequest.Relationship)} not to be null at this point."); + throw new InvalidOperationException($"Expected {nameof(IJsonApiRequest)}.{nameof(IJsonApiRequest.Relationship)} not to be null at this point."); } } - } } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs index b69a632842..315a7eb409 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class BroadcastCommentsController : JsonApiController { - public BroadcastCommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BroadcastCommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs index 8dc602c70e..db372e2c9b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionBroadcastsController : JsonApiController { - public TelevisionBroadcastsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public TelevisionBroadcastsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs index 6be6a50295..880bf8d3d2 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionNetworksController : JsonApiController { - public TelevisionNetworksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public TelevisionNetworksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs index feb8d18b26..be529eb622 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving { public sealed class TelevisionStationsController : JsonApiController { - public TelevisionStationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public TelevisionStationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs index dbf3147b27..53fd433161 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs @@ -21,8 +21,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations.Controllers [Route("/operations/musicTracks/create")] public sealed class CreateMusicTrackOperationsController : JsonApiOperationsController { - public CreateMusicTrackOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, - IJsonApiRequest request, ITargetedFields targetedFields) + public CreateMusicTrackOperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IOperationsProcessor processor, IJsonApiRequest request, ITargetedFields targetedFields) : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs index 9331aa5ac8..39e19a1e34 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class LyricsController : JsonApiController { - public LyricsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public LyricsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs index 118899f0da..3a19c84d36 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class MusicTracksController : JsonApiController { - public MusicTracksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public MusicTracksController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs index b64a89af67..7125726c1e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs @@ -11,8 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, - ITargetedFields targetedFields) + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, + IJsonApiRequest request, ITargetedFields targetedFields) : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs index ef83d87bae..096c55c027 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class PerformersController : JsonApiController { - public PerformersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PerformersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs index fc4ed36d2e..bed6cd1ddf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class PlaylistsController : JsonApiController { - public PlaylistsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PlaylistsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs index 40cd08026c..00c1ff63b6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class RecordCompaniesController : JsonApiController { - public RecordCompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public RecordCompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs index 01e9ace0b4..ca31b7a38e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations { public sealed class TextLanguagesController : JsonApiController { - public TextLanguagesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public TextLanguagesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs index 1007917499..f77ba21b72 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class CarsController : JsonApiController { - public CarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs index 38bc3c5c7e..362b4cfc6c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class DealershipsController : JsonApiController { - public DealershipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DealershipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs index e7f4f21530..a8dfb16d4a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys { public sealed class EnginesController : JsonApiController { - public EnginesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public EnginesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs index 474277b163..fc9c867790 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs @@ -11,8 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ContentNegotiation { public sealed class OperationsController : JsonApiOperationsController { - public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request, - ITargetedFields targetedFields) + public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, + IJsonApiRequest request, ITargetedFields targetedFields) : base(options, resourceGraph, loggerFactory, processor, request, targetedFields) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs index 1fcc84763b..ecb926789c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ContentNegotiation { public sealed class PoliciesController : JsonApiController { - public PoliciesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PoliciesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs index b692aaa822..ec70b61ccd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs @@ -20,7 +20,8 @@ public sealed class ToothbrushesController : BaseJsonApiController resourceService) + public ToothbrushesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs index 08a654df66..62ff8f0487 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs @@ -15,7 +15,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CustomRoutes [Route("world-civilians")] public sealed class CiviliansController : JsonApiController { - public CiviliansController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CiviliansController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs index 747a19cb27..d2057db384 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class BuildingsController : JsonApiController { - public BuildingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BuildingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs index caf929089f..269088832e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class StatesController : JsonApiController { - public StatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public StatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs index 9b76628542..91fd83ea9e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading { public sealed class StreetsController : JsonApiController { - public StreetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public StreetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs index 5498628ad0..4d9b2f89ae 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ExceptionHandling { public sealed class ConsumerArticlesController : JsonApiController { - public ConsumerArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ConsumerArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs index 2178d0e075..52cf67ae6f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ExceptionHandling { public sealed class ThrowingArticlesController : JsonApiController { - public ThrowingArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ThrowingArticlesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs index d4c1e1eca9..4ba477c507 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.HostingInIIS { public sealed class ArtGalleriesController : JsonApiController { - public ArtGalleriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ArtGalleriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs index 7efc9277e7..03523b7235 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs @@ -13,7 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.HostingInIIS [Route("custom/path/to/paintings-of-the-world")] public sealed class PaintingsController : JsonApiController { - public PaintingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PaintingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs index 7ebe290474..3c7680725b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs @@ -8,7 +8,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation { public sealed class BankAccountsController : ObfuscatedIdentifiableController { - public BankAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BankAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs index 2ecf9c0ee2..f1cc5539fd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs @@ -8,7 +8,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation { public sealed class DebitCardsController : ObfuscatedIdentifiableController { - public DebitCardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DebitCardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs index 02695b37cd..f067ac454e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs @@ -17,7 +17,8 @@ public abstract class ObfuscatedIdentifiableController : BaseJsonApiC { private readonly HexadecimalCodec _codec = new(); - protected ObfuscatedIdentifiableController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + protected ObfuscatedIdentifiableController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs index 72520d7cad..26e009cdba 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.ModelState { public sealed class SystemDirectoriesController : JsonApiController { - public SystemDirectoriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public SystemDirectoriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs index be69ddf1f4..f2e4c55506 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.ModelState { public sealed class SystemFilesController : JsonApiController { - public SystemFilesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public SystemFilesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs index b538c41b42..4762984e8f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.RequestBody { public sealed class WorkflowsController : JsonApiController { - public WorkflowsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WorkflowsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs index 747f200c8f..edd66d7702 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotoAlbumsController : JsonApiController { - public PhotoAlbumsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PhotoAlbumsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs index a786606e60..9381eb0165 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotoLocationsController : JsonApiController { - public PhotoLocationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PhotoLocationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs index 59a0dc9ab5..f2a0219cb1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links { public sealed class PhotosController : JsonApiController { - public PhotosController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PhotosController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs index 846a29fe83..9f8cd3542f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Logging { public sealed class AuditEntriesController : JsonApiController { - public AuditEntriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public AuditEntriesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs index 822596a8f8..3e4980e4f7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Meta { public sealed class ProductFamiliesController : JsonApiController { - public ProductFamiliesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ProductFamiliesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs index fa16e24db5..6f95d1932f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Meta { public sealed class SupportTicketsController : JsonApiController { - public SupportTicketsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public SupportTicketsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs index 3a88b10945..b24411a844 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices { public sealed class DomainGroupsController : JsonApiController { - public DomainGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DomainGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs index 82255552bc..2c0da213c6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices { public sealed class DomainUsersController : JsonApiController { - public DomainUsersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DomainUsersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs index e0e1448fe8..ae7bc1f40c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs @@ -13,7 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.MultiTenancy [Route("{countryCode}/products")] public sealed class WebProductsController : JsonApiController { - public WebProductsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WebProductsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs index b3a2a586c5..01a1a3ddb5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs @@ -13,7 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.MultiTenancy [Route("{countryCode}/shops")] public sealed class WebShopsController : JsonApiController { - public WebShopsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WebShopsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs index 0ae90d4d09..e813da3e9c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions { public sealed class DivingBoardsController : JsonApiController { - public DivingBoardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DivingBoardsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs index 8b37514644..7f2464eead 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions { public sealed class SwimmingPoolsController : JsonApiController { - public SwimmingPoolsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public SwimmingPoolsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs index 5540cb046e..f8377a09f9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class BlogPostsController : JsonApiController { - public BlogPostsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BlogPostsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs index fc4f3586fc..87c5b99baf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class CalendarsController : JsonApiController { - public CalendarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CalendarsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs index 39234a76b7..fa6ef88e88 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class CommentsController : JsonApiController { - public CommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CommentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs index ee8dda8b21..f6ae811fa4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings.Filtering { public sealed class FilterableResourcesController : JsonApiController { - public FilterableResourcesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public FilterableResourcesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs index 281026c510..e12b1ce279 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings { public sealed class WebAccountsController : JsonApiController { - public WebAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WebAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs index d72a19eaa7..2850fdebaa 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class RgbColorsController : JsonApiController { - public RgbColorsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public RgbColorsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs index 5eff1e39ca..acc97c7c67 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class UserAccountsController : JsonApiController { - public UserAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public UserAccountsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs index 95fadf3eb1..3ee5bce4ef 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class WorkItemGroupsController : JsonApiController { - public WorkItemGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WorkItemGroupsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs index e0c06fcd06..fab597b6e4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ReadWrite { public sealed class WorkItemsController : JsonApiController { - public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public WorkItemsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs index fd4ba7983f..9dbecbef55 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class CustomersController : JsonApiController { - public CustomersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CustomersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs index 3d03cc3955..69e80b9ecb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class OrdersController : JsonApiController { - public OrdersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public OrdersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs index da106855c7..6db5a4356c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RequiredRelationships { public sealed class ShipmentsController : JsonApiController { - public ShipmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ShipmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs index abb0e58466..fec06937c7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceConstructorInjection { public sealed class GiftCertificatesController : JsonApiController { - public GiftCertificatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public GiftCertificatesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs index 1fd9649621..50b9dce62a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceConstructorInjection { public sealed class PostOfficesController : JsonApiController { - public PostOfficesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PostOfficesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs index 367a06ca8a..00c44f571a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Reading { public sealed class PlanetsController : JsonApiController { - public PlanetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PlanetsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs index dd74896699..1bca37378f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Serializat { public sealed class ScholarshipsController : JsonApiController { - public ScholarshipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public ScholarshipsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs index 141df9a0ae..03f2cdf50a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ResourceDefinitions.Serializat { public sealed class StudentsController : JsonApiController { - public StudentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public StudentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs index 825d94dbc8..a4a4a4951a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs @@ -13,7 +13,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [DisableQueryString(JsonApiQueryStringParameters.Sort | JsonApiQueryStringParameters.Page)] public sealed class BlockingHttpDeleteController : JsonApiController { - public BlockingHttpDeleteController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BlockingHttpDeleteController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs index d8ffaed221..9b8bbd22b3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs @@ -11,7 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [NoHttpPatch] public sealed class BlockingHttpPatchController : JsonApiController { - public BlockingHttpPatchController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BlockingHttpPatchController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs index 59695832fd..91e643bb26 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs @@ -11,7 +11,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [NoHttpPost] public sealed class BlockingHttpPostController : JsonApiController { - public BlockingHttpPostController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BlockingHttpPostController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs index 47a4d594c9..38e4ed364d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs @@ -12,7 +12,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.RestrictedControllers [DisableQueryString("skipCache")] public sealed class BlockingWritesController : JsonApiController { - public BlockingWritesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public BlockingWritesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs index 30512ff165..c469ca5deb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Serialization { public sealed class MeetingAttendeesController : JsonApiController { - public MeetingAttendeesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public MeetingAttendeesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs index fccfcb1e72..0dc7b3621b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs @@ -10,7 +10,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Serialization { public sealed class MeetingsController : JsonApiController { - public MeetingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public MeetingsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs index 128bd11a9a..df8ccc0f60 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.SoftDeletion { public sealed class CompaniesController : JsonApiController { - public CompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public CompaniesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs index a8c69b0d14..e605db70ef 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.SoftDeletion { public sealed class DepartmentsController : JsonApiController { - public DepartmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public DepartmentsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs index 88ef07bf9f..fe6d369dfe 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ZeroKeys { public sealed class GamesController : JsonApiController { - public GamesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public GamesController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs index c247b6b248..999002bbc3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs @@ -9,7 +9,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ZeroKeys { public sealed class PlayersController : JsonApiController { - public PlayersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IResourceService resourceService) + public PlayersController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, + IResourceService resourceService) : base(options, resourceGraph, loggerFactory, resourceService) { } diff --git a/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs b/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs index 0b61f55f5f..e3e86dbf49 100644 --- a/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs +++ b/test/JsonApiDotNetCoreTests/UnitTests/ModelStateValidation/ModelStateValidationTests.cs @@ -9,7 +9,6 @@ using JsonApiDotNetCore.Resources.Annotations; using Microsoft.AspNetCore.Mvc.ModelBinding; using Microsoft.Extensions.Logging.Abstractions; -using TestBuildingBlocks; using Xunit; namespace JsonApiDotNetCoreTests.UnitTests.ModelStateValidation diff --git a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs index b48601c1d8..4853a9638a 100644 --- a/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs +++ b/test/UnitTests/Controllers/BaseJsonApiControllerTests.cs @@ -209,6 +209,7 @@ public async Task PostAsync_Calls_Service() serviceMock.Setup(service => service.CreateAsync(It.IsAny(), It.IsAny())).ReturnsAsync(resource); var options = new JsonApiOptions(); IResourceGraph resourceGraph = new ResourceGraphBuilder(options, NullLoggerFactory.Instance).Build(); + var controller = new ResourceController(options, resourceGraph, NullLoggerFactory.Instance, create: serviceMock.Object) { ControllerContext = new ControllerContext From 33f525851f5664e9edfa3d19a913060dafcf5d9f Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Wed, 27 Oct 2021 15:33:13 +0200 Subject: [PATCH 12/32] Fixed: do not fail when clearing a required to-many relationship --- .../EntityFrameworkCoreRepository.cs | 45 ++++---------- .../DefaultBehaviorTests.cs | 60 ++++++++++--------- 2 files changed, 46 insertions(+), 59 deletions(-) diff --git a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs index 3c03aaf29e..6701102176 100644 --- a/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs +++ b/src/JsonApiDotNetCore/Repositories/EntityFrameworkCoreRepository.cs @@ -273,7 +273,7 @@ public virtual async Task UpdateAsync(TResource resourceFromRequest, TResource r object? rightValueEvaluated = await VisitSetRelationshipAsync(resourceFromDatabase, relationship, rightValue, WriteOperationKind.UpdateResource, cancellationToken); - AssertIsNotClearingRequiredRelationship(relationship, resourceFromDatabase, rightValueEvaluated); + AssertIsNotClearingRequiredToOneRelationship(relationship, resourceFromDatabase, rightValueEvaluated); await UpdateRelationshipAsync(relationship, resourceFromDatabase, rightValueEvaluated, cancellationToken); } @@ -292,42 +292,23 @@ public virtual async Task UpdateAsync(TResource resourceFromRequest, TResource r _dbContext.ResetChangeTracker(); } - protected void AssertIsNotClearingRequiredRelationship(RelationshipAttribute relationship, TResource leftResource, object? rightValue) + protected void AssertIsNotClearingRequiredToOneRelationship(RelationshipAttribute relationship, TResource leftResource, object? rightValue) { - if (relationship is HasManyAttribute { IsManyToMany: true }) + if (relationship is HasOneAttribute) { - // Many-to-many relationships cannot be required. - return; - } - - INavigation? navigation = TryGetNavigation(relationship); - bool relationshipIsRequired = navigation?.ForeignKey?.IsRequired ?? false; + INavigation? navigation = TryGetNavigation(relationship); + bool isRelationshipRequired = navigation?.ForeignKey?.IsRequired ?? false; - bool relationshipIsBeingCleared = relationship is HasManyAttribute hasManyRelationship - ? IsToManyRelationshipBeingCleared(hasManyRelationship, leftResource, rightValue) - : rightValue == null; + bool isClearingRelationship = rightValue == null; - if (relationshipIsRequired && relationshipIsBeingCleared) - { - string resourceName = _resourceGraph.GetResourceType().PublicName; - throw new CannotClearRequiredRelationshipException(relationship.PublicName, leftResource.StringId!, resourceName); + if (isRelationshipRequired && isClearingRelationship) + { + string resourceName = _resourceGraph.GetResourceType().PublicName; + throw new CannotClearRequiredRelationshipException(relationship.PublicName, leftResource.StringId!, resourceName); + } } } - private bool IsToManyRelationshipBeingCleared(HasManyAttribute hasManyRelationship, TResource leftResource, object? valueToAssign) - { - ICollection newRightResourceIds = _collectionConverter.ExtractResources(valueToAssign); - - object? existingRightValue = hasManyRelationship.GetValue(leftResource); - - HashSet existingRightResourceIds = - _collectionConverter.ExtractResources(existingRightValue).ToHashSet(IdentifiableComparer.Instance); - - existingRightResourceIds.ExceptWith(newRightResourceIds); - - return existingRightResourceIds.Any(); - } - /// public virtual async Task DeleteAsync(TId id, CancellationToken cancellationToken) { @@ -425,7 +406,7 @@ public virtual async Task SetRelationshipAsync(TResource leftResource, object? r object? rightValueEvaluated = await VisitSetRelationshipAsync(leftResource, relationship, rightValue, WriteOperationKind.SetRelationship, cancellationToken); - AssertIsNotClearingRequiredRelationship(relationship, leftResource, rightValueEvaluated); + AssertIsNotClearingRequiredToOneRelationship(relationship, leftResource, rightValueEvaluated); await UpdateRelationshipAsync(relationship, leftResource, rightValueEvaluated, cancellationToken); @@ -519,7 +500,7 @@ public virtual async Task RemoveFromToManyRelationshipAsync(TResource leftResour HashSet rightResourceIdsToStore = rightResourceIdsStored.ToHashSet(IdentifiableComparer.Instance); rightResourceIdsToStore.ExceptWith(rightResourceIdsToRemove); - AssertIsNotClearingRequiredRelationship(relationship, leftResourceTracked, rightResourceIdsToStore); + AssertIsNotClearingRequiredToOneRelationship(relationship, leftResourceTracked, rightResourceIdsToStore); await UpdateRelationshipAsync(relationship, leftResourceTracked, rightResourceIdsToStore, cancellationToken); diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs index 0016ec7db0..ea52dd1dbd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/DefaultBehaviorTests.cs @@ -256,7 +256,7 @@ await _testContext.RunOnDatabaseAsync(async dbContext => } [Fact] - public async Task Cannot_clear_required_OneToMany_relationship_through_primary_endpoint() + public async Task Clearing_OneToMany_relationship_through_primary_endpoint_triggers_cascading_delete() { // Arrange Order existingOrder = _fakers.Orders.Generate(); @@ -288,23 +288,25 @@ await _testContext.RunOnDatabaseAsync(async dbContext => string route = $"/customers/{existingOrder.Customer.StringId}"; // Act - (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePatchAsync(route, requestBody); + (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync(route, requestBody); // Assert - httpResponse.Should().HaveStatusCode(HttpStatusCode.BadRequest); + httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent); - responseDocument.Errors.Should().HaveCount(1); + responseDocument.Should().BeEmpty(); - ErrorObject error = responseDocument.Errors[0]; - error.StatusCode.Should().Be(HttpStatusCode.BadRequest); - error.Title.Should().Be("Failed to clear a required relationship."); + await _testContext.RunOnDatabaseAsync(async dbContext => + { + Order orderInDatabase = await dbContext.Orders.Include(order => order.Customer).FirstWithIdOrDefaultAsync(existingOrder.Id); + orderInDatabase.Should().BeNull(); - error.Detail.Should().Be($"The relationship 'orders' on resource type 'customers' with ID '{existingOrder.StringId}' " + - "cannot be cleared because it is a required relationship."); + Customer customerInDatabase = await dbContext.Customers.Include(customer => customer.Orders).FirstWithIdAsync(existingOrder.Customer.Id); + customerInDatabase.Orders.Should().BeEmpty(); + }); } [Fact] - public async Task Cannot_clear_required_OneToMany_relationship_by_updating_through_relationship_endpoint() + public async Task Clearing_OneToMany_relationship_through_update_relationship_endpoint_triggers_cascading_delete() { // Arrange Order existingOrder = _fakers.Orders.Generate(); @@ -325,23 +327,25 @@ await _testContext.RunOnDatabaseAsync(async dbContext => string route = $"/customers/{existingOrder.Customer.StringId}/relationships/orders"; // Act - (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePatchAsync(route, requestBody); + (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync(route, requestBody); // Assert - httpResponse.Should().HaveStatusCode(HttpStatusCode.BadRequest); + httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent); - responseDocument.Errors.Should().HaveCount(1); + responseDocument.Should().BeEmpty(); - ErrorObject error = responseDocument.Errors[0]; - error.StatusCode.Should().Be(HttpStatusCode.BadRequest); - error.Title.Should().Be("Failed to clear a required relationship."); + await _testContext.RunOnDatabaseAsync(async dbContext => + { + Order orderInDatabase = await dbContext.Orders.Include(order => order.Customer).FirstWithIdOrDefaultAsync(existingOrder.Id); + orderInDatabase.Should().BeNull(); - error.Detail.Should().Be($"The relationship 'orders' on resource type 'customers' with ID '{existingOrder.StringId}' " + - "cannot be cleared because it is a required relationship."); + Customer customerInDatabase = await dbContext.Customers.Include(customer => customer.Orders).FirstWithIdAsync(existingOrder.Customer.Id); + customerInDatabase.Orders.Should().BeEmpty(); + }); } [Fact] - public async Task Cannot_clear_required_OneToMany_relationship_by_deleting_through_relationship_endpoint() + public async Task Clearing_OneToMany_relationship_through_delete_relationship_endpoint_triggers_cascading_delete() { // Arrange Order existingOrder = _fakers.Orders.Generate(); @@ -369,19 +373,21 @@ await _testContext.RunOnDatabaseAsync(async dbContext => string route = $"/customers/{existingOrder.Customer.StringId}/relationships/orders"; // Act - (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecuteDeleteAsync(route, requestBody); + (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync(route, requestBody); // Assert - httpResponse.Should().HaveStatusCode(HttpStatusCode.BadRequest); + httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent); - responseDocument.Errors.Should().HaveCount(1); + responseDocument.Should().BeEmpty(); - ErrorObject error = responseDocument.Errors[0]; - error.StatusCode.Should().Be(HttpStatusCode.BadRequest); - error.Title.Should().Be("Failed to clear a required relationship."); + await _testContext.RunOnDatabaseAsync(async dbContext => + { + Order orderInDatabase = await dbContext.Orders.Include(order => order.Customer).FirstWithIdOrDefaultAsync(existingOrder.Id); + orderInDatabase.Should().BeNull(); - error.Detail.Should().Be($"The relationship 'orders' on resource type 'customers' with ID '{existingOrder.StringId}' " + - "cannot be cleared because it is a required relationship."); + Customer customerInDatabase = await dbContext.Customers.Include(customer => customer.Orders).FirstWithIdAsync(existingOrder.Customer.Id); + customerInDatabase.Orders.Should().BeEmpty(); + }); } [Fact] From 5da9d5d38ecabcc5e2f76122a76ab70d170160f9 Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 18 Oct 2021 14:36:17 +0200 Subject: [PATCH 13/32] Annotated controllers in integration tests --- .../IntegrationTests/Archiving/BroadcastCommentsController.cs | 2 -- .../Archiving/TelevisionBroadcastsController.cs | 2 -- .../IntegrationTests/Archiving/TelevisionNetworksController.cs | 2 -- .../IntegrationTests/Archiving/TelevisionStationsController.cs | 2 -- .../Controllers/CreateMusicTrackOperationsController.cs | 2 -- .../IntegrationTests/AtomicOperations/LyricsController.cs | 2 -- .../IntegrationTests/AtomicOperations/MusicTracksController.cs | 2 -- .../IntegrationTests/AtomicOperations/OperationsController.cs | 2 -- .../IntegrationTests/AtomicOperations/PerformersController.cs | 2 -- .../IntegrationTests/AtomicOperations/PlaylistsController.cs | 2 -- .../AtomicOperations/RecordCompaniesController.cs | 2 -- .../AtomicOperations/TextLanguagesController.cs | 2 -- .../IntegrationTests/CompositeKeys/CarsController.cs | 2 -- .../IntegrationTests/CompositeKeys/DealershipsController.cs | 2 -- .../IntegrationTests/CompositeKeys/EnginesController.cs | 2 -- .../IntegrationTests/ContentNegotiation/OperationsController.cs | 2 -- .../IntegrationTests/ContentNegotiation/PoliciesController.cs | 2 -- .../ControllerActionResults/ToothbrushesController.cs | 2 -- .../IntegrationTests/CustomRoutes/CiviliansController.cs | 2 -- .../IntegrationTests/CustomRoutes/TownsController.cs | 2 -- .../IntegrationTests/EagerLoading/BuildingsController.cs | 2 -- .../IntegrationTests/EagerLoading/StatesController.cs | 2 -- .../IntegrationTests/EagerLoading/StreetsController.cs | 2 -- .../ExceptionHandling/ConsumerArticlesController.cs | 2 -- .../ExceptionHandling/ThrowingArticlesController.cs | 2 -- .../IntegrationTests/HostingInIIS/ArtGalleriesController.cs | 2 -- .../IntegrationTests/HostingInIIS/PaintingsController.cs | 2 -- .../IntegrationTests/IdObfuscation/BankAccountsController.cs | 2 -- .../IntegrationTests/IdObfuscation/DebitCardsController.cs | 2 -- .../IdObfuscation/ObfuscatedIdentifiableController.cs | 2 -- .../InputValidation/ModelState/SystemDirectoriesController.cs | 2 -- .../InputValidation/ModelState/SystemFilesController.cs | 2 -- .../InputValidation/RequestBody/WorkflowsController.cs | 2 -- .../IntegrationTests/Links/PhotoAlbumsController.cs | 2 -- .../IntegrationTests/Links/PhotoLocationsController.cs | 2 -- .../IntegrationTests/Links/PhotosController.cs | 2 -- .../IntegrationTests/Logging/AuditEntriesController.cs | 2 -- .../IntegrationTests/Meta/ProductFamiliesController.cs | 2 -- .../IntegrationTests/Meta/SupportTicketsController.cs | 2 -- .../IntegrationTests/Microservices/DomainGroupsController.cs | 2 -- .../IntegrationTests/Microservices/DomainUsersController.cs | 2 -- .../IntegrationTests/MultiTenancy/WebProductsController.cs | 2 -- .../IntegrationTests/MultiTenancy/WebShopsController.cs | 2 -- .../NamingConventions/DivingBoardsController.cs | 2 -- .../NamingConventions/SwimmingPoolsController.cs | 2 -- .../NonJsonApiControllers/NonJsonApiController.cs | 2 -- .../IntegrationTests/QueryStrings/BlogPostsController.cs | 2 -- .../IntegrationTests/QueryStrings/BlogsController.cs | 2 -- .../IntegrationTests/QueryStrings/CalendarsController.cs | 2 -- .../IntegrationTests/QueryStrings/CommentsController.cs | 2 -- .../QueryStrings/Filtering/FilterableResourcesController.cs | 2 -- .../IntegrationTests/QueryStrings/WebAccountsController.cs | 2 -- .../IntegrationTests/ReadWrite/RgbColorsController.cs | 2 -- .../IntegrationTests/ReadWrite/UserAccountsController.cs | 2 -- .../IntegrationTests/ReadWrite/WorkItemGroupsController.cs | 2 -- .../IntegrationTests/ReadWrite/WorkItemsController.cs | 2 -- .../RequiredRelationships/CustomersController.cs | 2 -- .../IntegrationTests/RequiredRelationships/OrdersController.cs | 2 -- .../RequiredRelationships/ShipmentsController.cs | 2 -- .../ResourceConstructorInjection/GiftCertificatesController.cs | 2 -- .../ResourceConstructorInjection/PostOfficesController.cs | 2 -- .../ResourceDefinitions/Reading/MoonsController.cs | 2 -- .../ResourceDefinitions/Reading/PlanetsController.cs | 2 -- .../ResourceDefinitions/Reading/StarsController.cs | 2 -- .../ResourceDefinitions/Serialization/ScholarshipsController.cs | 2 -- .../ResourceDefinitions/Serialization/StudentsController.cs | 2 -- .../IntegrationTests/ResourceInheritance/MenController.cs | 2 -- .../RestrictedControllers/BlockingHttpDeleteController.cs | 2 -- .../RestrictedControllers/BlockingHttpPatchController.cs | 2 -- .../RestrictedControllers/BlockingHttpPostController.cs | 2 -- .../RestrictedControllers/BlockingWritesController.cs | 2 -- .../Serialization/MeetingAttendeesController.cs | 2 -- .../IntegrationTests/Serialization/MeetingsController.cs | 2 -- .../IntegrationTests/SoftDeletion/CompaniesController.cs | 2 -- .../IntegrationTests/SoftDeletion/DepartmentsController.cs | 2 -- .../IntegrationTests/ZeroKeys/GamesController.cs | 2 -- .../IntegrationTests/ZeroKeys/MapsController.cs | 2 -- .../IntegrationTests/ZeroKeys/PlayersController.cs | 2 -- 78 files changed, 156 deletions(-) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs index 315a7eb409..d801d2eaa5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/BroadcastCommentsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs index db372e2c9b..d5cd933b56 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionBroadcastsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs index 880bf8d3d2..4b981a8586 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionNetworksController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs index be529eb622..4ab018ea8d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionStationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs index 53fd433161..257920b48f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Controllers/CreateMusicTrackOperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Net; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs index 39e19a1e34..24936babb9 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/LyricsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs index 3a19c84d36..697ba4a00e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/MusicTracksController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs index 7125726c1e..eb1aa68911 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs index 096c55c027..59c5dfc60c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PerformersController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs index bed6cd1ddf..1b893615f3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/PlaylistsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs index 00c1ff63b6..6cc63b23db 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/RecordCompaniesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs index ca31b7a38e..b2d2683313 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/TextLanguagesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs index f77ba21b72..31346141e4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CarsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs index 362b4cfc6c..2ec7d85cda 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/DealershipsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs index a8dfb16d4a..f995a72233 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/EnginesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs index fc9c867790..06cf328d23 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/OperationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.AtomicOperations; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs index ecb926789c..4edb2dfdec 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PoliciesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs index ec70b61ccd..92bdf57157 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ToothbrushesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Net; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs index 62ff8f0487..aad9ccb421 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CiviliansController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Threading.Tasks; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs index 2e7859ba2d..79b9cbc63b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/TownsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs index d2057db384..f26107ba89 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/BuildingsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs index 269088832e..5e792adefd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StatesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs index 91fd83ea9e..19aab24dda 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/StreetsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs index 4d9b2f89ae..c7e13af033 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ConsumerArticlesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs index 52cf67ae6f..d518902f47 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ThrowingArticlesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs index 4ba477c507..adec47514b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/ArtGalleriesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs index 03523b7235..6dcc0d930b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/PaintingsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs index 3c7680725b..d064824979 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/BankAccountsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Services; using Microsoft.Extensions.Logging; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs index f1cc5539fd..2d733f0a34 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/DebitCardsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Services; using Microsoft.Extensions.Logging; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs index f067ac454e..0eb276db99 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscatedIdentifiableController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs index 26e009cdba..0c4af4fa1a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemDirectoriesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs index f2e4c55506..90fb26d246 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/SystemFilesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs index 4762984e8f..b31523b7e1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs index edd66d7702..29f80bc733 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoAlbumsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs index 9381eb0165..c77e97d5e4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotoLocationsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs index f2a0219cb1..0a3c83b911 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/PhotosController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs index 9f8cd3542f..d3104eb45b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditEntriesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs index 3e4980e4f7..408d6a3414 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/ProductFamiliesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs index 6f95d1932f..9e5b6da653 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportTicketsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs index b24411a844..cb1bbc6a32 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainGroupsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs index 2c0da213c6..3890ced6cb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/DomainUsersController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs index ae7bc1f40c..53a460376b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebProductsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs index 01a1a3ddb5..0907c67d25 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/WebShopsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs index e813da3e9c..673ddca0c8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/DivingBoardsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs index 7f2464eead..7147413c51 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingPoolsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs index 47599d1ad3..3f108548ac 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System.IO; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs index f8377a09f9..b8eb194e80 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogPostsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs index f6a52e5779..4fb4ad7eea 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/BlogsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs index 87c5b99baf..64c0c1060c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CalendarsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs index fa6ef88e88..b287d173fd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/CommentsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs index f6ae811fa4..4ccd186fd5 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterableResourcesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs index e12b1ce279..52b54e19b3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/WebAccountsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs index 2850fdebaa..f84fcc75de 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/RgbColorsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs index acc97c7c67..61980968e8 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/UserAccountsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs index 3ee5bce4ef..c9ce804450 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemGroupsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs index fab597b6e4..3f069590ff 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ReadWrite/WorkItemsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs index 9dbecbef55..c580d90075 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/CustomersController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs index 69e80b9ecb..47c4d47d2a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/OrdersController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs index 6db5a4356c..0bd68b5af6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RequiredRelationships/ShipmentsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs index fec06937c7..d51ceb542b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/GiftCertificatesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs index 50b9dce62a..5d0bbb5b0f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceConstructorInjection/PostOfficesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs index a296caf5aa..d498a8630b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/MoonsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs index 00c44f571a..ec8a670592 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/PlanetsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs index c9dad2f31c..b1d661c207 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Reading/StarsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs index 1bca37378f..bd792e0cdf 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/ScholarshipsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs index 03f2cdf50a..3cb63c97c4 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceDefinitions/Serialization/StudentsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs index f8d64298dc..d2fc098a6f 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ResourceInheritance/MenController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs index a4a4a4951a..060c3df6e3 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpDeleteController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs index 9b8bbd22b3..d09e5ddffa 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPatchController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs index 91e643bb26..1f964e20b7 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingHttpPostController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs index 38e4ed364d..fece61abcd 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/RestrictedControllers/BlockingWritesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Controllers.Annotations; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs index c469ca5deb..bc3e213001 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingAttendeesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs index 0dc7b3621b..f21b312e42 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Serialization/MeetingsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs index df8ccc0f60..fab829e553 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/CompaniesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs index e605db70ef..b3302da92d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/SoftDeletion/DepartmentsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs index fe6d369dfe..8497e9c91e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/GamesController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs index 09a7bd78f4..af38cf0a92 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/MapsController.cs @@ -1,5 +1,3 @@ -#nullable disable - using System; using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs index 999002bbc3..d9c9ebd302 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ZeroKeys/PlayersController.cs @@ -1,5 +1,3 @@ -#nullable disable - using JsonApiDotNetCore.Configuration; using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Services; From 3c3aa4fca12fdd2918e4c7959e9aa72775f3ae3a Mon Sep 17 00:00:00 2001 From: Bart Koelman Date: Mon, 18 Oct 2021 14:48:48 +0200 Subject: [PATCH 14/32] Annotated DbContexts in integration tests --- .../Archiving/TelevisionDbContext.cs | 10 ++++------ .../AtomicOperations/OperationsDbContext.cs | 14 ++++++------- .../Transactions/ExtraDbContext.cs | 2 -- .../CompositeKeys/CompositeDbContext.cs | 8 +++----- .../ContentNegotiation/PolicyDbContext.cs | 4 +--- .../ActionResultDbContext.cs | 4 +--- .../CustomRoutes/CustomRouteDbContext.cs | 6 ++---- .../EagerLoading/EagerLoadingDbContext.cs | 8 +++----- .../ExceptionHandling/ErrorDbContext.cs | 6 ++---- .../HostingInIIS/HostingDbContext.cs | 6 ++---- .../IdObfuscation/ObfuscationDbContext.cs | 6 ++---- .../ModelState/ModelStateDbContext.cs | 6 ++---- .../RequestBody/WorkflowDbContext.cs | 4 +--- .../IntegrationTests/Links/LinksDbContext.cs | 8 +++----- .../Logging/AuditDbContext.cs | 4 +--- .../IntegrationTests/Meta/SupportDbContext.cs | 6 ++---- .../FireForgetDbContext.cs | 6 ++---- .../OutboxDbContext.cs | 8 +++----- .../MultiTenancy/MultiTenancyDbContext.cs | 6 ++---- .../NamingConventions/SwimmingDbContext.cs | 8 +++----- .../NonJsonApiDbContext.cs | 2 -- .../QueryStrings/Filtering/FilterDbContext.cs | 4 +--- .../QueryStrings/QueryStringDbContext.cs | 20 +++++++++---------- .../ReadWrite/ReadWriteDbContext.cs | 12 +++++------ .../DefaultBehaviorDbContext.cs | 8 +++----- .../InjectionDbContext.cs | 6 ++---- .../Reading/UniverseDbContext.cs | 8 +++----- .../Serialization/SerializationDbContext.cs | 6 ++---- .../InheritanceDbContext.cs | 10 ++++------ .../RestrictionDbContext.cs | 10 ++++------ .../Serialization/SerializationDbContext.cs | 6 ++---- .../SoftDeletion/SoftDeletionDbContext.cs | 6 ++---- .../ZeroKeys/ZeroKeyDbContext.cs | 8 +++----- 33 files changed, 85 insertions(+), 151 deletions(-) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs index 454564e81a..5ff8a1406c 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Archiving/TelevisionDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,10 +6,10 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Archiving [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class TelevisionDbContext : DbContext { - public DbSet Networks { get; set; } - public DbSet Stations { get; set; } - public DbSet Broadcasts { get; set; } - public DbSet Comments { get; set; } + public DbSet Networks => Set(); + public DbSet Stations => Set(); + public DbSet Broadcasts => Set(); + public DbSet Comments => Set(); public TelevisionDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs index f95aad4803..f1f2c4ea11 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/OperationsDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,12 +8,12 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.AtomicOperations [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class OperationsDbContext : DbContext { - public DbSet Playlists { get; set; } - public DbSet MusicTracks { get; set; } - public DbSet Lyrics { get; set; } - public DbSet TextLanguages { get; set; } - public DbSet Performers { get; set; } - public DbSet RecordCompanies { get; set; } + public DbSet Playlists => Set(); + public DbSet MusicTracks => Set(); + public DbSet Lyrics => Set(); + public DbSet TextLanguages => Set(); + public DbSet Performers => Set(); + public DbSet RecordCompanies => Set(); public OperationsDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs index 4181197bdf..2808f95c28 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/AtomicOperations/Transactions/ExtraDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs index b6f91ce7a8..7577eddd22 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CompositeKeys/CompositeDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,9 +8,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CompositeKeys [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class CompositeDbContext : DbContext { - public DbSet Cars { get; set; } - public DbSet Engines { get; set; } - public DbSet Dealerships { get; set; } + public DbSet Cars => Set(); + public DbSet Engines => Set(); + public DbSet Dealerships => Set(); public CompositeDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs index 0b30c85b3f..3e952ff6ba 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ContentNegotiation/PolicyDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,7 +6,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ContentNegotiation [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class PolicyDbContext : DbContext { - public DbSet Policies { get; set; } + public DbSet Policies => Set(); public PolicyDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs index 5c5d56c67e..c8219d8dd6 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ControllerActionResults/ActionResultDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,7 +6,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ControllerActionResults [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class ActionResultDbContext : DbContext { - public DbSet Toothbrushes { get; set; } + public DbSet Toothbrushes => Set(); public ActionResultDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs index 242b0487cf..fc24c83f45 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/CustomRoutes/CustomRouteDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.CustomRoutes [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class CustomRouteDbContext : DbContext { - public DbSet Towns { get; set; } - public DbSet Civilians { get; set; } + public DbSet Towns => Set(); + public DbSet Civilians => Set(); public CustomRouteDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs index 678390ad52..cf99cd6e65 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/EagerLoading/EagerLoadingDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,9 +8,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.EagerLoading [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class EagerLoadingDbContext : DbContext { - public DbSet States { get; set; } - public DbSet Streets { get; set; } - public DbSet Buildings { get; set; } + public DbSet States => Set(); + public DbSet Streets => Set(); + public DbSet Buildings => Set(); public EagerLoadingDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs index ae05caac44..70141a7998 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/ExceptionHandling/ErrorDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.ExceptionHandling [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class ErrorDbContext : DbContext { - public DbSet ConsumerArticles { get; set; } - public DbSet ThrowingArticles { get; set; } + public DbSet ConsumerArticles => Set(); + public DbSet ThrowingArticles => Set(); public ErrorDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs index 47a3c951e5..81e9ab0a1a 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/HostingInIIS/HostingDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.HostingInIIS [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class HostingDbContext : DbContext { - public DbSet ArtGalleries { get; set; } - public DbSet Paintings { get; set; } + public DbSet ArtGalleries => Set(); + public DbSet Paintings => Set(); public HostingDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs index bf71249024..4cf9791745 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/IdObfuscation/ObfuscationDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.IdObfuscation [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class ObfuscationDbContext : DbContext { - public DbSet BankAccounts { get; set; } - public DbSet DebitCards { get; set; } + public DbSet BankAccounts => Set(); + public DbSet DebitCards => Set(); public ObfuscationDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs index 18ce9458f1..ed2734982e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/ModelState/ModelStateDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,8 +8,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.ModelState [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class ModelStateDbContext : DbContext { - public DbSet Directories { get; set; } - public DbSet Files { get; set; } + public DbSet Directories => Set(); + public DbSet Files => Set(); public ModelStateDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs index 0a9fbe796f..ab1442ea05 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/InputValidation/RequestBody/WorkflowDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,7 +8,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.InputValidation.RequestBody [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class WorkflowDbContext : DbContext { - public DbSet Workflows { get; set; } + public DbSet Workflows => Set(); public WorkflowDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs index 76a4a8202c..d2c7e4d03d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Links/LinksDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,9 +8,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Links [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class LinksDbContext : DbContext { - public DbSet PhotoAlbums { get; set; } - public DbSet Photos { get; set; } - public DbSet PhotoLocations { get; set; } + public DbSet PhotoAlbums => Set(); + public DbSet Photos => Set(); + public DbSet PhotoLocations => Set(); public LinksDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs index 3b3faef94a..17ee854329 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Logging/AuditDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,7 +6,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Logging [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class AuditDbContext : DbContext { - public DbSet AuditEntries { get; set; } + public DbSet AuditEntries => Set(); public AuditDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs index 9bac1c7c76..85dd3c96e1 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Meta/SupportDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Meta [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class SupportDbContext : DbContext { - public DbSet ProductFamilies { get; set; } - public DbSet SupportTickets { get; set; } + public DbSet ProductFamilies => Set(); + public DbSet SupportTickets => Set(); public SupportDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs index b3d7e6c5d7..c778390d39 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/FireAndForgetDelivery/FireForgetDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,8 +6,8 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices.FireAndForgetDel [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class FireForgetDbContext : DbContext { - public DbSet Users { get; set; } - public DbSet Groups { get; set; } + public DbSet Users => Set(); + public DbSet Groups => Set(); public FireForgetDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs index e10dd9ab1d..87e8d63707 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/Microservices/TransactionalOutboxPattern/OutboxDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using JsonApiDotNetCoreTests.IntegrationTests.Microservices.Messages; using Microsoft.EntityFrameworkCore; @@ -9,9 +7,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.Microservices.TransactionalOut [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class OutboxDbContext : DbContext { - public DbSet Users { get; set; } - public DbSet Groups { get; set; } - public DbSet OutboxMessages { get; set; } + public DbSet Users => Set(); + public DbSet Groups => Set(); + public DbSet OutboxMessages => Set(); public OutboxDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs index 0093ac784d..4129e7208d 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/MultiTenancy/MultiTenancyDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -12,8 +10,8 @@ public sealed class MultiTenancyDbContext : DbContext { private readonly ITenantProvider _tenantProvider; - public DbSet WebShops { get; set; } - public DbSet WebProducts { get; set; } + public DbSet WebShops => Set(); + public DbSet WebProducts => Set(); public MultiTenancyDbContext(DbContextOptions options, ITenantProvider tenantProvider) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs index f08055f81e..38a0ebe36b 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NamingConventions/SwimmingDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,9 +6,9 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.NamingConventions [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class SwimmingDbContext : DbContext { - public DbSet SwimmingPools { get; set; } - public DbSet WaterSlides { get; set; } - public DbSet DivingBoards { get; set; } + public DbSet SwimmingPools => Set(); + public DbSet WaterSlides => Set(); + public DbSet DivingBoards => Set(); public SwimmingDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs index 25d58d67e9..5fb6d1d42e 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/NonJsonApiControllers/NonJsonApiDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs index dde5e97ff6..525008a6cb 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/Filtering/FilterDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -8,7 +6,7 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings.Filtering [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class FilterDbContext : DbContext { - public DbSet FilterableResources { get; set; } + public DbSet FilterableResources => Set(); public FilterDbContext(DbContextOptions options) : base(options) diff --git a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs index e481eb0b43..51528a6885 100644 --- a/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs +++ b/test/JsonApiDotNetCoreTests/IntegrationTests/QueryStrings/QueryStringDbContext.cs @@ -1,5 +1,3 @@ -#nullable disable - using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; @@ -10,15 +8,15 @@ namespace JsonApiDotNetCoreTests.IntegrationTests.QueryStrings [UsedImplicitly(ImplicitUseTargetFlags.Members)] public sealed class QueryStringDbContext : DbContext { - public DbSet Blogs { get; set; } - public DbSet Posts { get; set; } - public DbSet