Skip to content

Commit e171fe7

Browse files
committed
Return TypeInfo usage + no closure within IsTypeCacheable
1 parent 06fbf13 commit e171fe7

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Orm/Xtensive.Orm/Orm/Internals/CompiledQueryRunner.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,15 +222,21 @@ private bool IsQueryCacheable()
222222
private static bool IsTypeCacheable(Type type, IReadOnlySet<Type> supportedTypes)
223223
{
224224
var type1 = type.StripNullable();
225-
if (type1.IsGenericType) {
226-
// IReadOnlyList<T> implementations + ValueTuple<> with different number of argument types
227-
if (type1.IsValueTuple() && type1.GetGenericArguments().All(t => IsTypeCacheable(t, supportedTypes))) {
225+
var typeInfo = type1.GetTypeInfo();
226+
if (typeInfo.IsGenericType) {
227+
// IReadOnlyList<T> implementations + ValueTuple<> with different number of type arguments
228+
if (type1.IsValueTuple()) {
229+
foreach (var arg in typeInfo.GenericTypeArguments) {
230+
if (!IsTypeCacheable(arg, supportedTypes)) {
231+
return false;
232+
}
233+
}
228234
return true;
229235
}
230-
var genericDef = type1.GetGenericTypeDefinition();
231-
return genericDef.IsAssignableTo(WellKnownTypes.IReadOnlyListOfT) && IsTypeCacheable(type1.GetGenericArguments()[0], supportedTypes);
236+
var genericDef = typeInfo.GetGenericTypeDefinition();
237+
return genericDef.IsAssignableTo(WellKnownTypes.IReadOnlyListOfT) && IsTypeCacheable(typeInfo.GetGenericArguments()[0], supportedTypes);
232238
}
233-
else if (type1.IsArray) {
239+
else if (typeInfo.IsArray) {
234240
return IsTypeCacheable(type1.GetElementType(), supportedTypes);
235241
}
236242
else {
@@ -251,7 +257,7 @@ private static bool IsTypeCacheable(Type type, IReadOnlySet<Type> supportedTypes
251257
TypeCode.Char => true,
252258
TypeCode.String => true,
253259
TypeCode.DateTime => true,
254-
TypeCode.Object => type1.IsValueType,
260+
TypeCode.Object => typeInfo.IsValueType,
255261
_ => false
256262
};
257263
}

0 commit comments

Comments
 (0)