Browse Source

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 <dpldobrev@yahoo.com>
pull/57/head
Dimitar Dobrev 12 years ago
parent
commit
1532f7d0bf
  1. 6
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs
  2. 6
      src/Generator/Passes/GenerateAbstractImplementationsPass.cs

6
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -1486,8 +1486,7 @@ namespace CppSharp.Generators.CSharp
switch (GetValidMethodAccess(method, @class)) switch (GetValidMethodAccess(method, @class))
{ {
case AccessSpecifier.Public: case AccessSpecifier.Public:
Write(Driver.Options.GenerateAbstractImpls && @class.IsAbstract Write("public ");
&& method.IsConstructor ? "protected " : "public ");
break; break;
case AccessSpecifier.Protected: case AccessSpecifier.Protected:
Write("protected "); Write("protected ");
@ -1583,8 +1582,7 @@ namespace CppSharp.Generators.CSharp
switch (method.Access) switch (method.Access)
{ {
case AccessSpecifier.Public: case AccessSpecifier.Public:
return @class.IsAbstract && method.IsConstructor ? return AccessSpecifier.Public;
AccessSpecifier.Protected : AccessSpecifier.Public;
default: default:
return method.IsOverride ? return method.IsOverride ?
@class.GetRootBaseMethod(method).Access : method.Access; @class.GetRootBaseMethod(method).Access : method.Access;

6
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -34,7 +34,13 @@ namespace CppSharp.Passes
return false; return false;
if (@class.IsAbstract) 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)); internalImpls.Add(AddInternalImplementation(@class));
}
return base.VisitClassDecl(@class); return base.VisitClassDecl(@class);
} }

Loading…
Cancel
Save