From 1532f7d0bf046948a2c0c214db4c47046089fd7c Mon Sep 17 00:00:00 2001 From: Dimitar Dobrev Date: Wed, 11 Sep 2013 19:51:55 +0300 Subject: [PATCH] Moved the changing of access modifiers of constructors of abstract classes to the pass for internal implementations of abstract classes. Signed-off-by: Dimitar Dobrev --- src/Generator/Generators/CSharp/CSharpTextTemplate.cs | 6 ++---- src/Generator/Passes/GenerateAbstractImplementationsPass.cs | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index 3bc295c7..3ffdb32c 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -1486,8 +1486,7 @@ namespace CppSharp.Generators.CSharp switch (GetValidMethodAccess(method, @class)) { case AccessSpecifier.Public: - Write(Driver.Options.GenerateAbstractImpls && @class.IsAbstract - && method.IsConstructor ? "protected " : "public "); + Write("public "); break; case AccessSpecifier.Protected: Write("protected "); @@ -1583,8 +1582,7 @@ namespace CppSharp.Generators.CSharp switch (method.Access) { case AccessSpecifier.Public: - return @class.IsAbstract && method.IsConstructor ? - AccessSpecifier.Protected : AccessSpecifier.Public; + return AccessSpecifier.Public; default: return method.IsOverride ? @class.GetRootBaseMethod(method).Access : method.Access; diff --git a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs index 3a614eff..6f17906a 100644 --- a/src/Generator/Passes/GenerateAbstractImplementationsPass.cs +++ b/src/Generator/Passes/GenerateAbstractImplementationsPass.cs @@ -34,7 +34,13 @@ namespace CppSharp.Passes return false; if (@class.IsAbstract) + { + foreach (var ctor in from ctor in @class.Constructors + where ctor.Access == AccessSpecifier.Public + select ctor) + ctor.Access = AccessSpecifier.Protected; internalImpls.Add(AddInternalImplementation(@class)); + } return base.VisitClassDecl(@class); }