private Statement generatePropertiesMap() {
BlockStatement block = new BlockStatement();
for (String property : bindable.getBeanDescriptor().getProperties()) {
MetaMethod readMethod = bindable.getBeanDescriptor().getReadMethodForProperty(property);
if (readMethod != null && !readMethod.isFinal()) {
block.addStatement(agent("propertyTypes").invoke(
"put",
property,
Stmt.newObject(PropertyType.class, readMethod.getReturnType().asBoxed().asClass(),
readMethod.getReturnType().isAnnotationPresent(Bindable.class),
readMethod.getReturnType().isAssignableTo(List.class))