Ticket #1230 (closed enhancement: fixed)
AbstractSelect.select(null) causes NPE in HashMap
| Reported by: | Jonatan Kronqvist | Owned by: | Artur Signell |
|---|---|---|---|
| Priority: | minor | Milestone: | User Interface Library 5.3.0 RC |
| Component: | Server-side framework | Version: | |
| Keywords: | Cc: | ||
| Known Issue description: | |||
| Hours estimate: | Deadline (dd.mm.yyyy): | ||
| Known Issue version (since): | Known Issue title: | ||
| Hours done: | Depends to: | ||
| Affects documentation: | no | ||
| Known Issue workaround: | |||
| Affects release notes: | yes | Contract: | |
Description
As a convenience for developers I suggest allowing use of AbstractSelect.select(null);. This allows developers using the toolkit to skip manually converting all null itemIDs into Select.getNullSelectionItemId().
The current implementation is as follows:
public void select(Object itemId) {
if (!isSelected(itemId) && items.containsId(itemId)) {
if (isMultiSelect()) {
final Set s = new HashSet((Set) getValue());
s.add(itemId);
setValue(s);
} else if (itemId.equals(getNullSelectionItemId())) {
setValue(null);
} else {
setValue(itemId);
}
}
}
My proposed fix:
public void select(Object itemId) {
if (itemId == null)
itemId = getNullSelectionItemId();
if (!isSelected(itemId) && items.containsId(itemId)) {
if (isMultiSelect()) {
final Set s = new HashSet((Set) getValue());
s.add(itemId);
setValue(s);
} else if (itemId.equals(getNullSelectionItemId())) {
setValue(null);
} else {
setValue(itemId);
}
}
}
The fix is quite simple and should help developers avoid the trap of trying to select null and getting unexpected behavior.
Change History
Note: See
TracTickets for help on using
tickets.
