Skip to content

Commit b6f7174

Browse files
committed
generateDeepCopyNew
1 parent fc1ed66 commit b6f7174

File tree

2 files changed

+60
-12
lines changed

2 files changed

+60
-12
lines changed

Loqui.Generation/Constants.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public static class Constants
4343
public const string GENERATE_EQUALS = "generateEquals";
4444
public const string GENERATE_TO_STRING = "generateToString";
4545
public const string CTOR_PERMISSION = "ctorPermission";
46-
public const string VERSION = "version";
4746
public const string DERIVATIVE_DEFAULT = "derivativeDefault";
4847
public const string DISABLE = "disable";
4948
public const string NAMESPACES = "Namespaces";
@@ -61,6 +60,7 @@ public static class Constants
6160
public const string SETTER_VARIANCE = "setterVariance";
6261
public const string OVERRIDE = "override";
6362
public const string SET_BASE_CLASS = "setBaseClass";
63+
public const string GENERATE_DEEP_COPY_NEW = "generateDeepCopyNew";
6464
public const string TYPE = "type";
6565
public const string RX_BASE_OPTION = "rxBase";
6666
public const string FIXED_SIZE = "fixedSize";

Loqui.Generation/ObjectGeneration.cs

+59-11
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,11 @@ public abstract class ObjectGeneration
5252
public Dictionary<string, string> BaseGenerics = new();
5353
public virtual string NewOverride(Func<ObjectGeneration, bool> baseObjFilter = null, bool doIt = true) => " ";
5454
public virtual string ProtectedKeyword => "protected";
55-
public ushort Version = 0;
5655
public XElement Node;
5756
public string FileName => $"{Name}{Constants.AutogeneratedMarkerString}.cs";
5857
public bool NeedsReflectionGeneration => GenerateNthReflections;
5958
public bool GenerateComplexCopySystems => false;
59+
public bool GenerateDeepCopyNew = true;
6060

6161
public bool HasInternalGetInterface
6262
{
@@ -149,7 +149,7 @@ public string CommonClassSpeccedInstance(Accessor accessor, LoquiInterfaceType i
149149
public Dictionary<object, object> CustomData = new();
150150

151151
// Task Coordinators
152-
protected TaskCompletionSource<ExtendedList<ObjectGeneration>> _directlyInheritingObjectsTcs = new TaskCompletionSource<ExtendedList<ObjectGeneration>>();
152+
protected TaskCompletionSource<ExtendedList<ObjectGeneration>> _directlyInheritingObjectsTcs = new();
153153
protected Task<ExtendedList<ObjectGeneration>> _directlyInheritingObjects => _directlyInheritingObjectsTcs.Task;
154154
public async Task<IEnumerable<ObjectGeneration>> InheritingObjects()
155155
{
@@ -160,12 +160,12 @@ public async Task<IEnumerable<ObjectGeneration>> InheritingObjects()
160160
objs.Select(async (o) => await o.InheritingObjects()))).SelectMany((i) => i));
161161
return ret;
162162
}
163-
public TaskCompletionSource LoadingCompleteTask = new TaskCompletionSource();
164-
protected TaskCompletionSource WiredBaseClassTCS = new TaskCompletionSource();
163+
public TaskCompletionSource LoadingCompleteTask = new();
164+
protected TaskCompletionSource WiredBaseClassTCS = new();
165165
public Task WiredBaseClassTask => WiredBaseClassTCS.Task;
166-
protected TaskCompletionSource fieldCtorsGenerated = new TaskCompletionSource();
166+
protected TaskCompletionSource fieldCtorsGenerated = new();
167167
public Task FieldCtorsGeneratedSignal => fieldCtorsGenerated.Task;
168-
private TaskCompletionSource<MaskTypeSetCollection> _MaskTypeSetCollection = new TaskCompletionSource<MaskTypeSetCollection>();
168+
private TaskCompletionSource<MaskTypeSetCollection> _MaskTypeSetCollection = new();
169169
public Task<MaskTypeSetCollection> MaskTypeSetCollection => _MaskTypeSetCollection.Task;
170170

171171
public CommentCollection Comments;
@@ -199,14 +199,15 @@ public virtual async Task Load()
199199
Node.TransferAttribute<bool>(Constants.GENERATE_EQUALS, (i) => GenerateEquals = i);
200200
Node.TransferAttribute<bool>(Constants.GENERATE_TO_STRING, (i) => GenerateToString = i);
201201
Node.TransferAttribute<CtorPermissionLevel>(Constants.CTOR_PERMISSION, (i) => BasicCtorPermission = i);
202-
Node.TransferAttribute<ushort>(Constants.VERSION, (i) => Version = i);
203202
Node.TransferAttribute<bool>(Constants.FORCE_INTERNAL_INTERFACE, (i) => ForceInternalInterface = i);
204203
Node.TransferAttribute<LoquiInterfaceType>(Constants.SET_INTERFACE_TYPE_DEFAULT, (i) => SetterInterfaceTypeDefault = i);
205204
Node.TransferAttribute<LoquiInterfaceType>(Constants.GET_INTERFACE_TYPE_DEFAULT, (i) => GetterInterfaceTypeDefault = i);
206205
Node.TransferAttribute<AccessModifier>(Constants.SET_PERMISSION_DEFAULT, (i) => SetPermissionDefault = i);
207206
Node.TransferAttribute<bool>(Constants.DERIVATIVE_DEFAULT, (i) => DerivativeDefault = i);
208207
Node.TransferAttribute<DisabledLevel>(Constants.DISABLE, (i) => Disabled = i);
209208
Node.TransferAttribute<bool>(Constants.SET_BASE_CLASS, i => SetBaseClass = i);
209+
Node.TransferAttribute<bool>(Constants.SET_BASE_CLASS, i => SetBaseClass = i);
210+
Node.TransferAttribute<bool>(Constants.GENERATE_DEEP_COPY_NEW, i => GenerateDeepCopyNew = i);
210211

