private Type getType(Class<?> cl, String propertyName) throws NoSuchMethodException {
   try {
     Field field = cl.getDeclaredField(propertyName);
     return typeFactory.create(field.getType(), field.getGenericType());
   } catch (NoSuchFieldException e) {
     String getter = "get" + BeanUtils.capitalize(propertyName);
     String bgetter = "is" + BeanUtils.capitalize(propertyName);
     for (Method method : cl.getDeclaredMethods()) {
       if ((method.getName().equals(getter) || method.getName().equals(bgetter))
           && method.getParameterTypes().length == 0) {
         return typeFactory.create(method.getReturnType(), method.getGenericReturnType());
       }
     }
     if (cl.getSuperclass().equals(Object.class)) {
       throw new IllegalArgumentException(
           "No property found for " + cl.getName() + "." + propertyName);
     } else {
       return getType(cl.getSuperclass(), propertyName);
     }
   }
 }
예제 #2
0
  public static Type createType(
      String baseTypeStr,
      List<Type> typeParams,
      List<Integer> valueParams,
      List<Field> fieldParams) {
    final TajoDataTypes.Type baseType;

    try {
      baseType = TajoDataTypes.Type.valueOf(baseTypeStr);
    } catch (Throwable t) {
      throw new TajoInternalError(new UnsupportedException(baseTypeStr));
    }

    return TypeFactory.create(baseType, typeParams, valueParams, fieldParams);
  }