Correctly set auto-growing array's element

Prior to this commit, the implementation of processKeyedProperty() in
AbstractNestablePropertyAccessor resulted in a
`java.lang.IllegalArgumentException: array element type mismatch` when
the property expression had more than one property key and the last key
should cause the array to grow automatically.

For example, given a property `int[][] multiArray` and property
expression `multiArray[1][3]`, the `processKeyedProperty()` method
created a new array object and assigned it to `multiArray`; whereas,
the new array object should have be assigned to `multiArray[1]`.

This commit fixes this issue.

Closes gh-26600
This commit is contained in:
nullzl
2021-02-24 11:19:58 +08:00
committed by Sam Brannen
parent 2ec7d5c785
commit 4530e36867
2 changed files with 10 additions and 2 deletions

View File

@@ -99,6 +99,12 @@ public class BeanWrapperAutoGrowingTests {
assertThat(bean.getMultiArray()[0][0]).isInstanceOf(Bean.class);
}
@Test
public void setPropertyValueAutoGrowMultiDimensionalArray() {
wrapper.setPropertyValue("multiArray[2][3]", new Bean());
assertThat(bean.getMultiArray()[2][3]).isInstanceOf(Bean.class);
}
@Test
public void getPropertyValueAutoGrowList() {
assertNotNull(wrapper.getPropertyValue("list[0]"));