From b196a69a9850d0ee1dfe59078c0685116c5518e0 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Wed, 14 Oct 2020 13:20:42 -0500 Subject: [PATCH] [generator] Output correct formatting for binding warnings. --- .../Unit-Tests/CodeGeneratorContextTests.cs | 40 +++++++++++++++++++ tools/generator/CodeGeneratorContext.cs | 17 +++++--- 2 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 tests/generator-Tests/Unit-Tests/CodeGeneratorContextTests.cs diff --git a/tests/generator-Tests/Unit-Tests/CodeGeneratorContextTests.cs b/tests/generator-Tests/Unit-Tests/CodeGeneratorContextTests.cs new file mode 100644 index 000000000..c0501a3bc --- /dev/null +++ b/tests/generator-Tests/Unit-Tests/CodeGeneratorContextTests.cs @@ -0,0 +1,40 @@ +using System; +using System.Linq; +using MonoDroid.Generation; +using NUnit.Framework; + +namespace generatortests +{ + [TestFixture] + public class CodeGeneratorContextTests + { + [Test] + public void GetContextTypeMember () + { + var klass = new TestClass ("Object", "java.code.MyClass"); + + klass.AddMethod (SupportTypeBuilder.CreateMethod (klass, "Echo", new CodeGenerationOptions (), "uint", false, false, new Parameter ("value", "uint", "uint", false))); + klass.AddField (new TestField ("string", "Foo")); + + var context = new CodeGeneratorContext (); + context.ContextTypes.Push (klass); + + Assert.AreEqual ("java.code.MyClass", context.GetContextTypeMember ()); + + context.ContextMethod = klass.Methods.Single (); + + Assert.AreEqual ("java.code.MyClass.Echo (uint)", context.GetContextTypeMember ()); + + context.ContextMethod = null; + context.ContextField = klass.Fields.Single (); + + Assert.AreEqual ("java.code.MyClass.Foo", context.GetContextTypeMember ()); + + context.ContextMethod = klass.Methods.Single (); + context.ContextField = null; + context.ContextTypes.Clear (); + + Assert.AreEqual ("Echo (uint)", context.GetContextTypeMember ()); + } + } +} diff --git a/tools/generator/CodeGeneratorContext.cs b/tools/generator/CodeGeneratorContext.cs index 87a321500..4bc80d6e7 100644 --- a/tools/generator/CodeGeneratorContext.cs +++ b/tools/generator/CodeGeneratorContext.cs @@ -19,14 +19,19 @@ public class CodeGeneratorContext public string GetContextTypeMember () { - var output = ContextType?.FullName ?? string.Empty; + var parts = new List (); - if (ContextMethod != null) { - output += $"{ContextMethod.Name} ({string.Join (", ", ContextMethod?.Parameters.Select (p => p.InternalType).ToArray ())})"; - return output; - } + // Type name + if (!string.IsNullOrEmpty (ContextType?.FullName)) + parts.Add (ContextType?.FullName); - return output + ContextField?.Name; + // Member name + if (ContextMethod != null) + parts.Add ($"{ContextMethod.Name} ({string.Join (", ", ContextMethod?.Parameters.Select (p => p.InternalType).ToArray ())})"); + else if (ContextField != null) + parts.Add (ContextField.Name); + + return string.Join (".", parts); } } }