boolean (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(); }