docs: private synchronized static void fillCache(Class objectClass, Map<Class<? extends Annotation>, IModifier> processors) {
  
  		if (cache.containsKey(objectClass)) {
  			return;
  		}
  
  		final Map<Field, Set<Class<? extends Annotation>>> classCache = new HashMap<>();
  		cache.put(objectClass, classCache);
  
  		// for each field...
  		for (Field field : getAllFields(objectClass)) {
  
  			final Set<Class<? extends Annotation>> fieldCache = new HashSet<>();
  
  			// for each annotation on that field...
  			for (Annotation annotation : field.getAnnotations()) {
  
  				// cache the annotation type if there is a registered preprocessor for it
  				final Class<? extends Annotation> annotationType = annotation.annotationType();
  				if (processors.containsKey(annotationType)) {
  					fieldCache.add(annotationType);
  				}
  			}
  
  			if (!fieldCache.isEmpty()) {
  				classCache.put(field, fieldCache);
  			}
  		}
  	}