private static boolean isMultiReleaseJar(VirtualFile root) {
    VirtualFile manifest = root.findFileByRelativePath(JarFile.MANIFEST_NAME);
    if (manifest == null) return false;

    CachedValue<Boolean> value = manifest.getUserData(MULTI_RELEASE_KEY);
    if (value == null) {
      manifest.putUserData(MULTI_RELEASE_KEY, value = new CachedValueImpl<>(() -> {
        Boolean result = Boolean.FALSE;
        try (InputStream stream = manifest.getInputStream()) {
          result = Boolean.valueOf(new Manifest(stream).getMainAttributes().getValue(Attributes.Name.MULTI_RELEASE));
        }
        catch (IOException ignored) { }
        return CachedValueProvider.Result.create(result, manifest);
      }));
    }
    return value.getValue();
  }
private static boolean isMultiReleaseJar(VirtualFile root)