docs: public ClassLoader generateAndLoad(ClassLoader parent, File dexCache) throws IOException {
          if (dexCache == null) {
              String property = System.getProperty("dexmaker.dexcache");
              if (property != null) {
                  dexCache = new File(property);
              } else {
                  dexCache = new AppDataDirGuesser().guess();
                  if (dexCache == null) {
                      throw new IllegalArgumentException("dexcache == null (and no default could be"
                              + " found; consider setting the 'dexmaker.dexcache' system property)");
                  }
              }
          }
  
          File result = new File(dexCache, generateFileName());
          // Check that the file exists. If it does, return a DexClassLoader and skip all
          // the dex bytecode generation.
          if (result.exists()) {
              return generateClassLoader(result, dexCache, parent);
          }
  
          byte[] dex = generate();
  
          /*
           * This implementation currently dumps the dex to the filesystem. It
           * jars the emitted .dex for the benefit of Gingerbread and earlier
           * devices, which can't load .dex files directly.
           *
           * TODO: load the dex from memory where supported.
           */
          result.createNewFile();
          JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(result));
          JarEntry entry = new JarEntry(DexFormat.DEX_IN_JAR_NAME);
          entry.setSize(dex.length);
          jarOut.putNextEntry(entry);
          jarOut.write(dex);
          jarOut.closeEntry();
          jarOut.close();
          return generateClassLoader(result, dexCache, parent);
      }