class ReflectiveAttribute extends SimpleAttribute<O, A> {

    static Field getField(Class<?> cls, String fieldName) throws NoSuchFieldException {
        while (cls != null && cls != Object.class) {
            try {
                return cls.getDeclaredField(fieldName);
            }
            catch (NoSuchFieldException e) {
                cls = cls.getSuperclass();
            }
        }
        throw new NoSuchFieldException("No such field: " + fieldName);
    }

    public  ReflectiveAttribute(Class<O> objectType, Class<A> fieldType, String fieldName);

}