NodeItem: don't call overridable method from constructor
This commit is contained in:
parent
48c5b15720
commit
c77f9c29d3
1 changed files with 15 additions and 6 deletions
|
@ -64,13 +64,18 @@ class NodeItem<T> implements Node<T> {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
setParent(parent);
|
doSetParent(parent);
|
||||||
}
|
}
|
||||||
this.children.addAll(children);
|
this.children.addAll(children);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void forceParent(final Node<T> parent) {
|
/**
|
||||||
this.parent = parent;
|
* Sets the parent of a node without updating the parent in the process as {@link #setParent(Node)} does.
|
||||||
|
*
|
||||||
|
* @param newParent The new parent node
|
||||||
|
*/
|
||||||
|
protected void forceParent(final Node<T> newParent) {
|
||||||
|
this.parent = newParent;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -110,15 +115,19 @@ class NodeItem<T> implements Node<T> {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setParent(@NonNull final Node<T> parent) {
|
public void setParent(@NonNull final Node<T> parent) {
|
||||||
if (this.equals(parent) || parent.isDescendantOf(this)) {
|
doSetParent(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doSetParent(@NonNull final Node<T> newParent) {
|
||||||
|
if (this.equals(newParent) || newParent.isDescendantOf(this)) {
|
||||||
throw new NodeException("Parent is a descendant");
|
throw new NodeException("Parent is a descendant");
|
||||||
}
|
}
|
||||||
if (this.parent != null) {
|
if (this.parent != null) {
|
||||||
this.parent.getChildren()
|
this.parent.getChildren()
|
||||||
.remove(this);
|
.remove(this);
|
||||||
}
|
}
|
||||||
this.parent = parent;
|
this.parent = newParent;
|
||||||
parent.addChild(this);
|
newParent.addChild(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue