fix(editor): improve DockContainer robustness and style consistency

- Added cycle detection in AddChild to prevent tree-cycle bugs
- Added defensive null validation to AddChild and RemoveChild
- Standardized using directives and exception throwing style
This commit is contained in:
2026-03-28 21:51:52 +09:00
parent bf40eabcac
commit 11101f8352

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections.ObjectModel;
namespace Ghost.Editor.View.Controls.Docking;
@@ -20,8 +21,21 @@ public abstract class DockContainer : DockModule
public void AddChild(DockModule module)
{
ArgumentNullException.ThrowIfNull(module);
if (module == this)
throw new System.ArgumentException("Cannot add a container to itself.", nameof(module));
throw new ArgumentException("Cannot add a container to itself.", nameof(module));
if (module is DockContainer container)
{
var current = Owner;
while (current != null)
{
if (current == container)
throw new ArgumentException("Cannot add a container that is an ancestor of this container.", nameof(module));
current = current.Owner;
}
}
if (_children.Contains(module))
return;
@@ -33,6 +47,8 @@ public abstract class DockContainer : DockModule
public void RemoveChild(DockModule module)
{
ArgumentNullException.ThrowIfNull(module);
if (_children.Remove(module))
{
module.Owner = null;