diff --git a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs index b32913113..6b5324b7f 100644 --- a/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs +++ b/tests/generator-Tests/Unit-Tests/CodeGenerationOptionsTests.cs @@ -51,5 +51,21 @@ public void GetOutputNameUseGlobal () Assert.AreEqual ("global::System.Collections.Generic.List.Enumerator[]>", opt.GetOutputName ("System.Collections.Generic.List.Enumerator[]>")); } + + [Test] + public void GetTypeReferenceName_Nullable () + { + var opt = new CodeGenerationOptions { SupportNullableReferenceTypes = true }; + + var system_void = new ReturnValue (null, "void", "System.Void", false, false); + system_void.Validate (opt, null, null); + + Assert.AreEqual ("void", opt.GetTypeReferenceName (system_void)); + + var primitive_void = new ReturnValue (null, "void", "void", false, false); + primitive_void.Validate (opt, null, null); + + Assert.AreEqual ("void", opt.GetTypeReferenceName (primitive_void)); + } } } diff --git a/tests/generator-Tests/Unit-Tests/ManagedTests.cs b/tests/generator-Tests/Unit-Tests/ManagedTests.cs index e880fe213..b0a19329f 100644 --- a/tests/generator-Tests/Unit-Tests/ManagedTests.cs +++ b/tests/generator-Tests/Unit-Tests/ManagedTests.cs @@ -121,7 +121,7 @@ public void Method () Assert.AreEqual ("public", method.Visibility); Assert.AreEqual ("void", method.Return); - Assert.AreEqual ("System.Void", method.ReturnType); + Assert.AreEqual ("void", method.ReturnType); Assert.AreEqual ("Bar", method.Name); Assert.AreEqual ("bar", method.JavaName); Assert.AreEqual ("()V", method.JniSignature); @@ -165,7 +165,7 @@ public void MethodWithParameters () Assert.IsTrue (method.Validate (new CodeGenerationOptions (), new GenericParameterDefinitionList (), new CodeGeneratorContext ()), "method.Validate failed!"); Assert.AreEqual ("(ZID)Ljava/lang/String;", method.JniSignature); Assert.AreEqual ("java.lang.String", method.Return); - Assert.AreEqual ("System.String", method.ManagedReturn); + Assert.AreEqual ("string", method.ManagedReturn); var parameter = method.Parameters [0]; Assert.AreEqual ("a", parameter.Name); diff --git a/tools/generator/CodeGenerationOptions.cs b/tools/generator/CodeGenerationOptions.cs index e483cf0a1..d29a755c6 100644 --- a/tools/generator/CodeGenerationOptions.cs +++ b/tools/generator/CodeGenerationOptions.cs @@ -141,21 +141,23 @@ string GetNullable (string s) switch (s) { case "void": case "int": - //case "int[]": case "bool": - //case "bool[]": case "float": - //case "float[]": case "sbyte": - //case "sbyte[]": case "long": - //case "long[]": case "char": - //case "char[]": case "double": - //case "double[]": case "short": - //case "short[]": + case "System.Boolean": + case "System.Byte": + case "System.Char": + case "System.Double": + case "System.Int16": + case "System.Int32": + case "System.Int64": + case "System.Single": + case "System.SByte": + case "System.Void": case "Android.Graphics.Color": return string.Empty; } diff --git a/tools/generator/Extensions/ManagedExtensions.cs b/tools/generator/Extensions/ManagedExtensions.cs index 8b345a2e5..211188d55 100644 --- a/tools/generator/Extensions/ManagedExtensions.cs +++ b/tools/generator/Extensions/ManagedExtensions.cs @@ -65,6 +65,25 @@ public static string StripArity (this string type) return type; } + + // Convert a fully qualified type like "System.Void" to the primitive type "void" if applicable + public static string FilterPrimitive (this string type) + { + return type switch { + "System.Boolean" => "bool", + "System.Char" => "char", + "System.Byte" => "byte", + "System.SByte" => "byte", + "System.Int16" => "short", + "System.Int32" => "int", + "System.Int64" => "long", + "System.Single" => "float", + "System.Double" => "double", + "System.Void" => "void", + "System.String" => "string", + _ => type + }; + } } #endif } diff --git a/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs b/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs index d7df3baee..5af44d599 100644 --- a/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs +++ b/tools/generator/Java.Interop.Tools.Generator.Importers/CecilApiImporter.cs @@ -196,8 +196,8 @@ public static Method CreateMethod (GenBase declaringType, MethodDefinition m) IsStatic = m.IsStatic, IsVirtual = m.IsVirtual, JavaName = reg_attr != null ? ((string) reg_attr.ConstructorArguments [0].Value) : m.Name, - ManagedReturn = m.ReturnType.FullNameCorrected ().StripArity (), - Return = m.ReturnType.FullNameCorrected ().StripArity (), + ManagedReturn = m.ReturnType.FullNameCorrected ().StripArity ().FilterPrimitive (), + Return = m.ReturnType.FullNameCorrected ().StripArity ().FilterPrimitive (), Visibility = m.Visibility () };