Skip to content

Commit 42de05f

Browse files
feat(primitive-collections): including literal types for non-navigation/simple members.
AutoMapper/AutoMapper.Extensions.OData#196
1 parent 52941fa commit 42de05f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

LogicBuilder.Expressions.Utils.Tests/TypeExtensionsTests.cs

+13
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class TypeExtensionsTests
1111
[Theory]
1212
[InlineData(nameof(DerivedThing.Id), typeof(DerivedThing))]
1313
[InlineData(nameof(DerivedThing.Name), typeof(BaseThing))]
14+
[InlineData(nameof(DerivedThing.DataInBytes), typeof(BaseThing))]
1415
[InlineData(nameof(DerivedThing.Description), typeof(DerivedThing))]
1516
public void MemberInfoReflectedTypeMustMatchTheDeclaringType(string propertyName, Type reflectedType)
1617
{
@@ -24,6 +25,7 @@ public void MemberInfoReflectedTypeMustMatchTheDeclaringType(string propertyName
2425
[Theory]
2526
[InlineData(nameof(DerivedThing.Id), typeof(DerivedThing))]
2627
[InlineData(nameof(DerivedThing.Name), typeof(BaseThing))]
28+
[InlineData(nameof(DerivedThing.DataInBytes), typeof(BaseThing))]
2729
[InlineData(nameof(DerivedThing.Description), typeof(DerivedThing))]
2830
public void MemberInfoReflectedTypeMustMatchTheDeclaringTypeForGetSelectedMembers(string propertyName,
2931
Type reflectedType)
@@ -67,6 +69,17 @@ public void GetSelectedMembers_WhenSelectIsEmpty_MustReturnAllLiteralAndLiteralL
6769
private abstract class BaseThing
6870
{
6971
public string Name { get; set; }
72+
public byte[] DataInBytes { get; set; }
73+
public string[] ParametersArray { get; set; }
74+
public ICollection<string> Strings { get; set; }
75+
public List<string> ParametersList { get; set; }
76+
public List<bool> Booleans { get; set; }
77+
public ISet<DateTime> DateTimes { get; set; }
78+
public ISet<DateOnly> Dates { get; set; }
79+
public HashSet<Guid> Guides { get; set; }
80+
public uint[] UnsignedInts { get; set; }
81+
public IEnumerable<int> Ints { get; set; }
82+
public List<object> Objects { get; set; }
7083
}
7184

7285
private class DerivedThing : BaseThing, IDerivedThing

LogicBuilder.Expressions.Utils/TypeExtensions.cs

+13
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,19 @@ private static MemberInfo[] GetValueTypeMembers(this Type parentType)
207207
&& (info.GetMemberType().IsLiteralType() || info.GetMemberType().IsLiteralList())
208208
).ToArray();
209209
}
210+
211+
private static bool IsLiteralList(this Type type)
212+
{
213+
// Check if type is a List
214+
if (!type.IsList()) return false;
215+
216+
// If not generic, check if it's a literal type (i.e. string[])
217+
if (!type.IsGenericType) return type.GetElementType().IsLiteralType();
218+
219+
// Extract the type T from List<T> and check if it's a literal type
220+
var firstGenericArgument = type.GetGenericArguments().First();
221+
return firstGenericArgument.IsLiteralType();
222+
}
210223

211224
private static bool IsLiteralList(this Type type)
212225
=> type.IsList() && type.GetUnderlyingElementType().IsLiteralType();

0 commit comments

Comments
 (0)