211212
var namespacesNode = Node.Element(XName.Get(Constants.NAMESPACES, LoquiGenerator.Namespace));
212213
if (namespacesNode != null)
@@ -2883,6 +2884,16 @@ public virtual void GenerateDeepCopy(StructuredStringBuilder sb, MaskTypeSet mas
28832884
{
28842885
if (!maskTypeSet.Applicable(LoquiInterfaceType.ISetter, CommonGenerics.Functions, MaskType.Normal, MaskType.Translation)) return;
28852886
if (!SupportsCopy()) return;
2887+
2888+
if (!GenerateDeepCopyNew)
2889+
{
2890+
using (var args = new Call(sb,
2891+
$"public partial {ObjectName} DeepCopyGetNew{GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}"))
2892+
{
2893+
args.Add($"{Interface(GetGenericTypes(MaskType.NormalGetter), getter: true, internalInterface: true)} item");
2894+
}
2895+
}
2896+
28862897
using (var args = new Function(sb,
28872898
$"public {ObjectName} DeepCopy{GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}"))
28882899
{
@@ -2892,7 +2903,19 @@ public virtual void GenerateDeepCopy(StructuredStringBuilder sb, MaskTypeSet mas
28922903
}
28932904
using (sb.CurlyBrace())
28942905
{
2895-
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2906+
if (GenerateDeepCopyNew)
2907+
{
2908+
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2909+
}
2910+
else
2911+
{
2912+
using (var args = sb.Call(
2913+
$"var ret = DeepCopyGetNew{GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}"))
2914+
{
2915+
args.Add("item");
2916+
}
2917+
}
2918+
28962919
using (var args = sb.Call(
28972920
$"{CommonClassInstance("ret", LoquiInterfaceType.ISetter, CommonGenerics.Functions, MaskType.Translation)}.DeepCopyIn{GenerateGenericClause(GenericTypes_Nickname(MaskType.Normal), GenericTypes_Nickname(MaskType.NormalGetter))}"))
28982921
{
@@ -2917,7 +2940,20 @@ public virtual void GenerateDeepCopy(StructuredStringBuilder sb, MaskTypeSet mas
29172940
using (sb.CurlyBrace())
29182941
{
29192942
sb.AppendLine($"var errorMaskBuilder = new ErrorMaskBuilder();");
2920-
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2943+
2944+
if (GenerateDeepCopyNew)
2945+
{
2946+
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2947+
}
2948+
else
2949+
{
2950+
using (var args = sb.Call(
2951+
$"var ret = DeepCopyGetNew{GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}"))
2952+
{
2953+
args.Add("item");
2954+
}
2955+
}
2956+
29212957
using (var args = sb.Call(
29222958
$"{CommonClassInstance("ret", LoquiInterfaceType.ISetter, CommonGenerics.Functions, MaskType.Translation)}.DeepCopyIn{GenerateGenericClause(GenericTypes_Nickname(MaskType.Normal), GenericTypes_Nickname(MaskType.NormalGetter))}"))
29232959
{
@@ -2942,9 +2978,21 @@ public virtual void GenerateDeepCopy(StructuredStringBuilder sb, MaskTypeSet mas
29422978
}
29432979
using (sb.CurlyBrace())
29442980
{
2945-
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2981+
if (GenerateDeepCopyNew)
2982+
{
2983+
sb.AppendLine($"{ObjectName} ret = ({ObjectName}){CommonClassInstance("item", LoquiInterfaceType.IGetter, CommonGenerics.Class, MaskType.NormalGetter)}.GetNew{GetGenericTypes(MaskType.Normal)}();");
2984+
}
2985+
else
2986+
{
2987+
using (var args = sb.Call(
2988+
$"var ret = DeepCopyGetNew{GetGenericTypes(MaskType.Normal, MaskType.NormalGetter, MaskType.Translation)}"))
2989+
{
2990+
args.Add("item");
2991+
}
2992+
}
2993+
29462994
using (var args = sb.Call(
2947-
$"{CommonClassInstance("ret", LoquiInterfaceType.ISetter, CommonGenerics.Functions, MaskType.Translation)}.DeepCopyIn{GenerateGenericClause(GenericTypes_Nickname(MaskType.Normal), GenericTypes_Nickname(MaskType.NormalGetter))}"))
2995+
$"{CommonClassInstance("ret", LoquiInterfaceType.ISetter, CommonGenerics.Functions, MaskType.Translation)}.DeepCopyIn{GenerateGenericClause(GenericTypes_Nickname(MaskType.Normal), GenericTypes_Nickname(MaskType.NormalGetter))}"))
29482996
{
29492997
args.Add("item: ret");
29502998
args.Add("rhs: item");

0 commit comments

Comments
 (0)