diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandlerBase.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandlerBase.java index 76bea2b36b85..c13a21e76b19 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandlerBase.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/jar/JarHandlerBase.java @@ -34,10 +34,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.ref.Reference; -import java.util.Enumeration; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -244,17 +241,18 @@ public class JarHandlerBase { @NotNull protected Map getEntriesMap() { synchronized (lock) { - Map map = myRelPathsToEntries != null ? myRelPathsToEntries.get() : null; + Map map = SoftReference.dereference(myRelPathsToEntries); + if (map == null) { final JarFile zip = getJar(); - LogUtil.debug(LOG, "mapping %s", myBasePath); - - map = new THashMap(); if (zip != null) { + LogUtil.debug(LOG, "mapping %s", myBasePath); + + map = new THashMap(); map.put("", new EntryInfo("", null, true)); final Enumeration entries = zip.entries(); while (entries.hasMoreElements()) { - JarFile.JarEntry entry = entries.nextElement(); + final JarFile.JarEntry entry = entries.nextElement(); final String name = entry.getName(); final boolean isDirectory = StringUtil.endsWithChar(name, '/'); getOrCreate(isDirectory ? name.substring(0, name.length() - 1) : name, isDirectory, map); @@ -262,7 +260,11 @@ public class JarHandlerBase { myRelPathsToEntries = new SoftReference>(map); } + else { + map = Collections.emptyMap(); + } } + return map; } }