diff --git a/src/HotChocolate/AspNetCore/src/Transport.Abstractions/FileReferenceNode.cs b/src/HotChocolate/AspNetCore/src/Transport.Abstractions/FileReferenceNode.cs index 4403e1c7db0..09caf9bdbd7 100644 --- a/src/HotChocolate/AspNetCore/src/Transport.Abstractions/FileReferenceNode.cs +++ b/src/HotChocolate/AspNetCore/src/Transport.Abstractions/FileReferenceNode.cs @@ -66,6 +66,9 @@ public FileReferenceNode(FileReference value) string IValueNode.Value => Value.FileName; + /// + IValueNode IValueNode.WithLocation(Location? location) => this; + /// /// Gets the children of this node. /// diff --git a/src/HotChocolate/Core/src/Execution/Processing/VariableRewriter.cs b/src/HotChocolate/Core/src/Execution/Processing/VariableRewriter.cs index 269da9af9a2..0e14472d4f9 100644 --- a/src/HotChocolate/Core/src/Execution/Processing/VariableRewriter.cs +++ b/src/HotChocolate/Core/src/Execution/Processing/VariableRewriter.cs @@ -223,32 +223,20 @@ private static bool TryRewriteValue( { case SyntaxKind.Variable: rewritten = Rewrite((VariableNode)original, defaultValue, variableValues); - return true; + break; case SyntaxKind.ObjectValue when type.Kind == TypeKind.InputObject: rewritten = Rewrite( (ObjectValueNode)original, (InputObjectType)type, variableValues); - - if (ReferenceEquals(rewritten, original)) - { - rewritten = null; - return false; - } - return true; + break; case SyntaxKind.ObjectValue when type.Kind == TypeKind.List: rewritten = Rewrite( (ObjectValueNode)original, (ListType)type, variableValues); - - if (ReferenceEquals(rewritten, original)) - { - rewritten = null; - return false; - } return true; case SyntaxKind.ListValue when type.Kind == TypeKind.List: @@ -256,18 +244,21 @@ private static bool TryRewriteValue( (ListValueNode)original, (ListType)type, variableValues); - - if (ReferenceEquals(rewritten, original)) - { - rewritten = null; - return false; - } - return true; + break; default: rewritten = null; return false; } + + if (ReferenceEquals(rewritten, original)) + { + rewritten = null; + return false; + } + + rewritten = rewritten.WithLocation(original.Location); + return true; } private static IValueNode Rewrite( diff --git a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_NestedVariableInput.snap b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_NestedVariableInput.snap index e25fd6194f1..4fa8c682d8b 100644 --- a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_NestedVariableInput.snap +++ b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_NestedVariableInput.snap @@ -5,7 +5,7 @@ "locations": [ { "line": 1, - "column": 57 + "column": 72 } ], "path": [ diff --git a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_NestedVariableInput.snap b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_NestedVariableInput.snap index 0ddff28f293..6c260268cb3 100644 --- a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_NestedVariableInput.snap +++ b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_NestedVariableInput.snap @@ -5,7 +5,7 @@ "locations": [ { "line": 1, - "column": 59 + "column": 81 } ], "path": [ diff --git a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_VariableInput.snap b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_VariableInput.snap index 10d56c32dfe..1a5109705d0 100644 --- a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_VariableInput.snap +++ b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_Mutation_WithMutationConventions_VariableInput.snap @@ -5,7 +5,7 @@ "locations": [ { "line": 1, - "column": 53 + "column": 60 } ], "path": [ diff --git a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_NestedVariableInput.snap b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_NestedVariableInput.snap index 9e455cc1f3b..e9dd09cecb1 100644 --- a/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_NestedVariableInput.snap +++ b/src/HotChocolate/Core/test/Execution.Tests/Integration/TypeConverter/__snapshots__/TypeConverterTests.Exception_IsAvailableInErrorFilter_NestedVariableInput.snap @@ -5,7 +5,7 @@ "locations": [ { "line": 1, - "column": 54 + "column": 69 } ], "path": [ diff --git a/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_ObjectDict_As_Variable.snap b/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_ObjectDict_As_Variable.snap index e0e8e88a786..3763aaa54b1 100644 --- a/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_ObjectDict_As_Variable.snap +++ b/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_ObjectDict_As_Variable.snap @@ -1,8 +1,13 @@ -{ +{ "data": { "foo": { "kind": "ObjectValue", - "location": null, + "location": { + "start": 31, + "end": 36, + "line": 1, + "column": 32 + }, "fields": [ { "kind": "ObjectField", diff --git a/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_Object_As_Variable.snap b/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_Object_As_Variable.snap index e0e8e88a786..3763aaa54b1 100644 --- a/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_Object_As_Variable.snap +++ b/src/HotChocolate/Core/test/Types.Tests/Types/Scalars/__snapshots__/AnyTypeTests.Input_Value_Object_As_Variable.snap @@ -1,8 +1,13 @@ -{ +{ "data": { "foo": { "kind": "ObjectValue", - "location": null, + "location": { + "start": 31, + "end": 36, + "line": 1, + "column": 32 + }, "fields": [ { "kind": "ObjectField", diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/BooleanValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/BooleanValueNode.cs index 8b0b3c23e20..c744908abed 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/BooleanValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/BooleanValueNode.cs @@ -90,6 +90,10 @@ public BooleanValueNode( public BooleanValueNode WithLocation(Location? location) => new(location, Value); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/Contracts/IValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/Contracts/IValueNode.cs index d859e23182d..502da9854a6 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/Contracts/IValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/Contracts/IValueNode.cs @@ -9,4 +9,16 @@ public interface IValueNode : ISyntaxNode /// Gets the value. /// object? Value { get; } + + /// + /// Creates a new node from the current instance and replaces the + /// with . + /// + /// + /// The location that shall be used to replace the current location. + /// + /// + /// Returns the new node with the new . + /// + IValueNode WithLocation(Location? location); } diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/EnumValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/EnumValueNode.cs index a841d015825..96905e8ec54 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/EnumValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/EnumValueNode.cs @@ -187,6 +187,10 @@ public ReadOnlyMemorySegment AsMemorySegment() public EnumValueNode WithLocation(Location? location) => new(location, Value); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/FloatValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/FloatValueNode.cs index 53201a34bf9..0e72a11a7b6 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/FloatValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/FloatValueNode.cs @@ -363,6 +363,10 @@ public ReadOnlyMemorySegment AsMemorySegment() public FloatValueNode WithLocation(Location? location) => new(location, Format) { _memorySegment = _memorySegment, _value = _value }; + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/IntValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/IntValueNode.cs index 7bb7da2e487..6323487ae56 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/IntValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/IntValueNode.cs @@ -958,6 +958,10 @@ public ReadOnlyMemorySegment AsMemorySegment() public IntValueNode WithLocation(Location? location) => new(location) { _memorySegment = _memorySegment, _value = _value }; + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/ListValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/ListValueNode.cs index c99265486db..24caeb97942 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/ListValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/ListValueNode.cs @@ -138,6 +138,10 @@ public ListValueNode( /// public ListValueNode WithLocation(Location? location) => new(location, Items); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/NullValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/NullValueNode.cs index 3a1f2ac257f..57569b89848 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/NullValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/NullValueNode.cs @@ -151,6 +151,10 @@ public override bool Equals(object? obj) /// public NullValueNode WithLocation(Location? location) => new(location); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Gets the default null value instance. /// diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/ObjectValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/ObjectValueNode.cs index 826f8af52ce..57122a53439 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/ObjectValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/ObjectValueNode.cs @@ -105,6 +105,10 @@ public ObjectValueNode(Location? location, IReadOnlyList fields public ObjectValueNode WithLocation(Location? location) => new(location, Fields); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/StringValueNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/StringValueNode.cs index 6bc317a3a69..ed3bdd5d24f 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/StringValueNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/StringValueNode.cs @@ -176,6 +176,10 @@ public ReadOnlyMemorySegment AsMemorySegment() public StringValueNode WithLocation(Location? location) => new(location, Value, Block); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + public StringValueNode WithValue(string value) => new(Location, value, false); diff --git a/src/HotChocolate/Language/src/Language.SyntaxTree/VariableNode.cs b/src/HotChocolate/Language/src/Language.SyntaxTree/VariableNode.cs index abc1fda3fd2..528b54aba3a 100644 --- a/src/HotChocolate/Language/src/Language.SyntaxTree/VariableNode.cs +++ b/src/HotChocolate/Language/src/Language.SyntaxTree/VariableNode.cs @@ -100,6 +100,10 @@ public IEnumerable GetNodes() /// public VariableNode WithLocation(Location? location) => new(location, Name); + /// + IValueNode IValueNode.WithLocation(Location? location) + => WithLocation(location); + /// /// Creates a new node from the current instance and replaces the /// with . diff --git a/src/HotChocolate/Primitives/src/Primitives/Types/FileValueNode.cs b/src/HotChocolate/Primitives/src/Primitives/Types/FileValueNode.cs index 843d6da42a3..221735013ca 100644 --- a/src/HotChocolate/Primitives/src/Primitives/Types/FileValueNode.cs +++ b/src/HotChocolate/Primitives/src/Primitives/Types/FileValueNode.cs @@ -37,6 +37,9 @@ public FileValueNode(IFile file) string IValueNode.Value => Value.Name; + /// + IValueNode IValueNode.WithLocation(Location? location) => this; + /// /// Determines whether the specified /// is equal to the current .