public boolean removeChild ( final AbstractHtml child ) { boolean listenerInvoked = false ; final Lock lock = sharedObject . getLock ( ACCESS_OBJECT ) . writeLock ( ) ; boolean removed = false ; try { lock . lock ( ) ; removed = children . remove ( child ) ; if ( removed ) { // making child.parent = null inside the below method. initNewSharedObjectInAllNestedTagsAndSetSuperParentNull ( child ) ; final ChildTagRemoveListener listener = sharedObject . getChildTagRemoveListener ( ACCESS_OBJECT ) ; if ( listener != null ) { listener . childRemoved ( new ChildTagRemoveListener . Event ( this , child ) ) ; listenerInvoked = true ; } } } finally { lock . unlock ( ) ; } if ( listenerInvoked ) { final PushQueue pushQueue = sharedObject . getPushQueue ( ACCESS_OBJECT ) ; if ( pushQueue != null ) { pushQueue . push ( ) ; } } return removed ; }
Removes the given tag from its children only if the given tag is a child of this tag .