diff --git a/capnpc-csharp.tests/Properties/Resources.Designer.cs b/capnpc-csharp.tests/Properties/Resources.Designer.cs
index 26b2a07..ad396a7 100644
--- a/capnpc-csharp.tests/Properties/Resources.Designer.cs
+++ b/capnpc-csharp.tests/Properties/Resources.Designer.cs
@@ -70,6 +70,16 @@ namespace capnpc_csharp.Tests.Properties {
}
}
+ ///
+ /// Looks up a localized resource of type System.Byte[].
+ ///
+ internal static byte[] UnitTest10_capnp {
+ get {
+ object obj = ResourceManager.GetObject("UnitTest10_capnp", resourceCulture);
+ return ((byte[])(obj));
+ }
+ }
+
///
/// Looks up a localized resource of type System.Byte[].
///
diff --git a/capnpc-csharp.tests/Properties/Resources.resx b/capnpc-csharp.tests/Properties/Resources.resx
index 20c6d62..43736d8 100644
--- a/capnpc-csharp.tests/Properties/Resources.resx
+++ b/capnpc-csharp.tests/Properties/Resources.resx
@@ -118,6 +118,9 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ ..\Resources\UnitTest10.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
..\Resources\UnitTest3.capnp.bin;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
diff --git a/capnpc-csharp.tests/Resources/UnitTest10.capnp.bin b/capnpc-csharp.tests/Resources/UnitTest10.capnp.bin
new file mode 100644
index 0000000..dade3aa
Binary files /dev/null and b/capnpc-csharp.tests/Resources/UnitTest10.capnp.bin differ
diff --git a/capnpc-csharp.tests/UnitTest10.capnp b/capnpc-csharp.tests/UnitTest10.capnp
new file mode 100644
index 0000000..226e94b
--- /dev/null
+++ b/capnpc-csharp.tests/UnitTest10.capnp
@@ -0,0 +1,9 @@
+@0xbbfd48ae4b99d012;
+
+using Cxx = import "/capnp/c++.capnp";
+
+$Cxx.namespace("Foo::Bar::Baz");
+
+struct Outer {
+ inner @0: import "UnitTest10b.capnp".Inner ;
+}
diff --git a/capnpc-csharp.tests/UnitTest10b.capnp b/capnpc-csharp.tests/UnitTest10b.capnp
new file mode 100644
index 0000000..4d49fee
--- /dev/null
+++ b/capnpc-csharp.tests/UnitTest10b.capnp
@@ -0,0 +1,7 @@
+@0xaf95c1c78b01be97;
+
+using Cxx = import "/capnp/c++.capnp";
+
+$Cxx.namespace("Foo::Garf::Snarf");
+
+struct Inner {}
diff --git a/capnpc-csharp.tests/UnitTests.cs b/capnpc-csharp.tests/UnitTests.cs
index 987f6e1..26389b7 100644
--- a/capnpc-csharp.tests/UnitTests.cs
+++ b/capnpc-csharp.tests/UnitTests.cs
@@ -1,6 +1,7 @@
using capnpc_csharp.Tests.Properties;
using Capnp;
using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
@@ -47,6 +48,29 @@ namespace CapnpC
// Should not throw
}
+ [TestMethod]
+ public void Test10ImportedNamespaces()
+ {
+ var model = Load(Resources.UnitTest10_capnp);
+ var codeGen = NewGeneratorFor(model);
+ var genFile = model.FilesToGenerate.First();
+ var outerTypeDef = genFile.NestedTypes.First();
+ var outerType = Model.Types.FromDefinition(outerTypeDef);
+ var innerType = outerTypeDef.Fields[0].Type;
+ var innerTypeDef = innerType.Definition;
+ var names = codeGen.GetNames();
+ var outerNameSyntax = names.GetQName(outerType, outerTypeDef);
+ var innerNameSyntax = names.GetQName(innerType, outerTypeDef);
+ string[] outerNamespace = { "Foo", "Bar", "Baz" };
+ string[] innerNamespace = { "Foo", "Garf", "Snarf" };
+ CollectionAssert.AreEqual(outerNamespace, (outerTypeDef.DeclaringElement as Model.GenFile).Namespace);
+ CollectionAssert.AreEqual(innerNamespace, (innerType.Definition.DeclaringElement as Model.GenFile).Namespace);
+ string outerNSStr = String.Join('.', outerNamespace);
+ string innerNSStr = String.Join('.', innerNamespace);
+ Assert.AreEqual($"{outerNSStr}.Outer", outerNameSyntax.ToString());
+ Assert.AreEqual($"{innerNSStr}.Inner", innerNameSyntax.ToString());
+ }
+
static Generator.CodeGenerator NewGeneratorFor(Model.SchemaModel model)
=> new Generator.CodeGenerator(model, new Generator.GeneratorOptions());
diff --git a/capnpc-csharp/Generator/GenNames.cs b/capnpc-csharp/Generator/GenNames.cs
index f71a253..ea6b3a3 100644
--- a/capnpc-csharp/Generator/GenNames.cs
+++ b/capnpc-csharp/Generator/GenNames.cs
@@ -235,7 +235,7 @@ namespace CapnpC.Generator
return qtype;
}
- NameSyntax GetQName(Model.Type type, TypeDefinition scope)
+ internal NameSyntax GetQName(Model.Type type, TypeDefinition scope)
{
// FIXME: With the help of the 'scope' parameter we will be able to generate abbreviated
// qualified names. Unfortunately the commented approach is too naive. It will fail if