Recursition problem
This commit is contained in:
@ -12,7 +12,7 @@ internal class Record
|
||||
#nullable enable
|
||||
|
||||
[JsonConstructor]
|
||||
public Record(WorkItem workItem, WorkItem? parent, Record[] children, Record[] related, Record[] successors)
|
||||
public Record(WorkItem workItem, WorkItem? parent, Record[]? children, Record[]? related, Record[]? successors)
|
||||
{
|
||||
WorkItem = workItem;
|
||||
Parent = parent;
|
||||
@ -23,9 +23,9 @@ internal class Record
|
||||
|
||||
[JsonPropertyName("WorkItem")] public WorkItem WorkItem { get; set; }
|
||||
[JsonPropertyName("Parent")] public WorkItem? Parent { get; set; }
|
||||
[JsonPropertyName("Children")] public Record[] Children { get; set; }
|
||||
[JsonPropertyName("Related")] public Record[] Related { get; set; }
|
||||
[JsonPropertyName("Successors")] public Record[] Successors { get; set; }
|
||||
[JsonPropertyName("Children")] public Record[]? Children { get; set; }
|
||||
[JsonPropertyName("Related")] public Record[]? Related { get; set; }
|
||||
[JsonPropertyName("Successors")] public Record[]? Successors { get; set; }
|
||||
|
||||
internal static Record GetWithoutNesting(Record record, string? violation)
|
||||
{
|
||||
@ -65,25 +65,47 @@ internal class Record
|
||||
private static Record Get(Record record, bool keepRelations)
|
||||
{
|
||||
Record result;
|
||||
Record[]? childRecords;
|
||||
Record[]? relatedRecords;
|
||||
Record[]? successorRecords;
|
||||
List<Record> relationRecords;
|
||||
WorkItem? parentWorkItem = keepRelations ? record.Parent : WorkItem.GetWithOutRelations(record.Parent);
|
||||
WorkItem? workItem = keepRelations ? record.WorkItem : WorkItem.GetWithOutRelations(record.WorkItem) ?? throw new Exception();
|
||||
List<Record> childRecords = new();
|
||||
List<Record> relatedRecords = new();
|
||||
List<Record> successorRecords = new();
|
||||
foreach (Record r in record.Children)
|
||||
childRecords.Add(Get(r, keepRelations));
|
||||
foreach (Record r in record.Related)
|
||||
relatedRecords.Add(Get(r, keepRelations));
|
||||
foreach (Record r in record.Successors)
|
||||
successorRecords.Add(Get(r, keepRelations));
|
||||
result = new(workItem, parentWorkItem, childRecords.ToArray(), relatedRecords.ToArray(), successorRecords.ToArray());
|
||||
if (record.Children is null)
|
||||
childRecords = null;
|
||||
else
|
||||
{
|
||||
relationRecords = new();
|
||||
foreach (Record r in record.Children)
|
||||
relationRecords.Add(Get(r, keepRelations));
|
||||
childRecords = relationRecords.ToArray();
|
||||
}
|
||||
if (record.Related is null)
|
||||
relatedRecords = null;
|
||||
else
|
||||
{
|
||||
relationRecords = new();
|
||||
foreach (Record r in record.Related)
|
||||
relationRecords.Add(Get(r, keepRelations));
|
||||
relatedRecords = relationRecords.ToArray();
|
||||
}
|
||||
if (record.Successors is null)
|
||||
successorRecords = null;
|
||||
else
|
||||
{
|
||||
relationRecords = new();
|
||||
foreach (Record r in record.Successors)
|
||||
relationRecords.Add(Get(r, keepRelations));
|
||||
successorRecords = relationRecords.ToArray();
|
||||
}
|
||||
result = new(workItem, parentWorkItem, childRecords, relatedRecords, successorRecords);
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static Record Get(WorkItem workItem, WorkItem? parent, ReadOnlyCollection<Record> children, ReadOnlyCollection<Record> related, ReadOnlyCollection<Record> successors, bool keepRelations)
|
||||
internal static Record Get(WorkItem workItem, WorkItem? parent, ReadOnlyCollection<Record>? children, ReadOnlyCollection<Record>? related, ReadOnlyCollection<Record>? successors, bool keepRelations)
|
||||
{
|
||||
Record result;
|
||||
Record record = new(workItem, parent, children.ToArray(), related.ToArray(), successors.ToArray());
|
||||
Record record = new(workItem, parent, children?.ToArray(), related?.ToArray(), successors?.ToArray());
|
||||
result = Get(record, keepRelations);
|
||||
return result;
|
||||
}
|
||||
@ -96,9 +118,9 @@ internal class Record
|
||||
WorkItem? parentWorkItem;
|
||||
WorkItem? relationWorkItem;
|
||||
List<WorkItem> collection = new();
|
||||
ReadOnlyCollection<Record> childRecords;
|
||||
ReadOnlyCollection<Record> relatedRecords;
|
||||
ReadOnlyCollection<Record> successorRecords;
|
||||
ReadOnlyCollection<Record>? childRecords;
|
||||
ReadOnlyCollection<Record>? relatedRecords;
|
||||
ReadOnlyCollection<Record>? successorRecords;
|
||||
if (workItem.Relations is not null && workItem.Relations.Length > 0)
|
||||
{
|
||||
collection.Clear();
|
||||
@ -115,17 +137,16 @@ internal class Record
|
||||
collection = (from l in collection orderby l.State != "Closed", l.Id select l).ToList();
|
||||
foreach (WorkItem w in collection)
|
||||
{
|
||||
if (nests.Count > 99)
|
||||
if (nests.Count > 500)
|
||||
break;
|
||||
if (w.Parent is null)
|
||||
parentWorkItem = null;
|
||||
else
|
||||
_ = keyValuePairs.TryGetValue(w.Parent.Value, out parentWorkItem);
|
||||
childRecords = GetKeyValuePairs(keyValuePairs, w, "Child", nests, keepRelations); // Forward
|
||||
// successorRecords = GetKeyValuePairs(keyValuePairs, w, "Successor", nests); // Forward
|
||||
successorRecords = new(Array.Empty<Record>());
|
||||
// predecessorRecords = GetKeyValuePairs(keyValuePairs, w, "Predecessor", nests); // Reverse
|
||||
relatedRecords = GetKeyValuePairs(keyValuePairs, w, "Related", nests, keepRelations); // Related
|
||||
relatedRecords = null; // GetKeyValuePairs(keyValuePairs, w, "Related", nests, keepRelations); // Related
|
||||
successorRecords = null; // GetKeyValuePairs(keyValuePairs, w, "Successor", nests, keepRelations); // Forward
|
||||
// predecessorRecords = GetKeyValuePairs(keyValuePairs, w, "Predecessor", nests, keepRelations); // Reverse
|
||||
record = Get(w, parentWorkItem, childRecords, relatedRecords, successorRecords, keepRelations);
|
||||
results.Add(record);
|
||||
}
|
||||
|
Reference in New Issue
Block a user