diff --git a/src/AST/ASTVisitor.cs b/src/AST/ASTVisitor.cs index a29a93ec..9e6c2756 100644 --- a/src/AST/ASTVisitor.cs +++ b/src/AST/ASTVisitor.cs @@ -21,7 +21,7 @@ namespace CppSharp.AST public enum VisitFlags { /// <summary> - /// We always visit classes, functions and declaration contexts. + /// We always visit declaration contexts. /// </summary> Default = 0, @@ -37,6 +37,8 @@ namespace CppSharp.AST NamespaceTypedefs = 1 << 8, NamespaceEvents = 1 << 9, NamespaceVariables = 1 << 10, + NamespaceClasses = 1 << 15, + NamespaceFunctions = 1 << 16, FunctionReturnType = 1 << 11, FunctionParameters = 1 << 12, @@ -46,7 +48,7 @@ namespace CppSharp.AST Any = ClassBases | ClassFields | ClassProperties | ClassMethods | ClassTemplateSpecializations | PropertyAccessors | NamespaceEnums | NamespaceTemplates | NamespaceTypedefs | - NamespaceEvents | NamespaceVariables | + NamespaceEvents | NamespaceVariables | NamespaceClasses | NamespaceFunctions | FunctionReturnType | FunctionParameters | EventParameters | TemplateArguments } @@ -63,7 +65,9 @@ namespace CppSharp.AST public bool VisitClassTemplateSpecializations => (flags & VisitFlags.ClassTemplateSpecializations) != 0; public bool VisitPropertyAccessors => (flags & VisitFlags.PropertyAccessors) != 0; + public bool VisitNamespaceClasses => (flags & VisitFlags.NamespaceClasses) != 0; public bool VisitNamespaceEnums => (flags & VisitFlags.NamespaceEnums) != 0; + public bool VisitNamespaceFunctions => (flags & VisitFlags.NamespaceFunctions) != 0; public bool VisitNamespaceTemplates => (flags & VisitFlags.NamespaceTemplates) != 0; public bool VisitNamespaceTypedefs => (flags & VisitFlags.NamespaceTypedefs) != 0; public bool VisitNamespaceEvents => (flags & VisitFlags.NamespaceEvents) != 0; diff --git a/src/Generator/Generators/CodeGenerator.cs b/src/Generator/Generators/CodeGenerator.cs index cdda1194..083b83e8 100644 --- a/src/Generator/Generators/CodeGenerator.cs +++ b/src/Generator/Generators/CodeGenerator.cs @@ -262,12 +262,27 @@ namespace CppSharp.Generators { foreach (var decl in context.Declarations) { - if (decl is Function) continue; + if (decl is Function) + continue; + + if (decl is Class && !VisitOptions.VisitNamespaceClasses) + continue; + + if (decl is Enumeration && !VisitOptions.VisitNamespaceEnums) + continue; + + if (decl is Event && !VisitOptions.VisitNamespaceEvents) + continue; + + if (decl is Variable && !VisitOptions.VisitNamespaceVariables) + continue; + if (decl.IsGenerated) decl.Visit(this); } - VisitDeclContextFunctions(context); + if (VisitOptions.VisitNamespaceFunctions) + VisitDeclContextFunctions(context); return true; } @@ -304,25 +319,6 @@ namespace CppSharp.Generators VisitClassConstructors(@class); VisitClassMethods(@class); - foreach (var @event in @class.Events) - { - if (!@event.IsGenerated) - continue; - - @event.Visit(this); - } - - foreach (var variable in @class.Variables) - { - if (!variable.IsGenerated) - continue; - - if (variable.Access != AccessSpecifier.Public) - continue; - - variable.Visit(this); - } - return true; }