Bug 125272 [Viewers] AbstractTreeViewer needs remove(Object parentElement, Object[] childElements)
There is an add(Object parentElement, Object[] childElements) but no corresponding remove(). Without this method, if you have an element that appears under multiple parents, the only way to get model and viewer in sync after removing the element from just one of its parents is calling refresh().
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractTreeViewer.java
* added at the end of the parent's list of children in the order given;
     * otherwise, the elements are inserted at the appropriate positions.
     * <p>
     * This method should be called (by the content provider) when elements
     * have been added to the model, in order to cause the viewer to accurately
     * reflect the model. This method only affects the viewer, not the model.
     * </p>
     * 
     * @param parentElement
     *           the parent element
     * @param childElements
     *           the child elements to add
     */
    public void add(Object parentElement, Object[] childElements) {
        Assert.isNotNull(parentElement);
        assertElementsNotNull(childElements);
        Widget[] widgets = findItems(parentElement);
        
        if (widgets.length == 0)
            return;
		for (int i = 0; i < widgets.length; i++) {
			internalAdd(widgets[i], parentElement, childElements);
		}        
    }
	/**
     * Adds the given child elements to this viewer as children of the given
     * parent element.
     * <p>
     * EXPERIMENTAL.  Not to be used except by JDT.
     * This method was added to support JDT's explorations