Skip to content

Commit 7399aa5

Browse files
NH-3884 - Preliminary clean-up of NHibernateUtil
* Removing logic duplication for getting default NHibernate type for a clr type.
1 parent ccb6a59 commit 7399aa5

File tree

3 files changed

+20
-37
lines changed

3 files changed

+20
-37
lines changed

src/NHibernate/Async/NHibernateUtil.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,8 @@
2020

2121
namespace NHibernate
2222
{
23-
using System.Collections.Generic;
24-
using System.Reflection;
2523
using System.Threading.Tasks;
2624
using System.Threading;
27-
2825
public static partial class NHibernateUtil
2926
{
3027

@@ -47,13 +44,13 @@ public static partial class NHibernateUtil
4744
{
4845
return Task.CompletedTask;
4946
}
50-
else if (proxy.IsProxy())
47+
if (proxy.IsProxy())
5148
{
5249
return ((INHibernateProxy)proxy).HibernateLazyInitializer.InitializeAsync(cancellationToken);
5350
}
54-
else if (proxy is IPersistentCollection)
51+
else if (proxy is IPersistentCollection coll)
5552
{
56-
return ((IPersistentCollection)proxy).ForceInitializationAsync(cancellationToken);
53+
return coll.ForceInitializationAsync(cancellationToken);
5754
}
5855
return Task.CompletedTask;
5956
}

src/NHibernate/NHibernateUtil.cs

Lines changed: 8 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@
1010

1111
namespace NHibernate
1212
{
13-
using System.Collections.Generic;
14-
using System.Reflection;
15-
1613
/// <summary>
1714
/// Provides access to the full range of NHibernate built-in types.
1815
/// IType instances may be used to bind values to query parameters.
@@ -21,26 +18,6 @@ namespace NHibernate
2118
/// </summary>
2219
public static partial class NHibernateUtil
2320
{
24-
static private readonly Dictionary<System.Type, IType> clrTypeToNHibernateType = new Dictionary<System.Type, IType>();
25-
26-
static NHibernateUtil()
27-
{
28-
FieldInfo[] fields = typeof(NHibernateUtil).GetFields();
29-
foreach (FieldInfo info in fields)
30-
{
31-
if (typeof(IType).IsAssignableFrom(info.FieldType) == false)
32-
continue;
33-
IType type = (IType)info.GetValue(null);
34-
clrTypeToNHibernateType[type.ReturnedClass] = type;
35-
}
36-
37-
// There are multiple possibilites for boolean, strings and datetime.
38-
// Override so that we use the most natural mapping.
39-
clrTypeToNHibernateType[Boolean.ReturnedClass] = Boolean;
40-
clrTypeToNHibernateType[String.ReturnedClass] = String;
41-
clrTypeToNHibernateType[DateTime.ReturnedClass] = DateTime;
42-
}
43-
4421
/// <summary>
4522
/// Guesses the IType of this object
4623
/// </summary>
@@ -61,8 +38,8 @@ public static IType GuessType(System.Type type)
6138
{
6239
type = type.UnwrapIfNullable();
6340

64-
IType value;
65-
if (clrTypeToNHibernateType.TryGetValue(type, out value))
41+
var value = TypeFactory.GetDefaultTypeFor(type);
42+
if (value != null)
6643
return value;
6744

6845
if (type.IsEnum)
@@ -73,7 +50,7 @@ public static IType GuessType(System.Type type)
7350
{
7451
return Custom(type);
7552
}
76-
53+
7754
return Entity(type);
7855
}
7956

@@ -401,13 +378,13 @@ public static void Initialize(object proxy)
401378
{
402379
return;
403380
}
404-
else if (proxy.IsProxy())
381+
if (proxy.IsProxy())
405382
{
406383
((INHibernateProxy)proxy).HibernateLazyInitializer.Initialize();
407384
}
408-
else if (proxy is IPersistentCollection)
385+
else if (proxy is IPersistentCollection coll)
409386
{
410-
((IPersistentCollection)proxy).ForceInitialization();
387+
coll.ForceInitialization();
411388
}
412389
}
413390

@@ -533,7 +510,7 @@ public static void Close(IEnumerator enumerator)
533510
EnumerableImpl hibernateEnumerator = enumerator as EnumerableImpl;
534511
if (hibernateEnumerator == null)
535512
{
536-
throw new ArgumentException("Not a NHibernate enumerator", "enumerator");
513+
throw new ArgumentException("Not a NHibernate enumerator", nameof(enumerator));
537514
}
538515
hibernateEnumerator.Dispose();
539516
}
@@ -547,7 +524,7 @@ public static void Close(IEnumerable enumerable)
547524
EnumerableImpl hibernateEnumerable = enumerable as EnumerableImpl;
548525
if (hibernateEnumerable == null)
549526
{
550-
throw new ArgumentException("Not a NHibernate enumerable", "enumerable");
527+
throw new ArgumentException("Not a NHibernate enumerable", nameof(enumerable));
551528
}
552529
hibernateEnumerable.Dispose();
553530
}

src/NHibernate/Type/TypeFactory.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,15 @@ public static IType HeuristicType(string typeName, IDictionary<string, string> p
577577
return GetSerializableType(typeClass);
578578
}
579579

580+
/// <summary>
581+
/// Get the current default NHibernate type for a .Net type.
582+
/// </summary>
583+
/// <param name="type">The .Net type for which to get the corresponding default NHibernate type.</param>
584+
/// <returns>The current default NHibernate type for a .Net type if any, otherwise <see langword="null" />.</returns>
585+
public static IType GetDefaultTypeFor(System.Type type)
586+
{
587+
return typeByTypeOfName.TryGetValue(type.FullName, out var nhType) ? nhType : null;
588+
}
580589

581590
public static NullableType GetAnsiStringType(int length)
582591
{

0 commit comments

Comments
 (0)