Bug 32254 [Viewers] AbstractTreeViewer uses HashSet to remember expansion state
I20030216 The custom hash table should be used instead. Otherwise expansion state may be lost due to a different equals implementation of the element and the IElementComparer.
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
* </p>
	 * <p>
	 * If <code>setSelection</code> is called from within
	 * <code>preserveSelection</code>, the call to
	 * <code>updateSelection</code> is delayed until the end of
	 * <code>preserveSelection</code>.
	 * </p>
	 * <p>
	 * Subclasses do not typically override this method, but implement
	 * <code>setSelectionToWidget</code> instead.
	 * </p>
	 */
	public void setSelection(ISelection selection, boolean reveal) {
		Control control = getControl();
		if (control == null || control.isDisposed()) {
			return;
		}
		if (!inChange) {
			setSelectionToWidget(selection, reveal);
			ISelection sel = getSelection();
			updateSelection(sel);
			firePostSelectionChanged(new SelectionChangedEvent(this, sel));
		} else {
			restoreSelection = false;
			setSelectionToWidget(selection, reveal);
		}
	}
	/**
	 * Parlays the given list of selected elements into selections on this
	 * viewer's control.