Browse Source

Add GenerateTypesRootNamespace option

pg
josetr 3 years ago
parent
commit
00bf3c5bad
  1. 37
      src/Generator/Generators/CSharp/CSharpSources.cs
  2. 1
      src/Generator/Options.cs

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

@ -189,7 +189,12 @@ namespace CppSharp.Generators.CSharp
context.Declarations.Any(d => d.IsGenerated || (d is Class && !d.IsIncomplete)); context.Declarations.Any(d => d.IsGenerated || (d is Class && !d.IsIncomplete));
using var _ = shouldGenerateNamespace using var _ = shouldGenerateNamespace
? PushWriteBlock(BlockKind.Namespace, $"namespace {context.Name}", NewLineKind.BeforeNextBlock) ?
(
Options.GenerateTypesOnly && context.Name != Options.GenerateTypesRootNamespace
? PushWriteBlock(BlockKind.Class, $"public partial class {context.Name}", NewLineKind.BeforeNextBlock)
: PushWriteBlock(BlockKind.Namespace, $"namespace {context.Name}", NewLineKind.BeforeNextBlock)
)
: default; : default;
return base.VisitNamespace(@namespace); return base.VisitNamespace(@namespace);
@ -254,11 +259,26 @@ namespace CppSharp.Generators.CSharp
if (classes.FindAll(cls => cls.IsValueType && cls.Name == parentName && context.QualifiedLogicalName == cls.Namespace.QualifiedLogicalName).Any()) if (classes.FindAll(cls => cls.IsValueType && cls.Name == parentName && context.QualifiedLogicalName == cls.Namespace.QualifiedLogicalName).Any())
keyword = "struct"; keyword = "struct";
if (Options.GenerateTypesOnly && Options.PutAllGlobalsInGlobalClass) bool generate = true;
parentName = "Globals";
WriteLine($"public unsafe partial {keyword} {parentName}"); if (Options.GenerateTypesOnly)
WriteOpenBraceAndIndent(); {
if (context is Namespace n)
{
if (n.Name == Options.GenerateTypesRootNamespace)
parentName = "Globals";
else if (!string.IsNullOrEmpty(n.Name))
generate = false;
else if (Options.PutAllGlobalsInGlobalClass)
parentName = "Globals";
}
}
if (generate)
{
WriteLine($"public unsafe partial {keyword} {parentName}");
WriteOpenBraceAndIndent();
}
if (Options.GenerateBindings) if (Options.GenerateBindings)
{ {
@ -293,8 +313,11 @@ namespace CppSharp.Generators.CSharp
v => v.IsGenerated && v.Access == AccessSpecifier.Public)) v => v.IsGenerated && v.Access == AccessSpecifier.Public))
GenerateVariable(null, variable); GenerateVariable(null, variable);
UnindentAndWriteCloseBrace(); if (generate)
PopBlock(NewLineKind.BeforeNextBlock); {
UnindentAndWriteCloseBrace();
PopBlock(NewLineKind.BeforeNextBlock);
}
} }
private void GenerateClassTemplateSpecializationInternal(Class classTemplate) private void GenerateClassTemplateSpecializationInternal(Class classTemplate)

1
src/Generator/Options.cs

@ -93,6 +93,7 @@ namespace CppSharp
/// <c>true</c> to generate class templates; otherwise, <c>false</c>. /// <c>true</c> to generate class templates; otherwise, <c>false</c>.
/// </value> /// </value>
public bool GenerateClassTemplates { get; set; } public bool GenerateClassTemplates { get; set; }
public string GenerateTypesRootNamespace { get; set; } = String.Empty;
public bool GenerateTypesOnly { get; set; } = false; public bool GenerateTypesOnly { get; set; } = false;
internal bool GenerateBindings => !GenerateTypesOnly; internal bool GenerateBindings => !GenerateTypesOnly;
public bool AllowRenaming { get; set; } = true; public bool AllowRenaming { get; set; } = true;

Loading…
Cancel
Save