diff --git a/src/Controls/src/Build.Tasks/CompiledMarkupExtensions/ArrayExtension.cs b/src/Controls/src/Build.Tasks/CompiledMarkupExtensions/ArrayExtension.cs index 38a84d2a2b86..15efa6fabe86 100644 --- a/src/Controls/src/Build.Tasks/CompiledMarkupExtensions/ArrayExtension.cs +++ b/src/Controls/src/Build.Tasks/CompiledMarkupExtensions/ArrayExtension.cs @@ -26,7 +26,17 @@ IEnumerable ProvideValue(TypeReference typeTypeRef, IReadOnlyList - + Hello World diff --git a/src/Controls/tests/Xaml.UnitTests/XArray.xaml.cs b/src/Controls/tests/Xaml.UnitTests/XArray.xaml.cs index 6899bd3c6a28..749e17399749 100644 --- a/src/Controls/tests/Xaml.UnitTests/XArray.xaml.cs +++ b/src/Controls/tests/Xaml.UnitTests/XArray.xaml.cs @@ -1,6 +1,6 @@ -using System; -using System.Collections.Generic; -using Microsoft.Maui.Controls; +using System.Linq; +using Mono.Cecil; +using Mono.Cecil.Cil; using NUnit.Framework; namespace Microsoft.Maui.Controls.Xaml.UnitTests @@ -38,6 +38,24 @@ public void SupportsXArray(bool useCompiledXaml) Assert.AreEqual("Hello", ((string[])layout.Content)[0]); Assert.AreEqual("World", ((string[])layout.Content)[1]); } + + [Test] + public void ArrayExtensionNotPresentInGeneratedCode([Values(false)] bool useCompiledXaml) + { + MockCompiler.Compile(typeof(XArray), out var methodDef); + Assert.That(!methodDef.Body.Instructions.Any(instr => InstructionIsArrayExtensionCtor(methodDef, instr)), "This Xaml still generates a new ArrayExtension()"); + } + + bool InstructionIsArrayExtensionCtor(MethodDefinition methodDef, Mono.Cecil.Cil.Instruction instruction) + { + if (instruction.OpCode != OpCodes.Newobj) + return false; + if (instruction.Operand is not MethodReference methodRef) + return false; + if (!Build.Tasks.TypeRefComparer.Default.Equals(methodRef.DeclaringType, methodDef.Module.ImportReference(typeof(ArrayExtension)))) + return false; + return true; + } } } } \ No newline at end of file