@Nullable
  <R, T1, T2> R iterateLoaders(@NotNull String resourcePath,
                               @NotNull LoaderIterator<R, T1, T2> iterator,
                               @NotNull T1 parameter,
                               @NotNull T2 parameter2,
                               @NotNull String shortName) {
    myLock.readLock().lock();
    Object o;
    try {
      IntObjectHashMap map = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION) ? myClassPackagesCache : myResourcePackagesCache;
      o = map.get(getPackageNameHash(resourcePath));
    }
    finally {
      myLock.readLock().unlock();
    }

    if (o == null) {
      return null;
    }
    if (o instanceof Loader) {
      return iterator.process((Loader)o, parameter, parameter2, shortName);
    }
    Loader[] loaders = (Loader[])o;
    for (Loader l : loaders) {
      R result = iterator.process(l, parameter, parameter2, shortName);
      if (result != null) {
        return result;
      }
    }
    return null;
  }
@Nullable
  <R, T1, T2> R iterateLoaders(@NotNull String resourcePath,
                               @NotNull LoaderIterator<R, T1, T2> iterator,
                               @NotNull T1 parameter,
                               @NotNull T2 parameter2,
                               @NotNull String shortName)