Skip to content

Commit 15b08cd

Browse files
committed
Refactored cycle check.
1 parent 4634190 commit 15b08cd

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

DataExchange/SchemaBuilder.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -404,16 +404,16 @@ public static bool TryCreateNodeFromSchema(SchemaNode schemaNode, ClassNode pare
404404
{
405405
var schemaReferenceNode = schemaNode as SchemaReferenceNode;
406406

407-
if (node is ClassInstanceNode || node is ClassInstanceArrayNode)
407+
try
408408
{
409-
if (!ClassManager.IsCycleFree(parentNode, classes[schemaReferenceNode.InnerNode], classes.Values))
410-
{
411-
logger.Log(LogLevel.Error, $"Skipping node with cycle reference: {node.Name}");
409+
referenceNode.ChangeInnerNode(classes[schemaReferenceNode.InnerNode]);
410+
}
411+
catch (ClassCycleException)
412+
{
413+
logger.Log(LogLevel.Error, $"Skipping node with cycle reference: {node.Name}");
412414

413-
return false;
414-
}
415+
return false;
415416
}
416-
referenceNode.ChangeInnerNode(classes[schemaReferenceNode.InnerNode]);
417417
}
418418

419419
var vtableNode = node as VTableNode;

Nodes/BaseReferenceNode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void ChangeInnerNode(ClassNode node)
4545
/// <summary>Performs a class cycle check for the given class.</summary>
4646
/// <exception cref="ClassCycleException">Thrown when a class cycle is present.</exception>
4747
/// <param name="node">The class to check.</param>
48-
private void PerformCycleCheck(ClassNode node)
48+
public void PerformCycleCheck(ClassNode node)
4949
{
5050
Contract.Requires(node != null);
5151

Nodes/ClassManager.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,15 @@ public static bool IsCycleFree(ClassNode parent, ClassNode check, IEnumerable<Cl
120120
)
121121
);
122122

123-
if (!IsCycleFreeUp(parent, toCheck, classes))
123+
if (!IsCycleFree(parent, toCheck, classes))
124124
{
125125
return false;
126126
}
127127

128128
return true;
129129
}
130130

131-
private static bool IsCycleFreeUp(ClassNode root, HashSet<ClassNode> seen, IEnumerable<ClassNode> classes)
131+
private static bool IsCycleFree(ClassNode root, HashSet<ClassNode> seen, IEnumerable<ClassNode> classes)
132132
{
133133
Contract.Requires(root != null);
134134
Contract.Requires(seen != null);
@@ -148,7 +148,7 @@ private static bool IsCycleFreeUp(ClassNode root, HashSet<ClassNode> seen, IEnum
148148
.Where(n => n.InnerNode == root)
149149
.Any())
150150
{
151-
if (!IsCycleFreeUp(cls, seen, classes))
151+
if (!IsCycleFree(cls, seen, classes))
152152
{
153153
return false;
154154
}

0 commit comments

Comments
 (0)