code: public final synchronized ByteCodeClassLoader addClass(ClassDefinition classDef,
                                                           @Nullable Class<?> typeClass) {
      bytecodes.put(classDef.getClassName(), classDef.getBytecode());
      if (typeClass != null) {
        typeClasses.put(typeClass.getName(), typeClass);
      }
      return this;
    }
docs: Adds a class definition for this ClassLoader. When the class as given in the definition is
  loaded for the first time, the byte code inside the definition will be used to load the class.
  
  @param classDef The class definition
  @param typeClass An optional class that the given class definition is generated from. This is to make sure
  the type class is always loaded by the original ClassLoader when resolving the generated class
  as given by the class definition.