diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs index 1717bcae..b57b71e3 100644 --- a/src/Generator/Driver.cs +++ b/src/Generator/Driver.cs @@ -148,7 +148,8 @@ namespace CppSharp TranslationUnitPasses.AddPass(new CheckIgnoredDeclsPass()); TranslationUnitPasses.AddPass(new CheckFlagEnumsPass()); TranslationUnitPasses.AddPass(new CheckDuplicatedNamesPass()); - TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass()); + if (Options.GenerateAbstractImpls) + TranslationUnitPasses.AddPass(new GenerateAbstractImplementationsPass()); } public void ProcessCode() @@ -262,6 +263,7 @@ namespace CppSharp public bool GenerateFunctionTemplates; public bool GeneratePartialClasses; public bool GenerateVirtualTables; + public bool GenerateAbstractImpls; public bool GenerateInternalImports; public string IncludePrefix; public bool WriteOnlyWhenChanged; diff --git a/src/Generator/Generators/CSharp/CSharpMarshal.cs b/src/Generator/Generators/CSharp/CSharpMarshal.cs index 49a3ef71..6d414ef3 100644 --- a/src/Generator/Generators/CSharp/CSharpMarshal.cs +++ b/src/Generator/Generators/CSharp/CSharpMarshal.cs @@ -216,7 +216,8 @@ namespace CppSharp.Generators.CSharp instance = copy; } - if (@class.IsRefType && !@class.IsAbstract) + if (@class.IsRefType && + (!Context.Driver.Options.GenerateAbstractImpls || !@class.IsAbstract)) { var instanceName = Generator.GeneratedIdentifier("instance"); if (VarSuffix > 0) @@ -253,7 +254,9 @@ namespace CppSharp.Generators.CSharp } Context.Return.Write("new {0}({1})", - QualifiedIdentifier(@class) + (@class.IsAbstract ? "Internal" : ""), + QualifiedIdentifier(@class) + + (Context.Driver.Options.GenerateAbstractImpls && @class.IsAbstract ? + "Internal" : ""), instance); return true; diff --git a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs index b95260d9..fa200f82 100644 --- a/src/Generator/Generators/CSharp/CSharpTextTemplate.cs +++ b/src/Generator/Generators/CSharp/CSharpTextTemplate.cs @@ -626,7 +626,8 @@ namespace CppSharp.Generators.CSharp Write(Helpers.GetAccess(@class)); Write("unsafe "); - if (@class.IsAbstract) + if (Driver.Options.GenerateAbstractImpls && + @class.IsAbstract) Write("abstract "); if (Options.GeneratePartialClasses) @@ -1483,9 +1484,11 @@ namespace CppSharp.Generators.CSharp PushBlock(CSharpBlockKind.Method); GenerateDeclarationCommon(method); - Write(@class.IsAbstract && method.IsConstructor ? "protected " : "public "); + Write(Driver.Options.GenerateAbstractImpls && + @class.IsAbstract && method.IsConstructor ? "protected " : "public "); - if (method.IsVirtual && !method.IsOverride && !method.IsPure) + if (method.IsVirtual && !method.IsOverride && + (!Driver.Options.GenerateAbstractImpls || !method.IsPure)) Write("virtual "); var isBuiltinOperator = method.IsOperator && @@ -1497,7 +1500,7 @@ namespace CppSharp.Generators.CSharp if (method.IsOverride) Write("override "); - if (method.IsPure) + if (Driver.Options.GenerateAbstractImpls && method.IsPure) Write("abstract "); var functionName = GetFunctionIdentifier(method); @@ -1511,7 +1514,7 @@ namespace CppSharp.Generators.CSharp Write(")"); - if (method.IsPure) + if (Driver.Options.GenerateAbstractImpls && method.IsPure) { Write(";"); PopBlock(NewLineKind.BeforeNextBlock);