Skip to content

Commit ebbb825

Browse files
Merge branch 'master' into defAliases
2 parents e1ce4b6 + 906c692 commit ebbb825

13 files changed

+643
-28
lines changed

src/NHibernate.Test/Bytecode/Lightweight/BytecodeProviderFixture.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public void NotConfiguredProxyFactoryFactory()
1414
{
1515
var bcp = new BytecodeProviderImpl();
1616
IProxyFactoryFactory p = bcp.ProxyFactoryFactory;
17-
Assert.That(p, Is.InstanceOf<DefaultProxyFactoryFactory>());
17+
Assert.That(p, Is.InstanceOf<StaticProxyFactoryFactory>());
1818
}
1919

2020
[Test]

src/NHibernate.Test/Logging/LoggerProviderTest.cs

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using NUnit.Framework;
23

34
namespace NHibernate.Test.Logging
@@ -12,17 +13,29 @@ public void LoggerProviderCanCreateLoggers()
1213
Assert.That(NHibernateLogger.For(typeof (LoggerProviderTest)), Is.Not.Null);
1314
}
1415

16+
[Test, Obsolete]
17+
public void LoggerProviderCanCreateLoggers_Obsolete()
18+
{
19+
Assert.That(LoggerProvider.LoggerFor("pizza"), Is.Not.Null);
20+
Assert.That(LoggerProvider.LoggerFor(typeof (LoggerProviderTest)), Is.Not.Null);
21+
}
22+
1523
[Test]
1624
public void WhenNotConfiguredAndLog4NetExistsThenUseLog4NetFactory()
1725
{
18-
#pragma warning disable 618
19-
Assert.That(NHibernateLogger.For("pizza"), Is.Not.InstanceOf<NoLoggingInternalLogger>());
20-
#pragma warning restore 618
21-
2226
// NoLoggingNHibernateLogger is internal
2327
Assert.That(NHibernateLogger.For("pizza").GetType().Name, Is.Not.EqualTo("NoLoggingNHibernateLogger"));
2428
}
2529

30+
[Test, Obsolete]
31+
public void WhenNotConfiguredAndLog4NetExistsThenUseLog4NetFactory_Obsolete()
32+
{
33+
Assert.That(LoggerProvider.LoggerFor("pizza"), Is.Not.InstanceOf<NoLoggingInternalLogger>());
34+
35+
// works because this is the legacy provider with a legacy logger
36+
Assert.That(LoggerProvider.LoggerFor("pizza"), Is.InstanceOf<Log4NetLogger>());
37+
}
38+
2639
[Test, Explicit("Changes global state.")]
2740
public void WhenConfiguredAsNullThenNoLoggingFactoryIsUsed()
2841
{
@@ -31,5 +44,30 @@ public void WhenConfiguredAsNullThenNoLoggingFactoryIsUsed()
3144
// NoLoggingNHibernateLogger is internal
3245
Assert.That(NHibernateLogger.For("pizza").GetType().Name, Is.EqualTo("NoLoggingNHibernateLogger"));
3346
}
47+
48+
[Test, Explicit("Changes global state."), Obsolete]
49+
public void WhenConfiguredAsNullThenNoLoggingFactoryIsUsed_Obsolete()
50+
{
51+
NHibernateLogger.SetLoggersFactory(default(INHibernateLoggerFactory));
52+
53+
Assert.That(LoggerProvider.LoggerFor("pizza"), Is.InstanceOf<NoLoggingInternalLogger>());
54+
}
55+
56+
[Test, Explicit("Changes global state."), Obsolete]
57+
public void WhenNoLoggingFactoryIsUsedThenNoLoggingInternalLoggerIsReturned()
58+
{
59+
LoggerProvider.SetLoggersFactory(new NoLoggingLoggerFactory());
60+
61+
Assert.That(LoggerProvider.LoggerFor("pizza"), Is.InstanceOf<NoLoggingInternalLogger>());
62+
}
63+
64+
[Test, Explicit("Changes global state."), Obsolete]
65+
public void WhenNoLoggingFactoryIsUsedThenNoLoggingNHibernateLoggerIsReturned()
66+
{
67+
LoggerProvider.SetLoggersFactory(new NoLoggingLoggerFactory());
68+
69+
// NoLoggingNHibernateLogger is internal
70+
Assert.That(NHibernateLogger.For("pizza").GetType().Name, Is.EqualTo("NoLoggingNHibernateLogger"));
71+
}
3472
}
3573
}

