Skip to content

Commit edf7265

Browse files
committed
Removed Getter/Setter in favor of GetPropertyValueInvoker and SetPropertyValueInvoker delegates
1 parent 9cbbcc2 commit edf7265

File tree

5 files changed

+34
-101
lines changed

5 files changed

+34
-101
lines changed

src/NHibernate/Bytecode/Lightweight/AccessOptimizer.cs

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,34 @@ public class AccessOptimizer : IAccessOptimizer
1111
private readonly SetPropertyValuesInvoker setDelegate;
1212
private readonly GetterCallback getterCallback;
1313
private readonly SetterCallback setterCallback;
14-
private readonly Getter[] _getters;
15-
private readonly Setter[] _setters;
16-
private readonly Getter _specializedGetter;
17-
private readonly Setter _specializedSetter;
14+
private readonly GetPropertyValueInvoker[] _getters;
15+
private readonly SetPropertyValueInvoker[] _setters;
16+
private readonly GetPropertyValueInvoker _specializedGetter;
17+
private readonly SetPropertyValueInvoker _specializedSetter;
1818

1919
// Since 5.3
2020
[Obsolete("This constructor has no usages and will be removed in a future version")]
21-
public AccessOptimizer(GetPropertyValuesInvoker getDelegate, SetPropertyValuesInvoker setDelegate,
22-
IGetter[] getters, ISetter[] setters)
21+
public AccessOptimizer(
22+
GetPropertyValuesInvoker getDelegate,
23+
SetPropertyValuesInvoker setDelegate,
24+
IGetter[] getters,
25+
ISetter[] setters)
2326
: this(
2427
getDelegate,
25-
setDelegate,
26-
getters.Select(o => new Getter(o)).ToArray(),
27-
setters.Select(o => new Setter(o)).ToArray(),
28+
setDelegate,
29+
getters.Select(o => (GetPropertyValueInvoker) o.Get).ToArray(),
30+
setters.Select(o => (SetPropertyValueInvoker) o.Set).ToArray(),
2831
null,
2932
null)
3033
{
3134
}
3235

3336
public AccessOptimizer(GetPropertyValuesInvoker getDelegate,
3437
SetPropertyValuesInvoker setDelegate,
35-
Getter[] getters,
36-
Setter[] setters,
37-
Getter specializedGetter,
38-
Setter specializedSetter)
38+
GetPropertyValueInvoker[] getters,
39+
SetPropertyValueInvoker[] setters,
40+
GetPropertyValueInvoker specializedGetter,
41+
SetPropertyValueInvoker specializedSetter)
3942
{
4043
this.getDelegate = getDelegate;
4144
this.setDelegate = setDelegate;
@@ -77,26 +80,14 @@ internal object GetSpecializedPropertyValue(object target)
7780
return GetPropertyValue(target, _specializedGetter);
7881
}
7982

80-
private static object GetPropertyValue(object target, Getter getter)
83+
private static object GetPropertyValue(object target, GetPropertyValueInvoker getter)
8184
{
82-
if (getter.Optimized == null)
83-
{
84-
return getter.Default.Get(target);
85-
}
86-
87-
return getter.Optimized(target);
85+
return getter(target);
8886
}
8987

90-
private static void SetPropertyValue(object target, object value, Setter setter)
88+
private static void SetPropertyValue(object target, object value, SetPropertyValueInvoker setter)
9189
{
92-
if (setter.Optimized == null)
93-
{
94-
setter.Default.Set(target, value);
95-
}
96-
else
97-
{
98-
setter.Optimized(target, value);
99-
}
90+
setter(target, value);
10091
}
10192
}
10293
}

src/NHibernate/Bytecode/Lightweight/Delegates.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ namespace NHibernate.Bytecode.Lightweight
66

77
public delegate object[] GetPropertyValuesInvoker(object obj, GetterCallback callback);
88

9+
public delegate object GetPropertyValueInvoker(object obj);
10+
911
public delegate void SetPropertyValuesInvoker(object obj, object[] values, SetterCallback callback);
1012

