use less space for storing children of a CoreJarVirtualFile, since most files don...
authorDmitry Jemerov <yole@jetbrains.com>
Wed, 5 Aug 2015 13:43:16 +0000 (15:43 +0200)
committerDmitry Jemerov <yole@jetbrains.com>
Wed, 5 Aug 2015 13:44:10 +0000 (15:44 +0200)
platform/core-impl/src/com/intellij/openapi/vfs/impl/jar/CoreJarVirtualFile.java

index affb764a4e75113a5f36f99f5198f26ccff419fa..49e717579ef74cfc84fd85362859b0b6f6142922 100644 (file)
@@ -20,13 +20,13 @@ import com.intellij.openapi.util.io.BufferExposingByteArrayInputStream;
 import com.intellij.openapi.util.io.FileAttributes;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.openapi.vfs.VirtualFileSystem;
+import com.intellij.util.SmartList;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -37,7 +37,7 @@ public class CoreJarVirtualFile extends VirtualFile {
   private final String myName;
   private final FileAttributes myEntry;
   private final VirtualFile myParent;
-  private final List<VirtualFile> myChildren = new ArrayList<VirtualFile>();
+  private List<VirtualFile> myChildren = null;
 
   public CoreJarVirtualFile(@NotNull CoreJarHandler handler, @NotNull String name, @NotNull FileAttributes entry, @Nullable CoreJarVirtualFile parent) {
     myHandler = handler;
@@ -46,6 +46,9 @@ public class CoreJarVirtualFile extends VirtualFile {
     myParent = parent;
 
     if (parent != null) {
+      if (parent.myChildren == null) {
+        parent.myChildren = new SmartList<VirtualFile>();
+      }
       parent.myChildren.add(this);
     }
   }
@@ -100,6 +103,9 @@ public class CoreJarVirtualFile extends VirtualFile {
 
   @Override
   public VirtualFile[] getChildren() {
+    if (myChildren == null) {
+      return VirtualFile.EMPTY_ARRAY;
+    }
     return myChildren.toArray(new VirtualFile[myChildren.size()]);
   }