From 2bba0d648687811c7f4d6590e13ad2e160feace5 Mon Sep 17 00:00:00 2001 From: Joao Matos Date: Thu, 16 Feb 2017 00:14:59 +0000 Subject: [PATCH] Extract namespace-level functions and variable generation into its own method. --- .../Generators/CSharp/CSharpSources.cs | 82 +++++++++---------- 1 file changed, 38 insertions(+), 44 deletions(-) diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index 6b6f97bb..84a79735 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -219,73 +219,67 @@ namespace CppSharp.Generators.CSharp public override bool VisitDeclContext(DeclarationContext context) { - // Generate all the enum declarations. foreach (var @enum in context.Enums) - { GenerateEnum(@enum); - } - // Generate all the typedef declarations. foreach (var typedef in context.Typedefs) - { GenerateTypedef(typedef); - } - // Generate all the struct/class declarations. foreach (var @class in context.Classes) - { @class.Visit(this); - } - if (context.Functions.Any(f => f.IsGenerated) || - (!(context is Class) && - context.Variables.Any( - v => v.IsGenerated && v.Access == AccessSpecifier.Public))) - { - PushBlock(CSharpBlockKind.Functions); - var parentName = Helpers.SafeIdentifier(context.TranslationUnit.FileNameWithoutExtension); - WriteLine("public unsafe partial class {0}", parentName); - WriteStartBraceIndent(); + foreach (var @event in context.Events) + GenerateEvent(@event); - PushBlock(CSharpBlockKind.InternalsClass); - GenerateClassInternalHead(); - WriteStartBraceIndent(); + GenerateNamespaceFunctionsAndVariables(context); - // Generate all the internal function declarations. - foreach (var function in context.Functions) - { - if ((!function.IsGenerated && !function.IsInternal) || function.IsSynthetized) continue; + foreach(var childNamespace in context.Namespaces) + childNamespace.Visit(this); - GenerateInternalFunction(function); - } + return true; + } - WriteCloseBraceIndent(); - PopBlock(NewLineKind.BeforeNextBlock); + void GenerateNamespaceFunctionsAndVariables(DeclarationContext context) + { + var hasGlobalVariables = !(context is Class) && context.Variables.Any( + v => v.IsGenerated && v.Access == AccessSpecifier.Public); - foreach (var function in context.Functions) - { - if (!function.IsGenerated) continue; + if (!context.Functions.Any(f => f.IsGenerated) && !hasGlobalVariables) + return; - GenerateFunction(function, parentName); - } + PushBlock(CSharpBlockKind.Functions); + var parentName = Helpers.SafeIdentifier(context.TranslationUnit.FileNameWithoutExtension); + WriteLine("public unsafe partial class {0}", parentName); + WriteStartBraceIndent(); - foreach (var variable in context.Variables.Where( - v => v.IsGenerated && v.Access == AccessSpecifier.Public)) - GenerateVariable(null, variable); + PushBlock(CSharpBlockKind.InternalsClass); + GenerateClassInternalHead(); + WriteStartBraceIndent(); - WriteCloseBraceIndent(); - PopBlock(NewLineKind.BeforeNextBlock); + // Generate all the internal function declarations. + foreach (var function in context.Functions) + { + if ((!function.IsGenerated && !function.IsInternal) || function.IsSynthetized) continue; + + GenerateInternalFunction(function); } - foreach (var @event in context.Events) + WriteCloseBraceIndent(); + PopBlock(NewLineKind.BeforeNextBlock); + + foreach (var function in context.Functions) { - GenerateEvent(@event); + if (!function.IsGenerated) continue; + + GenerateFunction(function, parentName); } - foreach(var childNamespace in context.Namespaces) - childNamespace.Visit(this); + foreach (var variable in context.Variables.Where( + v => v.IsGenerated && v.Access == AccessSpecifier.Public)) + GenerateVariable(null, variable); - return true; + WriteCloseBraceIndent(); + PopBlock(NewLineKind.BeforeNextBlock); } private void GenerateClassTemplateSpecializationInternal(Class classTemplate)