From 2204ce8ea5224329f1b217a8c5cd566e76b045af Mon Sep 17 00:00:00 2001 From: ohad Date: Fri, 8 Feb 2013 13:04:25 +0200 Subject: [PATCH 1/2] Bug fix: CompositionProxyTypeBuilder crashed when class has protected constructor. --- .../Proxy/CompositionProxyTypeBuilder.cs | 4 ++-- .../Objects/ClassWithProtectedCtor.cs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 test/Spring/Spring.Core.Tests/Objects/ClassWithProtectedCtor.cs diff --git a/src/Spring/Spring.Core/Proxy/CompositionProxyTypeBuilder.cs b/src/Spring/Spring.Core/Proxy/CompositionProxyTypeBuilder.cs index 8e9ad773..26717afd 100644 --- a/src/Spring/Spring.Core/Proxy/CompositionProxyTypeBuilder.cs +++ b/src/Spring/Spring.Core/Proxy/CompositionProxyTypeBuilder.cs @@ -197,8 +197,8 @@ namespace Spring.Proxy { il.Emit(OpCodes.Ldarg_S, i); } - il.Emit(OpCodes.Newobj, TargetType.GetConstructor( - ReflectionUtils.GetParameterTypes(constructor.GetParameters()))); + + il.Emit(OpCodes.Newobj, constructor); il.Emit(OpCodes.Stfld, targetInstance); } diff --git a/test/Spring/Spring.Core.Tests/Objects/ClassWithProtectedCtor.cs b/test/Spring/Spring.Core.Tests/Objects/ClassWithProtectedCtor.cs new file mode 100644 index 00000000..82005da0 --- /dev/null +++ b/test/Spring/Spring.Core.Tests/Objects/ClassWithProtectedCtor.cs @@ -0,0 +1,13 @@ +namespace Spring.Objects +{ + public class ClassWithProtectedCtor : IOther + { + protected ClassWithProtectedCtor() + { + } + + public void Absquatulate() + { + } + } +} \ No newline at end of file From 07eb2ed5bcec218ae9d23bf1b195f98ef3186153 Mon Sep 17 00:00:00 2001 From: ohad Date: Fri, 8 Feb 2013 13:10:28 +0200 Subject: [PATCH 2/2] Added test for bug fix (CompositionProxyTypeBuilder crashed when type had protected constructor) --- .../Context/Support/ContextRegistryTests.cs | 8 ++++++++ .../Spring.Core.Tests/Spring.Core.Tests.2010.csproj | 1 + 2 files changed, 9 insertions(+) diff --git a/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs b/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs index 27b3437c..af94a10b 100644 --- a/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs +++ b/test/Spring/Spring.Core.Tests/Context/Support/ContextRegistryTests.cs @@ -169,6 +169,14 @@ namespace Spring.Context.Support IApplicationContext context = ContextRegistry.GetContext("bingo"); } + [Test] + public void CanBuildProxyForClassWithProtectedConstructor() + { + CompositionProxyTypeBuilder typeBuilder = new CompositionProxyTypeBuilder(); + typeBuilder.TargetType = typeof(ClassWithProtectedCtor); + typeBuilder.BuildProxyType(); + } + [Test] public void ClearWithDynamicProxies() { diff --git a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj index 990c40ae..6a53c693 100644 --- a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj +++ b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2010.csproj @@ -338,6 +338,7 @@ Code +