docs: @Override
      public Class<?> compile(String className, String code, ClassLoader classLoader, OutputStream os, long timestamp) {
          Class<?> cls = null;
          try {
              cls = ClassHelper.forName(className, classLoader);
          } catch (ClassNotFoundException e) {
              // ignore this exception
          } catch (LinkageError e) {
              // ignore this exception
          }
          if (cls != null) {
              return cls;
          }
  
          // to check cache
          byte[] bytes = cached(className, timestamp);
          // if has cached and timestamp is not changed will return a not null byte array
          if (bytes != null) {
              LoadableClassLoader loadableClassLoader = new LoadableClassLoader(classLoader);
              loadableClassLoader.defineNewClass(className, bytes, 0, bytes.length);
  
              try {
                  return loadableClassLoader.loadClass(className);
              } catch (ClassNotFoundException e) {
                  // ignore this exception
              }
          }
  
          cls = compiler.compile(className, code, classLoader, os, timestamp);
  
          cache(className, compiler.loadBytes(className), timestamp);
          return cls;
      }