From 23e9e0487ad952e12d136b2225797d2941e00eca Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Fri, 18 Oct 2024 10:29:38 -1000 Subject: [PATCH] [generator] Fix exception caused by incorrect nested type name. --- .../Unit-Tests/ManagedTests.cs | 24 +++++++++++++++++++ .../CecilApiImporter.cs | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/generator-Tests/Unit-Tests/ManagedTests.cs b/tests/generator-Tests/Unit-Tests/ManagedTests.cs index cd24b0b9b..10c80a10c 100644 --- a/tests/generator-Tests/Unit-Tests/ManagedTests.cs +++ b/tests/generator-Tests/Unit-Tests/ManagedTests.cs @@ -41,6 +41,15 @@ public void UnknownTypes (object unknown) { } [Register ("com/mypackage/service")] public interface IService { } + + [Register ("com/mypackage/FieldClass")] + public class FieldClass : Java.Lang.Object + { + public NestedFieldClass field; + + public class NestedFieldClass : Java.Lang.Object { } + } + } namespace GenericTestClasses @@ -133,6 +142,21 @@ public void Class () Assert.IsNull (@class.DeprecatedComment); } + [Test] + public void FieldWithNestedType () + { + var @class = CecilApiImporter.CreateClass (module.GetType ("Com.Mypackage.FieldClass"), options); + var @class2 = CecilApiImporter.CreateClass (module.GetType ("Com.Mypackage.FieldClass/NestedFieldClass"), options); + + options.SymbolTable.AddType (@class); + options.SymbolTable.AddType (@class2); + + Assert.IsTrue (@class.Validate (options, new GenericParameterDefinitionList (), new CodeGeneratorContext ()), "@class.Validate failed!"); + + // Ensure the front slash is replaced with a period + Assert.AreEqual ("Com.Mypackage.FieldClass.NestedFieldClass", @class.Fields [0].TypeName); + } + [Test] public void Method () { diff --git a/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs b/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs index ae9fc3fbf..f3c6e0611 100644 --- a/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs +++ b/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs @@ -108,7 +108,8 @@ public static Field CreateField (FieldDefinition f) Visibility = f.IsPublic ? "public" : f.IsFamilyOrAssembly ? "protected internal" : f.IsFamily ? "protected" : f.IsAssembly ? "internal" : "private" }; - field.SetterParameter = CreateParameter (f.FieldType.Resolve ()?.FullName ?? f.FieldType.FullName, null); + var field_parameter_type = f.FieldType.Resolve () ?? f.FieldType; + field.SetterParameter = CreateParameter (field_parameter_type.FullNameCorrected ().StripArity (), null); field.SetterParameter.Name = "value"; return field;