13+
public delegate void SetPropertyValueInvoker(object obj, object value);
14+
1115
public delegate object CreateInstanceInvoker();
1216
}

src/NHibernate/Bytecode/Lightweight/Getter.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

src/NHibernate/Bytecode/Lightweight/ReflectionOptimizer.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,25 +56,25 @@ public ReflectionOptimizer(System.Type mappedType, IGetter[] getters, ISetter[]
5656
GetPropertyValuesInvoker getInvoker = GenerateGetPropertyValuesMethod(getters);
5757
SetPropertyValuesInvoker setInvoker = GenerateSetPropertyValuesMethod(setters);
5858

59-
var getMethods = new Getter[getters.Length];
59+
var getMethods = new GetPropertyValueInvoker[getters.Length];
6060
for (var i = 0; i < getters.Length; i++)
6161
{
62-
getMethods[i] = new Getter(getters[i], GenerateGetPropertyValueMethod(getters[i]));
62+
getMethods[i] = GenerateGetPropertyValueMethod(getters[i]) ?? getters[i].Get;
6363
}
6464

65-
var setMethods = new Setter[setters.Length];
65+
var setMethods = new SetPropertyValueInvoker[setters.Length];
6666
for (var i = 0; i < setters.Length; i++)
6767
{
68-
setMethods[i] = new Setter(setters[i], GenerateSetPropertyValueMethod(setters[i]));
68+
setMethods[i] = GenerateSetPropertyValueMethod(setters[i]) ?? setters[i].Set;
6969
}
7070

7171
accessOptimizer = new AccessOptimizer(
7272
getInvoker,
7373
setInvoker,
7474
getMethods,
7575
setMethods,
76-
new Getter(specializedGetter, GenerateGetPropertyValueMethod(specializedGetter)),
77-
new Setter(specializedSetter, GenerateSetPropertyValueMethod(specializedSetter))
76+
GenerateGetPropertyValueMethod(specializedGetter),
77+
GenerateSetPropertyValueMethod(specializedSetter)
7878
);
7979

8080
createInstanceMethod = CreateCreateInstanceMethod(mappedType);
@@ -162,7 +162,7 @@ private static void EmitCastToReference(ILGenerator il, System.Type type)
162162
private static readonly MethodInfo GetterCallbackInvoke = ReflectHelper.GetMethod<GetterCallback>(
163163
g => g.Invoke(null, 0));
164164

165-
private Func<object, object> GenerateGetPropertyValueMethod(IGetter getter)
165+
private GetPropertyValueInvoker GenerateGetPropertyValueMethod(IGetter getter)
166166
{
167167
if (!(getter is IOptimizableGetter optimizableGetter))
168168
{
@@ -179,10 +179,10 @@ private Func<object, object> GenerateGetPropertyValueMethod(IGetter getter)
179179
EmitUtil.EmitBoxIfNeeded(il, getter.ReturnType);
180180
il.Emit(OpCodes.Ret);
181181

182-
return (Func<object, object>) method.CreateDelegate(typeof(Func<object, object>));
182+
return (GetPropertyValueInvoker) method.CreateDelegate(typeof(GetPropertyValueInvoker));
183183
}
184184

185-
private Action<object, object> GenerateSetPropertyValueMethod(ISetter setter)
185+
private SetPropertyValueInvoker GenerateSetPropertyValueMethod(ISetter setter)
186186
{
187187
if (!(setter is IOptimizableSetter optimizableSetter))
188188
{
@@ -199,7 +199,7 @@ private Action<object, object> GenerateSetPropertyValueMethod(ISetter setter)
199199
optimizableSetter.Emit(il);
200200
il.Emit(OpCodes.Ret);
201201

202-
return (Action<object, object>) method.CreateDelegate(typeof(Action<object, object>));
202+
return (SetPropertyValueInvoker) method.CreateDelegate(typeof(SetPropertyValueInvoker));
203203
}
204204

205205
/// <summary>

src/NHibernate/Bytecode/Lightweight/Setter.cs

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)