docs: @SuppressWarnings("checkstyle:npathcomplexity")
  	protected boolean moveTo(N newParent, int index, boolean isDynamicChildList) {
  		if (newParent == null) {
  			return false;
  		}
  
  		int newIndex = index;
  		if (isDynamicChildList) {
  			if (newIndex < 0) {
  				newIndex = 0;
  			} else if (newIndex > getChildCount()) {
  				newIndex = getChildCount();
  			}
  		} else if (newIndex < 0 || newIndex >= getChildCount()) {
  			return false;
  		}
  
  		final N oldParent = getParentNode();
  		if (oldParent == newParent) {
  			return false;
  		}
  		final N me = toN();
  
  		// Remove from previous parent
  		int oldIndex = -1;
  		if (oldParent != null) {
  			oldIndex = oldParent.indexOf(me);
  			if (oldIndex >= 0) {
  				oldParent.setChildAtWithoutEventFiring(oldIndex, null);
  			}
  		}
  
  		// Remove the node at the target position
  		if (!isDynamicChildList || newIndex < getChildCount()) {
  			newParent.setChildAt(newIndex, null);
  		}
  
  		// Add inside the new parent
  		newParent.setChildAtWithoutEventFiring(newIndex, me);
  
  		// Set the parent reference
  		final boolean fireEvent = setParentNodeReference(newParent, false);
  
  		// Fire events
  		if (oldIndex >= 0) {
  			assert oldParent != null;
  			oldParent.firePropertyChildRemoved(oldIndex, me);
  		}
  
  		if (newIndex >= 0) {
  			newParent.firePropertyChildAdded(newIndex, me);
  		}
  
  		if (fireEvent) {
  			firePropertyParentChanged(oldParent, newParent);
  		}
  
  		return true;
  	}