@ -144,7 +144,9 @@ namespace CppSharp.AST
var currentNamespace = @namespace;
while (currentNamespace != null)
{
namespaces.Push(currentNamespace);
var isInlineNamespace = currentNamespace is Namespace && ((Namespace)currentNamespace).IsInline;
if (!isInlineNamespace)
currentNamespace = currentNamespace.Namespace;
}
@ -185,7 +185,7 @@ namespace CppSharp.Generators.CLI
public void GenerateNamespace(Namespace @namespace)
var isTopLevel = @namespace is TranslationUnit;
var generateNamespace = !isTopLevel ||
var generateNamespace = !isTopLevel || !@namespace.IsInline &&
!string.IsNullOrEmpty(@namespace.TranslationUnit.Module.OutputNamespace);
if (generateNamespace)
@ -158,11 +158,9 @@ namespace CppSharp.Generators.CSharp
public override bool VisitNamespace(Namespace @namespace)
var context = @namespace;
var isNamespace = context is Namespace;
var isTranslationUnit = context is TranslationUnit;
var shouldGenerateNamespace = isNamespace && !isTranslationUnit &&
var shouldGenerateNamespace = !@namespace.IsInline && !isTranslationUnit &&
context.Declarations.Any(d => d.IsGenerated || (d is Class && !d.IsIncomplete));
if (shouldGenerateNamespace)
@ -622,7 +622,8 @@ namespace CppSharp.Generators.CSharp
while (!(ctx is TranslationUnit))
if (!string.IsNullOrWhiteSpace(ctx.Name))
var isInlineNamespace = ctx is Namespace && ((Namespace)ctx).IsInline;
if (!string.IsNullOrWhiteSpace(ctx.Name) && !isInlineNamespace)
names.Push(ctx.Name);
ctx = ctx.Namespace;
@ -123,7 +123,9 @@ namespace CppSharp.Types.Std
var names = new Stack<string>();
while (!(declContext is TranslationUnit))
names.Push(declContext.Name);
var isInlineNamespace = declContext is Namespace && ((Namespace)declContext).IsInline;
declContext = declContext.Namespace;
var qualifiedBasicString = string.Join(".", names);
@ -807,4 +807,10 @@ This is a very long string. This is a very long string. This is a very long stri
Assert.That(testProperties.RefToPrimitiveInSetter, Is.EqualTo(value));
[Test]
public void TestInlineNamespaces()
Common.FunctionInsideInlineNamespace();
@ -1360,4 +1360,12 @@ public:
template<typename T> void TemplatedFunction(T type)
inline namespace InlineNamespace
void FunctionInsideInlineNamespace()