Skip to content

Commit 3b997ed

Browse files
committed
- Base abstract class for internal bytecode providers (with ActivatorObjectsFactory)
- Refactoring all internals bytecode providers. SVN: trunk@4345
1 parent 865223d commit 3b997ed

File tree

6 files changed

+76
-146
lines changed

6 files changed

+76
-146
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
using System;
2+
using NHibernate.Properties;
3+
using NHibernate.Util;
4+
5+
namespace NHibernate.Bytecode
6+
{
7+
public abstract class AbstractBytecodeProvider : IBytecodeProvider, IInjectableProxyFactoryFactory
8+
{
9+
private readonly IObjectsFactory objectsFactory = new ActivatorObjectsFactory();
10+
protected System.Type proxyFactoryFactory;
11+
12+
#region IBytecodeProvider Members
13+
14+
public virtual IProxyFactoryFactory ProxyFactoryFactory
15+
{
16+
get
17+
{
18+
if (proxyFactoryFactory != null)
19+
{
20+
try
21+
{
22+
return (IProxyFactoryFactory)Activator.CreateInstance(proxyFactoryFactory);
23+
}
24+
catch (Exception e)
25+
{
26+
throw new HibernateByteCodeException("Failed to create an instance of '" + proxyFactoryFactory.FullName + "'!", e);
27+
}
28+
}
29+
30+
throw new ProxyFactoryFactoryNotConfiguredException();
31+
}
32+
}
33+
34+
public abstract IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters);
35+
36+
public virtual IObjectsFactory ObjectsFactory
37+
{
38+
get { return objectsFactory; }
39+
}
40+
41+
#endregion
42+
43+
#region IInjectableProxyFactoryFactory Members
44+
45+
public virtual void SetProxyFactoryFactory(string typeName)
46+
{
47+
System.Type pffc;
48+
try
49+
{
50+
pffc = ReflectHelper.ClassForName(typeName);
51+
}
52+
catch (Exception he)
53+
{
54+
throw new UnableToLoadProxyFactoryFactoryException(typeName, he);
55+
}
56+
57+
if (typeof(IProxyFactoryFactory).IsAssignableFrom(pffc) == false)
58+
{
59+
var he = new HibernateByteCodeException(pffc.FullName + " does not implement " + typeof(IProxyFactoryFactory).FullName);
60+
throw he;
61+
}
62+
proxyFactoryFactory = pffc;
63+
}
64+
65+
#endregion
66+
}
67+
}

src/NHibernate/Bytecode/CodeDom/BytecodeProviderImpl.cs

+2-48
Original file line numberDiff line numberDiff line change
@@ -5,41 +5,19 @@
55
using log4net;
66
using Microsoft.CSharp;
77
using NHibernate.Properties;
8-
using NHibernate.Util;
98

109
namespace NHibernate.Bytecode.CodeDom
1110
{
1211
/// <summary>
1312
/// CodeDOM-based bytecode provider.
1413
/// </summary>
15-
public class BytecodeProviderImpl : IBytecodeProvider, IInjectableProxyFactoryFactory
14+
public class BytecodeProviderImpl : AbstractBytecodeProvider
1615
{
1716
private static readonly ILog log = LogManager.GetLogger(typeof (BytecodeProviderImpl));
18-
private System.Type proxyFactoryFactory;
1917

2018
#region IBytecodeProvider Members
2119

22-
public IProxyFactoryFactory ProxyFactoryFactory
23-
{
24-
get
25-
{
26-
if (proxyFactoryFactory != null)
27-
{
28-
try
29-
{
30-
return (IProxyFactoryFactory) Activator.CreateInstance(proxyFactoryFactory);
31-
}
32-
catch (Exception e)
33-
{
34-
throw new HibernateByteCodeException("Failed to create an instance of '" + proxyFactoryFactory.FullName + "'!", e);
35-
}
36-
}
37-
38-
throw new ProxyFactoryFactoryNotConfiguredException();
39-
}
40-
}
41-
42-
public IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters)
20+
public override IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters)
4321
{
4422
if (clazz.IsValueType)
4523
{
@@ -52,30 +30,6 @@ public IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[]
5230

5331
#endregion
5432

55-
#region Implementation of IInjectableProxyFactoryFactory
56-
57-
public void SetProxyFactoryFactory(string typeName)
58-
{
59-
System.Type pffc;
60-
try
61-
{
62-
pffc = ReflectHelper.ClassForName(typeName);
63-
}
64-
catch (Exception he)
65-
{
66-
throw new UnableToLoadProxyFactoryFactoryException(typeName, he);
67-
}
68-
69-
if (typeof (IProxyFactoryFactory).IsAssignableFrom(pffc) == false)
70-
{
71-
var he = new HibernateByteCodeException(pffc.FullName + " does not implement " + typeof(IProxyFactoryFactory).FullName);
72-
throw he;
73-
}
74-
proxyFactoryFactory = pffc;
75-
}
76-
77-
#endregion
78-
7933
#region Nested type: Generator
8034

8135
public class Generator

src/NHibernate/Bytecode/IBytecodeProvider.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ public interface IBytecodeProvider
2020
/// <returns>The reflection optimization delegate.</returns>
2121
IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters);
2222

23+
IObjectsFactory ObjectsFactory { get; }
24+
2325
// <summary> Generate a ClassTransformer capable of performing bytecode manipulation. </summary>
2426
// <param name="classFilter">
2527
// filter used to limit which classes are to be instrumented via this ClassTransformer.
@@ -31,6 +33,5 @@ public interface IBytecodeProvider
3133
// <returns> The appropriate ClassTransformer. </returns>
3234
// Not ported
3335
//ClassTransformer getTransformer(ClassFilter classFilter, FieldFilter fieldFilter);
34-
3536
}
3637
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System;
21
using NHibernate.Properties;
3-
using NHibernate.Util;
42

