public @Nullable Class<?> findClass(String className,
                                      String fileName,
                                      long packageNameHash,
                                      ClassDataConsumer classDataConsumer) throws IOException {
    long start = classLoading.startTiming();
    try {
      int i;
      if (useCache) {
        boolean allUrlsWereProcessedBeforeAccessingCache = allUrlsWereProcessed;
        int lastLoaderProcessedBeforeAccessingCache = lastLoaderProcessed.get();
        Loader[] loaders = cache.getClassLoadersByPackageNameHash(packageNameHash);
        if (loaders != null) {
          for (Loader loader : loaders) {
            Class<?> result = findClassInLoader(fileName, className, classDataConsumer, loader);
            if (result != null) {
              return result;
            }
          }
        }

        if (allUrlsWereProcessedBeforeAccessingCache) {
          if (isNewClassLoadingEnabled) {
            i = 0;
          }
          else {
            return null;
          }
        }
        else {
          i = lastLoaderProcessedBeforeAccessingCache;
        }
      }
      else {
        i = 0;
      }
      return findClassWithoutCache(className, fileName, i, classDataConsumer);
    }
    finally {
      classLoading.record(start, className);
    }
  }
public @Nullable Class<?> findClass(String className,
                                      String fileName,
                                      long packageNameHash,
                                      ClassDataConsumer classDataConsumer)