docs: protected <T> T getFieldValue(Object object, Field field, Class<T> clazz) throws VisitorException {
  		boolean reprotect = false;
  		if(object == null) {
  			return null;
  		}
  		try {
  			if(!field.isAccessible()) {
  				field.setAccessible(true);
  				reprotect = true;
  			}
  			Object value = field.get(object);
  			if(value != null) {
  				logger.trace("field '{}' has value '{}'", field.getName(), value);
  				return clazz.cast(value);
  			}			
  		} catch (IllegalArgumentException e) {
  			logger.error("trying to access field '{}' on invalid object of class '{}'", field.getName(), object.getClass().getSimpleName());
  			throw new VisitorException("Trying to access field on invalid object", e);
  		} catch (IllegalAccessException e) {
  			logger.error("illegal access to class '{}'", object.getClass().getSimpleName());
  			throw new VisitorException("Illegal access to class", e);
  		} finally {
  			if(reprotect) {
  				field.setAccessible(false);
  			}
  		}
  		return null;
  	}