53
namespace NHibernate.Bytecode.Lightweight
64
{
@@ -12,67 +10,23 @@ namespace NHibernate.Bytecode.Lightweight
1210
/// Used in <see cref="NHibernate.Persister.Entity.AbstractEntityPersister"/> and
1311
/// <see cref="NHibernate.Type.ComponentType"/>
1412
/// </remarks>
15-
public class BytecodeProviderImpl : IBytecodeProvider, IInjectableProxyFactoryFactory
13+
public class BytecodeProviderImpl : AbstractBytecodeProvider
1614
{
17-
private System.Type proxyFactoryFactory;
1815

1916
#region IBytecodeProvider Members
2017

21-
public virtual IProxyFactoryFactory ProxyFactoryFactory
22-
{
23-
get
24-
{
25-
if (proxyFactoryFactory != null)
26-
{
27-
try
28-
{
29-
return (IProxyFactoryFactory) Activator.CreateInstance(proxyFactoryFactory);
30-
}
31-
catch (Exception e)
32-
{
33-
throw new HibernateByteCodeException("Failed to create an instance of '" + proxyFactoryFactory.FullName + "'!", e);
34-
}
35-
}
36-
throw new ProxyFactoryFactoryNotConfiguredException();
37-
}
38-
}
39-
4018
/// <summary>
4119
/// Generate the IReflectionOptimizer object
4220
/// </summary>
4321
/// <param name="mappedClass">The target class</param>
4422
/// <param name="setters">Array of setters</param>
4523
/// <param name="getters">Array of getters</param>
4624
/// <returns><see langword="null" /> if the generation fails</returns>
47-
public IReflectionOptimizer GetReflectionOptimizer(System.Type mappedClass, IGetter[] getters, ISetter[] setters)
25+
public override IReflectionOptimizer GetReflectionOptimizer(System.Type mappedClass, IGetter[] getters, ISetter[] setters)
4826
{
4927
return new ReflectionOptimizer(mappedClass, getters, setters);
5028
}
5129

5230
#endregion
53-
54-
#region IInjectableProxyFactoryFactory Members
55-
56-
public void SetProxyFactoryFactory(string typeName)
57-
{
58-
System.Type pffc;
59-
try
60-
{
61-
pffc = ReflectHelper.ClassForName(typeName);
62-
}
63-
catch (Exception he)
64-
{
65-
throw new UnableToLoadProxyFactoryFactoryException(typeName, he);
66-
}
67-
68-
if (typeof (IProxyFactoryFactory).IsAssignableFrom(pffc) == false)
69-
{
70-
var he = new HibernateByteCodeException(pffc.FullName + " does not implement " + typeof(IProxyFactoryFactory).FullName);
71-
throw he;
72-
}
73-
proxyFactoryFactory = pffc;
74-
}
75-
76-
#endregion
7731
}
7832
}
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,20 @@
1-
using System;
21
using NHibernate.Properties;
3-
using NHibernate.Util;
42

53
namespace NHibernate.Bytecode
64
{
75
/// <summary>
86
/// A <see cref="IBytecodeProvider" /> implementation that returns
97
/// <see langword="null" />, disabling reflection optimization.
108
/// </summary>
11-
public class NullBytecodeProvider : IBytecodeProvider, IInjectableProxyFactoryFactory
9+
public class NullBytecodeProvider : AbstractBytecodeProvider
1210
{
13-
private System.Type proxyFactoryFactory;
14-
1511
#region IBytecodeProvider Members
1612

17-
public IProxyFactoryFactory ProxyFactoryFactory
18-
{
19-
get
20-
{
21-
if (proxyFactoryFactory != null)
22-
{
23-
try
24-
{
25-
return (IProxyFactoryFactory) Activator.CreateInstance(proxyFactoryFactory);
26-
}
27-
catch (Exception e)
28-
{
29-
throw new HibernateByteCodeException("Failed to create an instance of '" + proxyFactoryFactory.FullName + "'!", e);
30-
}
31-
}
32-
throw new ProxyFactoryFactoryNotConfiguredException();
33-
}
34-
}
35-
36-
public IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters)
13+
public override IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters)
3714
{
3815
return null;
3916
}
4017

4118
#endregion
42-
43-
#region Implementation of IInjectableProxyFactoryFactory
44-
45-
public void SetProxyFactoryFactory(string typeName)
46-
{
47-
System.Type pffc;
48-
try
49-
{
50-
pffc = ReflectHelper.ClassForName(typeName);
51-
}
52-
catch (Exception he)
53-
{
54-
throw new UnableToLoadProxyFactoryFactoryException(typeName, he);
55-
}
56-
57-
if (typeof (IProxyFactoryFactory).IsAssignableFrom(pffc) == false)
58-
{
59-
var he = new HibernateByteCodeException(pffc.FullName + " does not implement " + typeof(IProxyFactoryFactory).FullName);
60-
throw he;
61-
}
62-
proxyFactoryFactory = pffc;
63-
}
64-
65-
#endregion
6619
}
6720
}

src/NHibernate/NHibernate.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@
449449
<Compile Include="AdoNet\Util\FormatStyle.cs" />
450450
<Compile Include="AdoNet\Util\IFormatter.cs" />
451451
<Compile Include="AdoNet\Util\SqlStatementLogger.cs" />
452+
<Compile Include="Bytecode\AbstractBytecodeProvider.cs" />
452453
<Compile Include="Bytecode\ActivatorObjectsFactory.cs" />
453454
<Compile Include="Bytecode\HibernateByteCodeException.cs" />
454455
<Compile Include="Bytecode\IObjectsFactory.cs" />

0 commit comments

Comments
 (0)