diff --git a/Directory.Build.props b/Directory.Build.props index 84f2948e..0d9693fc 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -4,7 +4,7 @@ true true true - 2.64.1 + 2.66 diff --git a/Directory.Packages.props b/Directory.Packages.props index ba469d28..f8bafac3 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,6 +1,6 @@ - + diff --git a/Loqui.Generation/Fields/ArrayType.cs b/Loqui.Generation/Fields/ArrayType.cs index 88027af6..2e6638a9 100644 --- a/Loqui.Generation/Fields/ArrayType.cs +++ b/Loqui.Generation/Fields/ArrayType.cs @@ -12,17 +12,26 @@ public class ArrayType : ListType public override bool HasDefault => true; public override string TypeName(bool getter, bool needsCovariance = false) { + var itemTypeName = ItemTypeName(getter); if (getter) { - return $"ReadOnlyMemorySlice<{ItemTypeName(getter)}>"; + if (SimpleTarget) + { + return $"ReadOnlyMemorySlice<{itemTypeName}>"; + } + else + { + return $"IReadOnlyList<{itemTypeName}>"; + } } else { - return $"{ItemTypeName(getter)}[]"; + return $"{itemTypeName}[]"; } } public int? FixedSize; + public bool SimpleTarget => ItemTypeName(getter: false) == ItemTypeName(getter: true); public override async Task Load(XElement node, bool requireName = true) { @@ -54,7 +63,7 @@ protected override string GetActualItemClass(bool ctor = false) } else { - return $"Array.Empty{SubTypeGeneration.TypeName(getter: false, needsCovariance: true)}()"; + return "[]"; } } @@ -67,7 +76,14 @@ public override string ListTypeName(bool getter, bool internalInterface) } if (getter) { - return $"ReadOnlyMemorySlice<{itemTypeName}>"; + if (SimpleTarget) + { + return $"ReadOnlyMemorySlice<{itemTypeName}>"; + } + else + { + return $"IReadOnlyList<{itemTypeName}>"; + } } else { @@ -116,6 +132,11 @@ public override void GenerateClear(StructuredStringBuilder sb, Accessor accessor public override void GenerateForEquals(StructuredStringBuilder sb, Accessor accessor, Accessor rhsAccessor, Accessor maskAccessor) { + if (!SimpleTarget) + { + base.GenerateForEquals(sb, accessor, rhsAccessor, maskAccessor); + return; + } sb.AppendLine($"if ({GetTranslationIfAccessor(maskAccessor)})"); using (sb.CurlyBrace()) { @@ -136,6 +157,11 @@ public override void GenerateForEquals(StructuredStringBuilder sb, Accessor acce public override void GenerateForEqualsMask(StructuredStringBuilder sb, Accessor accessor, Accessor rhsAccessor, string retAccessor) { + if (!SimpleTarget) + { + base.GenerateForEqualsMask(sb, accessor, rhsAccessor, retAccessor); + return; + } string funcStr; var loqui = SubTypeGeneration as LoquiType; if (loqui != null)