diff --git a/src/generators/Silk.NET.SilkTouch.Symbols/NamespaceSymbol.cs b/src/generators/Silk.NET.SilkTouch.Symbols/NamespaceSymbol.cs
new file mode 100644
index 0000000000..36b95860b1
--- /dev/null
+++ b/src/generators/Silk.NET.SilkTouch.Symbols/NamespaceSymbol.cs
@@ -0,0 +1,13 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
+
+namespace Silk.NET.SilkTouch.Symbols;
+
+///
+/// A representing a namespace
+///
+public sealed record NamespaceSymbol(IdentifierSymbol Identifier, ImmutableArray Types) : Symbol
+{
+}
diff --git a/src/generators/Silk.NET.SilkTouch.Symbols/SymbolVisitor.cs b/src/generators/Silk.NET.SilkTouch.Symbols/SymbolVisitor.cs
index 6c056783f1..8c9463ba92 100644
--- a/src/generators/Silk.NET.SilkTouch.Symbols/SymbolVisitor.cs
+++ b/src/generators/Silk.NET.SilkTouch.Symbols/SymbolVisitor.cs
@@ -19,6 +19,7 @@ public virtual Symbol Visit(Symbol symbol)
{
if (symbol is TypeSymbol ts) return VisitType(ts);
if (symbol is MemberSymbol ms) return VisitMember(ms);
+ if (symbol is NamespaceSymbol ns) return VisitNamespace(ns);
if (symbol is IdentifierSymbol @is) return VisitIdentifier(@is);
@@ -97,6 +98,20 @@ protected virtual IdentifierSymbol VisitIdentifier(IdentifierSymbol identifierSy
return identifierSymbol;
}
+ ///
+ /// Visit a .
+ ///
+ /// The Namespace to Visit.
+ /// The rewritten symbol
+ protected virtual NamespaceSymbol VisitNamespace(NamespaceSymbol namespaceSymbol)
+ {
+ return namespaceSymbol with
+ {
+ Identifier = VisitIdentifier(namespaceSymbol.Identifier),
+ Types = namespaceSymbol.Types.Select(VisitType).ToImmutableArray()
+ };
+ }
+
private static T ThrowUnknownSymbol(Symbol symbol)
{
throw new NotImplementedException($"Unknown symbol of type {symbol.GetType().FullName} subclass of {typeof(T).Name}");
diff --git a/tests/Silk.NET.SilkTouch.Symbols.Tests/SymbolVisitorTests/NamespaceTests.cs b/tests/Silk.NET.SilkTouch.Symbols.Tests/SymbolVisitorTests/NamespaceTests.cs
new file mode 100644
index 0000000000..a190c1a449
--- /dev/null
+++ b/tests/Silk.NET.SilkTouch.Symbols.Tests/SymbolVisitorTests/NamespaceTests.cs
@@ -0,0 +1,47 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using System.Collections.Immutable;
+using Moq;
+using Moq.Protected;
+using Xunit;
+
+namespace Silk.NET.SilkTouch.Symbols.Tests.SymbolVisitorTests;
+
+public class NamespaceTests
+{
+ [Fact]
+ public void NamespaceIdentifierIsVisited()
+ {
+ var symbol = new NamespaceSymbol(new IdentifierSymbol(""), ImmutableArray.Empty);
+
+ var visitor = new Mock
+ {
+ CallBase = true
+ };
+
+ visitor.Object.Visit(symbol);
+
+ visitor.Protected()
+ .Verify("VisitIdentifier", Times.Once(), ItExpr.IsAny());
+ }
+
+ [Fact]
+ public void NamespaceMemberIsVisited()
+ {
+ var symbol = new NamespaceSymbol(new IdentifierSymbol(""), new []
+ {
+ (TypeSymbol)new StructSymbol(new IdentifierSymbol(""), StructLayout.Empty)
+ }.ToImmutableArray());
+
+ var visitor = new Mock
+ {
+ CallBase = true
+ };
+
+ visitor.Object.Visit(symbol);
+
+ visitor.Protected()
+ .Verify("VisitStruct", Times.Once(), ItExpr.IsAny());
+ }
+}