in dbus-java/src/main/java/org/freedesktop/dbus/messages/ObjectTree.java [126:159]
private TreeNode recursiveRemove(TreeNode _current, String _path) {
String[] elements = _path.split("/", 2);
if (elements[0].equals(_current.name)) {
// this is us or a parent node
if (1 == elements.length || "".equals(elements[1])) {
// this is us
_current.object = null;
_current.data = null;
if (_current.down != null ) {
// This node has a child node so it needs to be kept
return _current;
}
return _current.right;
}
if (_current.down != null) {
// recurse down
_current.down = recursiveRemove(_current.down, elements[1]);
if (_current.down == null && _current.data == null) {
// This node has no children anymore and is not exported itself so it can be removed
return _current.right;
}
}
return _current;
} else if (_current.right == null) {
return _current;
} else if (0 > _current.right.name.compareTo(elements[0])) {
return _current;
} else {
// recurse right
_current.right = recursiveRemove(_current.right, _path);
return _current;
}
}