Browse Source

Refactor CodeGenerator.GenerateMethodSpecifier to allow explicit specifier kind.

pull/1359/head
João Matos 6 years ago committed by João Matos
parent
commit
9ba53acc11
  1. 18
      src/Generator/Generators/C/CCodeGenerator.cs
  2. 2
      src/Generator/Generators/C/CppHeaders.cs
  3. 2
      src/Generator/Generators/C/CppSources.cs
  4. 5
      src/Generator/Generators/CLI/CLIHeaders.cs
  5. 5
      src/Generator/Generators/CSharp/CSharpSources.cs
  6. 9
      src/Generator/Generators/CodeGenerator.cs

18
src/Generator/Generators/C/CCodeGenerator.cs

@ -332,10 +332,16 @@ namespace CppSharp.Generators.C
function.Name : function.OriginalName; function.Name : function.OriginalName;
} }
public override void GenerateMethodSpecifier(Method method, Class @class) public override void GenerateMethodSpecifier(Method method,
MethodSpecifierKind? kind = null)
{ {
var isHeaderFile = FileExtension == "h"; bool isDeclaration;
if (isHeaderFile) if (kind.HasValue)
isDeclaration = kind == MethodSpecifierKind.Declaration;
else
isDeclaration = FileExtension == "h";
if (isDeclaration)
{ {
if (method.IsVirtual || method.IsOverride) if (method.IsVirtual || method.IsOverride)
Write("virtual "); Write("virtual ");
@ -363,7 +369,7 @@ namespace CppSharp.Generators.C
Write(")"); Write(")");
if (method.IsOverride && isHeaderFile) if (method.IsOverride && isDeclaration)
Write(" override"); Write(" override");
} }
@ -376,7 +382,7 @@ namespace CppSharp.Generators.C
{ {
PushBlock(BlockKind.Method, method); PushBlock(BlockKind.Method, method);
GenerateMethodSpecifier(method, method.Namespace as Class); GenerateMethodSpecifier(method);
Write(";"); Write(";");
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
@ -406,7 +412,7 @@ namespace CppSharp.Generators.C
public virtual void GeneratePropertyAccessorSpecifier(Method method) public virtual void GeneratePropertyAccessorSpecifier(Method method)
{ {
GenerateMethodSpecifier(method, method.Namespace as Class); GenerateMethodSpecifier(method);
} }
public virtual void GeneratePropertyGetter(Method method) public virtual void GeneratePropertyGetter(Method method)

2
src/Generator/Generators/C/CppHeaders.cs

@ -546,7 +546,7 @@ namespace CppSharp.Generators.Cpp
PushBlock(BlockKind.Method, method); PushBlock(BlockKind.Method, method);
GenerateDeclarationCommon(method); GenerateDeclarationCommon(method);
GenerateMethodSpecifier(method, method.Namespace as Class); GenerateMethodSpecifier(method);
WriteLine(";"); WriteLine(";");
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);

2
src/Generator/Generators/C/CppSources.cs

@ -348,7 +348,7 @@ namespace CppSharp.Generators.Cpp
PushBlock(BlockKind.Method, method); PushBlock(BlockKind.Method, method);
GenerateMethodSpecifier(method, method.Namespace as Class); GenerateMethodSpecifier(method);
NewLine(); NewLine();
var @class = method.Namespace as Class; var @class = method.Namespace as Class;

5
src/Generator/Generators/CLI/CLIHeaders.cs

@ -676,7 +676,8 @@ namespace CppSharp.Generators.CLI
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
} }
public override void GenerateMethodSpecifier(Method method, Class @class) public override void GenerateMethodSpecifier(Method method,
MethodSpecifierKind? kind = null)
{ {
if ((method.IsVirtual || method.IsOverride) && !method.IsOperator) if ((method.IsVirtual || method.IsOverride) && !method.IsOperator)
Write("virtual "); Write("virtual ");
@ -712,7 +713,7 @@ namespace CppSharp.Generators.CLI
PushBlock(BlockKind.Method, method); PushBlock(BlockKind.Method, method);
GenerateDeclarationCommon(method); GenerateDeclarationCommon(method);
GenerateMethodSpecifier(method, method.Namespace as Class); GenerateMethodSpecifier(method);
WriteLine(";"); WriteLine(";");
if (method.OperatorKind == CXXOperatorKind.EqualEqual) if (method.OperatorKind == CXXOperatorKind.EqualEqual)

5
src/Generator/Generators/CSharp/CSharpSources.cs

@ -2340,7 +2340,8 @@ namespace CppSharp.Generators.CSharp
PopBlock(NewLineKind.BeforeNextBlock); PopBlock(NewLineKind.BeforeNextBlock);
} }
public override void GenerateMethodSpecifier(Method method, Class @class) public override void GenerateMethodSpecifier(Method method,
MethodSpecifierKind? kind = null)
{ {
bool isTemplateMethod = method.Parameters.Any( bool isTemplateMethod = method.Parameters.Any(
p => p.Kind == ParameterKind.Extension); p => p.Kind == ParameterKind.Extension);
@ -2392,7 +2393,7 @@ namespace CppSharp.Generators.CSharp
Write(Helpers.GetAccess(method.Access)); Write(Helpers.GetAccess(method.Access));
} }
GenerateMethodSpecifier(method, @class); GenerateMethodSpecifier(method);
if (method.SynthKind == FunctionSynthKind.DefaultValueOverload && method.IsConstructor && !method.IsPure) if (method.SynthKind == FunctionSynthKind.DefaultValueOverload && method.IsConstructor && !method.IsPure)
{ {

9
src/Generator/Generators/CodeGenerator.cs

@ -222,7 +222,14 @@ namespace CppSharp.Generators
#region Method generation #region Method generation
public virtual void GenerateMethodSpecifier(Method method, Class @class) public enum MethodSpecifierKind
{
Declaration,
Definition
}
public virtual void GenerateMethodSpecifier(Method method,
MethodSpecifierKind? kind = null)
{ {
} }

Loading…
Cancel
Save