src/NHibernate/Bytecode/AbstractBytecodeProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public virtual IProxyFactoryFactory ProxyFactoryFactory
2828
throw new HibernateByteCodeException("Failed to create an instance of '" + proxyFactoryFactory.FullName + "'!", e);
2929
}
3030
}
31-
return new DefaultProxyFactoryFactory();
31+
32+
return StaticProxyFactoryFactory.Instance;
3233
}
3334
}
3435

@@ -116,4 +117,4 @@ public void SetCollectionTypeFactoryClass(System.Type type)
116117

117118
#endregion
118119
}
119-
}
120+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using NHibernate.Proxy;
2+
3+
namespace NHibernate.Bytecode
4+
{
5+
public class StaticProxyFactoryFactory : IProxyFactoryFactory
6+
{
7+
internal static StaticProxyFactoryFactory Instance = new StaticProxyFactoryFactory();
8+
9+
public IProxyFactory BuildProxyFactory() => new StaticProxyFactory();
10+
11+
public IProxyValidator ProxyValidator => new DynProxyTypeValidator();
12+
13+
public bool IsInstrumented(System.Type entityClass) => true;
14+
15+
public bool IsProxy(object entity) => entity is INHibernateProxy;
16+
}
17+
}

src/NHibernate/Logging.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ public static class NHibernateLogger
5252
private const string nhibernateLoggerConfKey = "nhibernate-logger";
5353
private static INHibernateLoggerFactory _loggerFactory;
5454

55+
#pragma warning disable 618
56+
internal static ILoggerFactory LegacyLoggerFactory { get; private set; }
57+
#pragma warning restore 618
58+
5559
static NHibernateLogger()
5660
{
5761
var nhibernateLoggerClass = GetNhibernateLoggerClass();
@@ -68,9 +72,21 @@ public static void SetLoggersFactory(INHibernateLoggerFactory loggerFactory)
6872
_loggerFactory = loggerFactory ?? new NoLoggingNHibernateLoggerFactory();
6973

7074
#pragma warning disable 618
71-
if (!(loggerFactory is LoggerProvider.LegacyLoggerFactoryAdaptor))
75+
// Also keep global state for obsolete logger
76+
if (loggerFactory == null)
77+
{
78+
LegacyLoggerFactory = new NoLoggingLoggerFactory();
79+
}
80+
else
7281
{
73-
LoggerProvider.SetLoggersFactory(new LoggerProvider.ReverseLegacyLoggerFactoryAdaptor(loggerFactory));
82+
if (loggerFactory is LoggerProvider.LegacyLoggerFactoryAdaptor legacyAdaptor)
83+
{
84+
LegacyLoggerFactory = legacyAdaptor.Factory;
85+
}
86+
else
87+
{
88+
LegacyLoggerFactory = new LoggerProvider.ReverseLegacyLoggerFactoryAdaptor(loggerFactory);
89+
}
7490
}
7591
#pragma warning restore 618
7692
}

