Allow auto grow for entries w/o default constructor in SpEL
Prior to this commit, The "auto grow" feature in SpEL expressions only worked for element types with a default constructor. For example, auto grow did not work for a list of BigDecimal elements. This commit inserts a null value in the list when no default constructor can be found for the element type. Closes gh-25367
This commit is contained in:
committed by
Sam Brannen
parent
d2e1150c79
commit
35c0ae7b0c
@@ -712,10 +712,10 @@ public class Indexer extends SpelNodeImpl {
|
||||
}
|
||||
TypeDescriptor elementType = this.collectionEntryDescriptor.getElementTypeDescriptor();
|
||||
try {
|
||||
Constructor<?> ctor = ReflectionUtils.accessibleConstructor(elementType.getType());
|
||||
Constructor<?> ctor = getConstructor(elementType.getType());
|
||||
int newElements = this.index - this.collection.size();
|
||||
while (newElements >= 0) {
|
||||
this.collection.add(ctor.newInstance());
|
||||
this.collection.add(ctor == null ? null : ctor.newInstance());
|
||||
newElements--;
|
||||
}
|
||||
}
|
||||
@@ -725,6 +725,15 @@ public class Indexer extends SpelNodeImpl {
|
||||
}
|
||||
}
|
||||
|
||||
Constructor<?> getConstructor(Class<?> type) {
|
||||
try {
|
||||
return ReflectionUtils.accessibleConstructor(type);
|
||||
}
|
||||
catch (Throwable ex) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isWritable() {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user