added forNestedType(MethodParameter) for resolution of nested parameter types for collection, array, and map parameter types

This commit is contained in:
Keith Donald
2011-01-06 21:59:34 +00:00
parent 61cfb96d95
commit 4c9731d572
6 changed files with 91 additions and 35 deletions

View File

@@ -364,14 +364,27 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
public TypeDescriptor getPropertyTypeDescriptor(String propertyName) throws BeansException {
try {
String actualPropertyName = PropertyAccessorUtils.getPropertyName(propertyName);
PropertyDescriptor pd = getPropertyDescriptorInternal(actualPropertyName);
PropertyTokenHolder tokens = getPropertyNameTokens(propertyName);
PropertyDescriptor pd = getPropertyDescriptorInternal(tokens.actualName);
if (pd != null) {
if (pd.getReadMethod() != null) {
return new PropertyTypeDescriptor(new MethodParameter(pd.getReadMethod(), -1), pd);
}
else if (pd.getWriteMethod() != null) {
return new PropertyTypeDescriptor(BeanUtils.getWriteMethodParameter(pd), pd);
if (tokens.keys != null) {
if (pd.getReadMethod() != null) {
return PropertyTypeDescriptor.forNestedType(new MethodParameter(pd.getReadMethod(), -1, tokens.keys.length), pd);
}
else if (pd.getWriteMethod() != null) {
MethodParameter methodParameter = new MethodParameter(BeanUtils.getWriteMethodParameter(pd));
for (int i = 0; i < tokens.keys.length; i++) {
methodParameter.increaseNestingLevel();
}
return PropertyTypeDescriptor.forNestedType(methodParameter, pd);
}
} else {
if (pd.getReadMethod() != null) {
return new PropertyTypeDescriptor(new MethodParameter(pd.getReadMethod(), -1), pd);
}
else if (pd.getWriteMethod() != null) {
return new PropertyTypeDescriptor(BeanUtils.getWriteMethodParameter(pd), pd);
}
}
}
}