src/NHibernate/Logging.obsolete.cs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -82,54 +82,47 @@ public interface ILoggerFactory
8282
[Obsolete("Use NHibernateLogger instead.")]
8383
public class LoggerProvider
8484
{
85-
private static ILoggerFactory _legacyLoggerFactory;
86-
8785
[Obsolete("Implement INHibernateLoggerFactory and use NHibernateLogger.SetLoggersFactory() instead")]
8886
public static void SetLoggersFactory(ILoggerFactory loggerFactory)
8987
{
90-
_legacyLoggerFactory = loggerFactory ?? new NoLoggingLoggerFactory();
91-
92-
if (!(loggerFactory is ReverseLegacyLoggerFactoryAdaptor))
93-
{
94-
var factory = loggerFactory == null || loggerFactory is NoLoggingLoggerFactory
95-
? null
96-
: (INHibernateLoggerFactory) new LegacyLoggerFactoryAdaptor(loggerFactory);
88+
var factory = (loggerFactory == null || loggerFactory is NoLoggingLoggerFactory)
89+
? null
90+
: (INHibernateLoggerFactory) new LegacyLoggerFactoryAdaptor(loggerFactory);
9791

98-
NHibernateLogger.SetLoggersFactory(factory);
99-
}
92+
NHibernateLogger.SetLoggersFactory(factory);
10093
}
10194

10295
[Obsolete("Use NHibernateLogger.For() instead.")]
10396
public static IInternalLogger LoggerFor(string keyName)
10497
{
105-
return _legacyLoggerFactory.LoggerFor(keyName);
98+
return NHibernateLogger.LegacyLoggerFactory.LoggerFor(keyName);
10699
}
107100

108101
[Obsolete("Use NHibernateLogger.For() instead.")]
109102
public static IInternalLogger LoggerFor(System.Type type)
110103
{
111-
return _legacyLoggerFactory.LoggerFor(type);
104+
return NHibernateLogger.LegacyLoggerFactory.LoggerFor(type);
112105
}
113106

114107
// Since 5.1
115108
[Obsolete("Used only in Obsolete functions to thunk to INHibernateLoggerFactory")]
116109
internal class LegacyLoggerFactoryAdaptor : INHibernateLoggerFactory
117110
{
118-
private readonly ILoggerFactory _factory;
111+
internal ILoggerFactory Factory { get; }
119112

120113
public LegacyLoggerFactoryAdaptor(ILoggerFactory factory)
121114
{
122-
_factory = factory;
115+
Factory = factory;
123116
}
124117

125118
public INHibernateLogger LoggerFor(string keyName)
126119
{
127-
return new NHibernateLoggerThunk(_factory.LoggerFor(keyName));
120+
return new NHibernateLoggerThunk(Factory.LoggerFor(keyName));
128121
}
129122

130123
public INHibernateLogger LoggerFor(System.Type type)
131124
{
132-
return new NHibernateLoggerThunk(_factory.LoggerFor(type));
125+
return new NHibernateLoggerThunk(Factory.LoggerFor(type));
133126
}
134127
}
135128

src/NHibernate/Proxy/DynamicProxy/DefaultProxyMethodBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public DefaultyProxyMethodBuilder(IMethodBodyEmitter emitter)
3030

3131
public IMethodBodyEmitter MethodBodyEmitter { get; private set; }
3232

33-
private static MethodBuilder GenerateMethodSignature(string name, MethodInfo method, TypeBuilder typeBuilder)
33+
internal static MethodBuilder GenerateMethodSignature(string name, MethodInfo method, TypeBuilder typeBuilder)
3434
{
3535
//TODO: Should we use attributes of base method?
3636
var methodAttributes = MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.Virtual;

src/NHibernate/Proxy/DynamicProxy/ProxyFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private TypeInfo CreateUncachedProxyType(System.Type baseType, IReadOnlyCollecti
129129
return proxyType;
130130
}
131131

132-
private IEnumerable<MethodInfo> GetProxiableMethods(System.Type type, IEnumerable<System.Type> interfaces)
132+
internal static IEnumerable<MethodInfo> GetProxiableMethods(System.Type type, IEnumerable<System.Type> interfaces)
133133
{
134134
const BindingFlags candidateMethodsBindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
135135
return
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System;
2+
using NHibernate.Engine;
3+
4+
namespace NHibernate.Proxy
5+
{
6+
[Serializable]
7+
internal sealed class LiteLazyInitializer : AbstractLazyInitializer
8+
{
9+
internal LiteLazyInitializer(string entityName, object id, ISessionImplementor session, System.Type persistentClass)
10+
: base(entityName, id, session)
11+
{
12+
PersistentClass = persistentClass;
13+
}
14+
15+
public override System.Type PersistentClass { get; }
16+
}
17+
}

0 commit comments

Comments
 (0)