private List<Field> initFields(Map<String, ? extends Expression<?>> args) { List<Field> fields = new ArrayList<Field>(args.size()); for (Map.Entry<String,? extends Expression<?>> entry : args.entrySet()) { String property = entry.getKey(); Expression<?> expr = entry.getValue(); Class<?> beanType = getType(); Field field = null; while (!beanType.equals(Object.class)) { try { field = beanType.getDeclaredField(property); field.setAccessible(true); if (!isAssignableFrom(field.getType(), expr.getType())) { typeMismatch(field.getType(), expr); } beanType = Object.class; } catch (SecurityException e) { // do nothing } catch (NoSuchFieldException e) { beanType = beanType.getSuperclass(); } } if (field == null) { propertyNotFound(expr, property); } fields.add(field); } return fields; }
private List<Method> initMethods(Map<String, ? extends Expression<?>> args) { try { List<Method> methods = new ArrayList<Method>(args.size()); BeanInfo beanInfo = Introspector.getBeanInfo(getType()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (Map.Entry<String, ? extends Expression<?>> entry : args.entrySet()) { String property = entry.getKey(); Expression<?> expr = entry.getValue(); Method setter = null; for (PropertyDescriptor prop : propertyDescriptors) { if (prop.getName().equals(property)) { setter = prop.getWriteMethod(); if (!isAssignableFrom(prop.getPropertyType(), expr.getType())) { typeMismatch(prop.getPropertyType(), expr); } break; } } if (setter == null) { propertyNotFound(expr, property); } methods.add(setter); } return methods; } catch (IntrospectionException e) { throw new RuntimeException(e.getMessage(), e); } }
private List<Field> initFields(Map<String, ? extends Expression<?>> args) { List<Field> fields = new ArrayList<Field>(args.size()); for (Map.Entry<String,? extends Expression<?>> entry : args.entrySet()) { String property = entry.getKey(); Expression<?> expr = entry.getValue(); Class<?> beanType = getType(); Field field = null; while (!beanType.equals(Object.class)) { try { field = beanType.getDeclaredField(property); field.setAccessible(true); if (!isAssignableFrom(field.getType(), expr.getType())) { typeMismatch(field.getType(), expr); } beanType = Object.class; } catch (SecurityException e) { // do nothing } catch (NoSuchFieldException e) { beanType = beanType.getSuperclass(); } } if (field == null) { propertyNotFound(expr, property); } fields.add(field); } return fields; }
private List<Method> initMethods(Map<String, ? extends Expression<?>> args) { try { List<Method> methods = new ArrayList<Method>(args.size()); BeanInfo beanInfo = Introspector.getBeanInfo(getType()); PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); for (Map.Entry<String, ? extends Expression<?>> entry : args.entrySet()) { String property = entry.getKey(); Expression<?> expr = entry.getValue(); Method setter = null; for (PropertyDescriptor prop : propertyDescriptors) { if (prop.getName().equals(property)) { setter = prop.getWriteMethod(); if (!isAssignableFrom(prop.getPropertyType(), expr.getType())) { typeMismatch(prop.getPropertyType(), expr); } break; } } if (setter == null) { propertyNotFound(expr, property); } methods.add(setter); } return methods; } catch (IntrospectionException e) { throw new RuntimeException(e.getMessage(), e); } }