From d0c81f2bf4887320283d7c50a84ccc8b2f989564 Mon Sep 17 00:00:00 2001 From: Mark Riehm Date: Tue, 28 Apr 2020 20:19:55 -0500 Subject: [PATCH 1/6] Make private protected constructors consistent with protected and internal constructors --- .../BasicClassProxyTestCase.cs | 19 +++++++++++++++++++ .../Generators/BaseProxyGenerator.cs | 14 +++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs b/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs index a481147711..60a014f12f 100644 --- a/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs +++ b/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs @@ -1,3 +1,7 @@ +//---------------------------------------------------- +// Copyright 2020 Epic Systems Corporation +//---------------------------------------------------- + // Copyright 2004-2016 Castle Project - http://www.castleproject.org/ // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -380,6 +384,21 @@ public void ClassProxyShouldCallProtectedDefaultConstructor() Assert.AreEqual("Something", ((ClassWithProtectedDefaultConstructor)proxy2).SomeString); } + [Test] + public void ClassProxyShouldHaveDefaultConstructorWhenBaseClassHasPrivateProtected() + { + object proxy = generator.CreateClassProxy(); + Assert.IsNotNull(Activator.CreateInstance(proxy.GetType())); + } + + [Test] + public void ClassProxyShouldCallPrivateProtectedDefaultConstructor() + { + object proxy = generator.CreateClassProxy(); + object proxy2 = Activator.CreateInstance(proxy.GetType()); + Assert.AreEqual("Something", ((ClassWithPrivateProtectedConstructor)proxy2).SomeString); + } + [Test] public void ClassImplementingInterfaceVitrually() { diff --git a/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs b/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs index adc5e154ce..34eff03874 100644 --- a/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs +++ b/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs @@ -1,3 +1,7 @@ +//---------------------------------------------------- +// Copyright 2020 Epic Systems Corporation +//---------------------------------------------------- + // Copyright 2004-2011 Castle Project - http://www.castleproject.org/ // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -281,7 +285,7 @@ protected void GenerateConstructors(ClassEmitter emitter, Type baseType, params foreach (var constructor in constructors) { - if (!IsConstructorVisible(constructor)) + if (!ProxyUtil.IsAccessibleMethod(constructor)) { continue; } @@ -409,14 +413,6 @@ protected Type ObtainProxyType(CacheKey cacheKey, Func Date: Tue, 28 Apr 2020 20:25:18 -0500 Subject: [PATCH 2/6] Make private protected constructors consistent with protected and internal constructors --- .../ClassWithPrivateProtectedConstructor.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs diff --git a/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs new file mode 100644 index 0000000000..3c83fc3a69 --- /dev/null +++ b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs @@ -0,0 +1,28 @@ +//---------------------------------------------------- +// Copyright 2020 Epic Systems Corporation +//---------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Castle.DynamicProxy.Tests.Classes +{ + public class ClassWithPrivateProtectedConstructor + { + private protected ClassWithPrivateProtectedConstructor() + { + _someString = "Something"; + } + + private string _someString = string.Empty; + + public string SomeString + { + get { return _someString; } + set { _someString = value; } + } + } +} From 3d10a74750c9ca51119e00904017eccccfd40187 Mon Sep 17 00:00:00 2001 From: mriehm <3916550+mriehm@users.noreply.github.com> Date: Tue, 28 Apr 2020 20:35:26 -0500 Subject: [PATCH 3/6] Update BaseProxyGenerator.cs --- src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs b/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs index 34eff03874..33f3119985 100644 --- a/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs +++ b/src/Castle.Core/DynamicProxy/Generators/BaseProxyGenerator.cs @@ -1,7 +1,3 @@ -//---------------------------------------------------- -// Copyright 2020 Epic Systems Corporation -//---------------------------------------------------- - // Copyright 2004-2011 Castle Project - http://www.castleproject.org/ // // Licensed under the Apache License, Version 2.0 (the "License"); From 5bb79fbcccd3bd6fb1a6eb23073f61dc2f040f7b Mon Sep 17 00:00:00 2001 From: mriehm <3916550+mriehm@users.noreply.github.com> Date: Tue, 28 Apr 2020 20:36:24 -0500 Subject: [PATCH 4/6] Update BasicClassProxyTestCase.cs --- .../DynamicProxy.Tests/BasicClassProxyTestCase.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs b/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs index 60a014f12f..7eb90942e0 100644 --- a/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs +++ b/src/Castle.Core.Tests/DynamicProxy.Tests/BasicClassProxyTestCase.cs @@ -1,7 +1,3 @@ -//---------------------------------------------------- -// Copyright 2020 Epic Systems Corporation -//---------------------------------------------------- - // Copyright 2004-2016 Castle Project - http://www.castleproject.org/ // // Licensed under the Apache License, Version 2.0 (the "License"); From 94b1018519a04a6221769f685b7569ef3c808319 Mon Sep 17 00:00:00 2001 From: mriehm <3916550+mriehm@users.noreply.github.com> Date: Tue, 28 Apr 2020 20:37:34 -0500 Subject: [PATCH 5/6] Update ClassWithPrivateProtectedConstructor.cs --- .../ClassWithPrivateProtectedConstructor.cs | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs index 3c83fc3a69..6bf7aa2c07 100644 --- a/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs +++ b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs @@ -1,12 +1,16 @@ -//---------------------------------------------------- -// Copyright 2020 Epic Systems Corporation -//---------------------------------------------------- - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +// Copyright 2004-2016 Castle Project - http://www.castleproject.org/ +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. namespace Castle.DynamicProxy.Tests.Classes { From 6a258cf9bdae42e01d30e69eac94e89068b5abb4 Mon Sep 17 00:00:00 2001 From: mriehm <3916550+mriehm@users.noreply.github.com> Date: Tue, 28 Apr 2020 20:38:02 -0500 Subject: [PATCH 6/6] Update ClassWithPrivateProtectedConstructor.cs --- .../Classes/ClassWithPrivateProtectedConstructor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs index 6bf7aa2c07..6afd2525bd 100644 --- a/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs +++ b/src/Castle.Core.Tests/DynamicProxy.Tests/Classes/ClassWithPrivateProtectedConstructor.cs @@ -1,4 +1,4 @@ -// Copyright 2004-2016 Castle Project - http://www.castleproject.org/ +// Copyright 2004-2020 Castle Project - http://www.castleproject.org/ // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License.