Skip to content

Commit 0853647

Browse files
committed
Added fallbacks for back compatibility
1 parent 1ccdc30 commit 0853647

File tree

6 files changed

+61
-9
lines changed

6 files changed

+61
-9
lines changed

src/NHibernate/Async/Persister/Entity/IEntityPersister.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using NHibernate.Type;
1919
using System.Collections;
2020
using System.Collections.Generic;
21+
using NHibernate.Intercept;
22+
using NHibernate.Util;
2123

2224
namespace NHibernate.Persister.Entity
2325
{

src/NHibernate/Intercept/IFieldInterceptor.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using NHibernate.Engine;
4+
using NHibernate.Util;
45

56
namespace NHibernate.Intercept
67
{
@@ -30,7 +31,7 @@ public interface IFieldInterceptor
3031

3132
/// <summary> Intercept field set/get </summary>
3233
// Since v5.3
33-
[Obsolete("This method has no more usages and will be removed in a future version")]
34+
[Obsolete("Please use 'Intercept(object target, string fieldName, object value, bool setter)' extension method instead")]
3435
object Intercept(object target, string fieldName, object value);
3536

3637
/// <summary> Get the entity-name of the field DeclaringType.</summary>
@@ -42,16 +43,23 @@ public interface IFieldInterceptor
4243

4344
public static class FieldInterceptorExtensions
4445
{
46+
// 6.0 TODO: merge into IFieldInterceptor
4547
internal static ISet<string> GetUninitializedLazyProperties(this IFieldInterceptor interceptor)
4648
{
4749
if (interceptor is AbstractFieldInterceptor fieldInterceptor)
4850
{
4951
return fieldInterceptor.GetUninitializedLazyProperties();
5052
}
5153

52-
throw new NotSupportedException("GetUninitializedLazyProperties method is not supported.");
54+
if (interceptor.IsInitialized)
55+
{
56+
return CollectionHelper.EmptySet<string>();
57+
}
58+
59+
return null; // The called should use all lazy properties as the result
5360
}
5461

62+
// 6.0 TODO: merge into IFieldInterceptor
5563
public static object Intercept(this IFieldInterceptor interceptor, object target, string fieldName, object value, bool setter)
5664
{
5765
if (interceptor is AbstractFieldInterceptor fieldInterceptor)

src/NHibernate/Persister/Entity/AbstractEntityPersister.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4105,7 +4105,7 @@ public void AfterInitialize(object entity, bool lazyPropertiesAreUnfetched, ISes
41054105

41064106
internal ISet<string> GetUninitializedLazyProperties(object entity)
41074107
{
4108-
return EntityTuplizer.GetUninitializedLazyProperties(entity);
4108+
return EntityTuplizer.GetUninitializedLazyProperties(entity) ?? new HashSet<string>(lazyPropertyNames);
41094109
}
41104110

41114111
internal ISet<string> GetUninitializedLazyProperties(object[] state)

src/NHibernate/Persister/Entity/IEntityPersister.cs

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using NHibernate.Type;
99
using System.Collections;
1010
using System.Collections.Generic;
11+
using NHibernate.Intercept;
12+
using NHibernate.Util;
1113

1214
namespace NHibernate.Persister.Entity
1315
{
@@ -630,11 +632,26 @@ internal static ISet<string> GetUninitializedLazyProperties(this IEntityPersiste
630632
return abstractEntityPersister.GetUninitializedLazyProperties(entity);
631633
}
632634

633-
throw new InvalidOperationException($"{persister?.GetType()} does not support GetUninitializedLazyProperties method.");
635+
if (!persister.HasUninitializedLazyProperties(entity))
636+
{
637+
return CollectionHelper.EmptySet<string>();
638+
}
639+
640+
// Assume they are all uninitialized.
641+
var result = new HashSet<string>();
642+
for (var i = 0; i < persister.PropertyLaziness.Length; i++)
643+
{
644+
if (persister.PropertyLaziness[i])
645+
{
646+
result.Add(persister.PropertyNames[i]);
647+
}
648+
}
649+
650+
return result;
634651
}
635652

636653
/// <summary>
637-
/// Get uninitialized lazy properties from one row of a result set
654+
/// Get uninitialized lazy properties from entity state
638655
/// </summary>
639656
//6.0 TODO: Merge into IEntityPersister
640657
public static ISet<string> GetUninitializedLazyProperties(this IEntityPersister persister, object[] state)
@@ -644,7 +661,21 @@ public static ISet<string> GetUninitializedLazyProperties(this IEntityPersister
644661
return abstractEntityPersister.GetUninitializedLazyProperties(state);
645662
}
646663

647-
throw new InvalidOperationException($"{persister?.GetType()} does not support GetUninitializedProperties method.");
664+
if (!persister.HasLazyProperties)
665+
{
666+
return CollectionHelper.EmptySet<string>();
667+
}
668+
669+
var result = new HashSet<string>();
670+
for (var i = 0; i < persister.PropertyLaziness.Length; i++)
671+
{
672+
if (persister.PropertyLaziness[i] && state[i] == LazyPropertyInitializer.UnfetchedProperty)
673+
{
674+
result.Add(persister.PropertyNames[i]);
675+
}
676+
}
677+
678+
return result;
648679
}
649680
}
650681
}

src/NHibernate/Tuple/Entity/IEntityTuplizer.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections;
33
using System.Collections.Generic;
44
using NHibernate.Engine;
5+
using NHibernate.Util;
56

67
namespace NHibernate.Tuple.Entity
78
{
@@ -119,7 +120,7 @@ public interface IEntityTuplizer : ITuplizer
119120
bool HasUninitializedLazyProperties(object entity);
120121
}
121122

122-
internal static class EntityPersisterExtensions
123+
internal static class EntityTuplizerExtensions
123124
{
124125
//6.0 TODO: Merge into IEntityTuplizer
125126
internal static ISet<string> GetUninitializedLazyProperties(this IEntityTuplizer entityTuplizer, object entity)
@@ -128,8 +129,13 @@ internal static ISet<string> GetUninitializedLazyProperties(this IEntityTuplizer
128129
{
129130
return abstractEntityTuplizer.GetUninitializedLazyProperties(entity);
130131
}
131-
throw new NotSupportedException("GetUninitializedLazyProperties method is not supported.");
132132

133+
if (!entityTuplizer.HasUninitializedLazyProperties(entity))
134+
{
135+
return CollectionHelper.EmptySet<string>();
136+
}
137+
138+
return null; // The called should use all lazy properties as the result
133139
}
134140
}
135141
}

src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,12 @@ internal override ISet<string> GetUninitializedLazyProperties(object entity)
286286
}
287287

288288
var interceptor = FieldInterceptionHelper.ExtractFieldInterceptor(entity);
289-
return interceptor?.GetUninitializedLazyProperties() ?? CollectionHelper.EmptySet<string>();
289+
if (interceptor == null)
290+
{
291+
return CollectionHelper.EmptySet<string>();
292+
}
293+
294+
return interceptor.GetUninitializedLazyProperties() ?? lazyPropertyNames;
290295
}
291296

292297
public override bool IsLifecycleImplementor

0 commit comments

Comments
 (0)