Hi,
I was debugging some code and noticed that when adding an element into the IndirectSet, an event raiseAddChangeEvent is being triggered even when the object is actually not added, causing IMHO unnecessary overhead.
Here is the snippet :
public boolean add(Object element) {
boolean added = true;
// PERF: If not instantiated just record the add to avoid the instantiation.
if (shouldAvoidInstantiation()) {
if (hasRemovedElements() && getRemovedElements().contains(element)) {
getRemovedElements().remove(element);
} else if (getAddedElements().contains(element)) {
// Must avoid recursion for relationship maintenance.
return false;
} else {
getAddedElements().add(element);
}
} else {
added = getDelegate().add(element);
}
raiseAddChangeEvent(element);
return added;
}
Note the line
added = getDelegate().add(element);
Variable added is set to false if the element is already present in the delegated set but at the end of the method the event raiseAddChangeEvent is triggered regardless the added variable
I think the event should only be triggered when the element was actually added.
Jakub