Bug 135837 [Viewers] Problems with TreeSelection#equals(..) and StructuredSelection#equals(..)
N20060410-0010 TreeSelection#equals(..) is not symmetric with StructuredSelection#equals(..): - TreeSelection#equals(..) is always false if the argument is not instanceof TreeSelection - StructuredSelection.equals(..) can be true if the argument is a TreeSelection 3 Problems: (1) equals(..) should be symmetric, as defined in Object#equals(..) (2) hashCode() of both classes must return the same if objects are equal (currently, StructuredSelection#hashCode() is not even implemented!) (3) equality is currently only defined for the implementations. Should be defined on interfaces, since clients generally only know about the interface, not the implementation.
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TreeSelection.java
return comparer.equals(element1, element2);
		}
		return element1.equals(element2);
	}
	
	private int elementHashCode(Object element) {
		IElementComparer comparer = getElementComparer();
		if (comparer != null) {
			return comparer.hashCode(element);
		}
		return element.hashCode();
	}
	public boolean equals(Object obj) {
		if (obj instanceof TreeSelection) {
			TreeSelection selection = (TreeSelection) obj;
			int size = getPaths().length;
			if (selection.getPaths().length == size) {
				boolean useComparer = getElementComparer() == selection.getElementComparer();
				if (size > 0) {
					for (int i = 0; i < paths.length; i++) {
						if (!elementEquals(paths[i], selection.paths[i], useComparer)) {
							return false;
						}
					}
				}
				return true;
			}
		}
		return false;
	}