Skip to content

Commit 23e9e04

Browse files
committed
[generator] Fix exception caused by incorrect nested type name.
1 parent b656f7f commit 23e9e04

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

tests/generator-Tests/Unit-Tests/ManagedTests.cs

+24
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ public void UnknownTypes (object unknown) { }
4141

4242
[Register ("com/mypackage/service")]
4343
public interface IService { }
44+
45+
[Register ("com/mypackage/FieldClass")]
46+
public class FieldClass : Java.Lang.Object
47+
{
48+
public NestedFieldClass field;
49+
50+
public class NestedFieldClass : Java.Lang.Object { }
51+
}
52+
4453
}
4554

4655
namespace GenericTestClasses
@@ -133,6 +142,21 @@ public void Class ()
133142
Assert.IsNull (@class.DeprecatedComment);
134143
}
135144

145+
[Test]
146+
public void FieldWithNestedType ()
147+
{
148+
var @class = CecilApiImporter.CreateClass (module.GetType ("Com.Mypackage.FieldClass"), options);
149+
var @class2 = CecilApiImporter.CreateClass (module.GetType ("Com.Mypackage.FieldClass/NestedFieldClass"), options);
150+
151+
options.SymbolTable.AddType (@class);
152+
options.SymbolTable.AddType (@class2);
153+
154+
Assert.IsTrue (@class.Validate (options, new GenericParameterDefinitionList (), new CodeGeneratorContext ()), "@class.Validate failed!");
155+
156+
// Ensure the front slash is replaced with a period
157+
Assert.AreEqual ("Com.Mypackage.FieldClass.NestedFieldClass", @class.Fields [0].TypeName);
158+
}
159+
136160
[Test]
137161
public void Method ()
138162
{

tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ public static Field CreateField (FieldDefinition f)
108108
Visibility = f.IsPublic ? "public" : f.IsFamilyOrAssembly ? "protected internal" : f.IsFamily ? "protected" : f.IsAssembly ? "internal" : "private"
109109
};
110110

111-
field.SetterParameter = CreateParameter (f.FieldType.Resolve ()?.FullName ?? f.FieldType.FullName, null);
111+
var field_parameter_type = f.FieldType.Resolve () ?? f.FieldType;
112+
field.SetterParameter = CreateParameter (field_parameter_type.FullNameCorrected ().StripArity (), null);
112113
field.SetterParameter.Name = "value";
113114

114115
return field;

0 commit comments

Comments
 (0)