public static void iterateOverFields(Class<?> clz,Class<?> goUpto,ReflectionCallback<Field> callback) {
        try{
            for(Class<?> c=clz; c!=null && (goUpto==null || goUpto.isAssignableFrom(c)) ; c=c.getSuperclass()) {
                for(Field f : c.getDeclaredFields()) {
                    f.setAccessible(true);
                    if(callback.filter(f)) {
                        callback.consume(f);
                    }
                }
            }
        }catch (Exception e){
            throw new SwingObjectRunException(e, ReflectionUtils.class);
        }
	}