code: public Class<T> build() {
  		synchronized (classLoader) {
  			AsmClassKey<?> key = new AsmClassKey<>(mainClass, otherClasses, fields, methods, staticMethods);
  			Class<?> cachedClass = classLoader.getClassByKey(key);
  
  			if (cachedClass != null) {
  				logger.trace("Fetching {} for key {} from cache", cachedClass, key);
  				return (Class<T>) cachedClass;
  			}
  
  			Class<T> newClass = defineNewClass(key);
  			for (String staticField : staticConstants.keySet()) {
  				Object staticValue = staticConstants.get(staticField);
  				try {
  					Field field = newClass.getField(staticField);
  					field.set(null, staticValue);
  				} catch (NoSuchFieldException | IllegalAccessException e) {
  					throw new AssertionError(e);
  				}
  			}
  			return newClass;
  		}
  	}
docs: endregion