SelectedValueComparator defensively handles null values in exhaustiveCompare
Issue: SPR-12001
(cherry picked from commit 980f971)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2012 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -94,10 +94,10 @@ abstract class SelectedValueComparator {
|
||||
selected = collectionCompare(CollectionUtils.arrayToList(boundValue), candidateValue, bindStatus);
|
||||
}
|
||||
else if (boundValue instanceof Collection) {
|
||||
selected = collectionCompare((Collection) boundValue, candidateValue, bindStatus);
|
||||
selected = collectionCompare((Collection<?>) boundValue, candidateValue, bindStatus);
|
||||
}
|
||||
else if (boundValue instanceof Map) {
|
||||
selected = mapCompare((Map) boundValue, candidateValue, bindStatus);
|
||||
selected = mapCompare((Map<?, ?>) boundValue, candidateValue, bindStatus);
|
||||
}
|
||||
if (!selected) {
|
||||
selected = exhaustiveCompare(boundValue, candidateValue, bindStatus.getEditor(), null);
|
||||
@@ -105,7 +105,7 @@ abstract class SelectedValueComparator {
|
||||
return selected;
|
||||
}
|
||||
|
||||
private static boolean collectionCompare(Collection boundCollection, Object candidateValue, BindStatus bindStatus) {
|
||||
private static boolean collectionCompare(Collection<?> boundCollection, Object candidateValue, BindStatus bindStatus) {
|
||||
try {
|
||||
if (boundCollection.contains(candidateValue)) {
|
||||
return true;
|
||||
@@ -117,7 +117,7 @@ abstract class SelectedValueComparator {
|
||||
return exhaustiveCollectionCompare(boundCollection, candidateValue, bindStatus);
|
||||
}
|
||||
|
||||
private static boolean mapCompare(Map boundMap, Object candidateValue, BindStatus bindStatus) {
|
||||
private static boolean mapCompare(Map<?, ?> boundMap, Object candidateValue, BindStatus bindStatus) {
|
||||
try {
|
||||
if (boundMap.containsKey(candidateValue)) {
|
||||
return true;
|
||||
@@ -130,7 +130,7 @@ abstract class SelectedValueComparator {
|
||||
}
|
||||
|
||||
private static boolean exhaustiveCollectionCompare(
|
||||
Collection collection, Object candidateValue, BindStatus bindStatus) {
|
||||
Collection<?> collection, Object candidateValue, BindStatus bindStatus) {
|
||||
|
||||
Map<PropertyEditor, Object> convertedValueCache = new HashMap<PropertyEditor, Object>(1);
|
||||
PropertyEditor editor = null;
|
||||
@@ -164,8 +164,8 @@ abstract class SelectedValueComparator {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (boundValue.getClass().isEnum()) {
|
||||
Enum boundEnum = (Enum) boundValue;
|
||||
else if (boundValue != null && boundValue.getClass().isEnum()) {
|
||||
Enum<?> boundEnum = (Enum<?>) boundValue;
|
||||
String enumCodeAsString = ObjectUtils.getDisplayString(boundEnum.name());
|
||||
if (enumCodeAsString.equals(candidateDisplayString)) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user