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 @@ -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 @@ -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;

6
src/Generator/Passes/GenerateAbstractImplementationsPass.cs

@ -34,7 +34,13 @@ namespace CppSharp.Passes @@ -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);
}

Loading…
Cancel
Save