code: private void evaluateObject() {
          if (evaluatedClasses.contains(clazz)) {
              return;
          }
  
          Field[] fields = clazz.getDeclaredFields();
  
          for (Field field : fields) {
              if (field.isAnnotationPresent(ModelField.class)
              && !isAllowed(field)) {
                  throw new RuntimeException("Field '"
                          + field.getName()
                          + "' has type '" + field.getType().getSimpleName()
                          + "' that is not allowed!");
              }
          }
  
          evaluatedClasses.add(clazz);
      }
docs: Evaluates the object if not yet evaluated.
  
  @throws RuntimeException in case object don't follow the rules.