Skip to content

Commit 174a599

Browse files
committed
Fixed crash when a generic resource definition references an interface field from its OnApplySort lambda. Where we used to special-case for Identifiable.Id, we now always use the expression type for resource graph lookups. This is safe because its not possible in C# to remove base members. The value of memberExpression.Expression is null on static member access, which is unlikely to occur in sort lambdas.
1 parent 9af5eda commit 174a599

File tree

2 files changed

+4
-7
lines changed

2 files changed

+4
-7
lines changed

Diff for: src/JsonApiDotNetCore/Resources/SortExpressionLambdaConverter.cs

+2-5
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,9 @@ private static (Expression? innerExpression, bool isCount) TryReadCount(Expressi
114114

115115
private Expression? ReadAttribute(Expression expression)
116116
{
117-
if (expression is MemberExpression memberExpression)
117+
if (expression is MemberExpression { Expression: { } } memberExpression)
118118
{
119-
ResourceType resourceType = memberExpression.Member.Name == nameof(Identifiable<object>.Id) && memberExpression.Expression != null
120-
? _resourceGraph.GetResourceType(memberExpression.Expression.Type)
121-
: _resourceGraph.GetResourceType(memberExpression.Member.DeclaringType!);
122-
119+
ResourceType resourceType = _resourceGraph.GetResourceType(memberExpression.Expression.Type);
123120
AttrAttribute? attribute = resourceType.FindAttributeByPropertyName(memberExpression.Member.Name);
124121

125122
if (attribute != null)

Diff for: test/JsonApiDotNetCoreTests/UnitTests/ResourceDefinitions/CreateSortExpressionFromLambdaTests.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void Can_convert_chain_of_ToOne_relationships_ending_in_attribute()
3737
string[] expected =
3838
{
3939
"-fileEntries:content",
40-
"fileSystemEntries:name",
40+
"fileEntries:name",
4141
"fileEntries:length",
4242
"fileSystemEntries:parent.fileSystemEntries:name",
4343
"fileSystemEntries:parent.fileSystemEntries:parent.fileSystemEntries:name"
@@ -103,7 +103,7 @@ public void Can_convert_chain_with_conversion_to_derived_types()
103103
"fileSystemEntries:parent.fileEntries:content",
104104
"count(directoryEntries:subdirectories)",
105105
"count(fileSystemEntries:parent.directoryEntries:files)",
106-
"-fileSystemEntries:name"
106+
"-directoryEntries:name"
107107
};
108108

109109
expression.ToFullString().Should().Be(string.Join(',', expected));

0 commit comments

Comments
 (0)