src/share/classes/com/sun/tools/javac/file/ZipArchive.java

changeset 103
e571266ae14f
parent 57
aa67a5da66e3
child 333
7c2d6da61646
     1.1 --- a/src/share/classes/com/sun/tools/javac/file/ZipArchive.java	Fri Aug 22 11:46:29 2008 +0100
     1.2 +++ b/src/share/classes/com/sun/tools/javac/file/ZipArchive.java	Tue Aug 26 14:52:59 2008 -0700
     1.3 @@ -25,18 +25,8 @@
     1.4  
     1.5  package com.sun.tools.javac.file;
     1.6  
     1.7 +import java.io.File;
     1.8  import java.io.IOException;
     1.9 -import java.util.Enumeration;
    1.10 -import java.util.HashMap;
    1.11 -import java.util.Map;
    1.12 -import java.util.Set;
    1.13 -import java.util.zip.ZipEntry;
    1.14 -import java.util.zip.ZipFile;
    1.15 -import javax.tools.JavaFileObject;
    1.16 -
    1.17 -import com.sun.tools.javac.file.JavacFileManager.Archive;
    1.18 -import com.sun.tools.javac.util.List;
    1.19 -import java.io.File;
    1.20  import java.io.InputStream;
    1.21  import java.io.OutputStream;
    1.22  import java.io.Writer;
    1.23 @@ -44,13 +34,35 @@
    1.24  import java.nio.ByteBuffer;
    1.25  import java.nio.CharBuffer;
    1.26  import java.nio.charset.CharsetDecoder;
    1.27 +import java.util.Enumeration;
    1.28 +import java.util.HashMap;
    1.29 +import java.util.Map;
    1.30 +import java.util.Set;
    1.31 +import java.util.zip.ZipEntry;
    1.32 +import java.util.zip.ZipFile;
    1.33 +
    1.34 +import javax.tools.JavaFileObject;
    1.35 +
    1.36 +import com.sun.tools.javac.file.JavacFileManager.Archive;
    1.37 +import com.sun.tools.javac.file.RelativePath.RelativeDirectory;
    1.38 +import com.sun.tools.javac.file.RelativePath.RelativeFile;
    1.39 +import com.sun.tools.javac.util.List;
    1.40  
    1.41  public class ZipArchive implements Archive {
    1.42  
    1.43      public ZipArchive(JavacFileManager fm, ZipFile zdir) throws IOException {
    1.44 +        this(fm, zdir, true);
    1.45 +    }
    1.46 +
    1.47 +    protected ZipArchive(JavacFileManager fm, ZipFile zdir, boolean initMap) throws IOException {
    1.48          this.fileManager = fm;
    1.49          this.zdir = zdir;
    1.50 -        this.map = new HashMap<String,List<String>>();
    1.51 +        this.map = new HashMap<RelativeDirectory,List<String>>();
    1.52 +        if (initMap)
    1.53 +            initMap();
    1.54 +    }
    1.55 +
    1.56 +    protected void initMap() throws IOException {
    1.57          for (Enumeration<? extends ZipEntry> e = zdir.entries(); e.hasMoreElements(); ) {
    1.58              ZipEntry entry;
    1.59              try {
    1.60 @@ -67,7 +79,7 @@
    1.61      void addZipEntry(ZipEntry entry) {
    1.62          String name = entry.getName();
    1.63          int i = name.lastIndexOf('/');
    1.64 -        String dirname = name.substring(0, i+1);
    1.65 +        RelativeDirectory dirname = new RelativeDirectory(name.substring(0, i+1));
    1.66          String basename = name.substring(i+1);
    1.67          if (basename.length() == 0)
    1.68              return;
    1.69 @@ -78,26 +90,25 @@
    1.70          map.put(dirname, list);
    1.71      }
    1.72  
    1.73 -    public boolean contains(String name) {
    1.74 -        int i = name.lastIndexOf('/');
    1.75 -        String dirname = name.substring(0, i+1);
    1.76 -        String basename = name.substring(i+1);
    1.77 +    public boolean contains(RelativePath name) {
    1.78 +        RelativeDirectory dirname = name.dirname();
    1.79 +        String basename = name.basename();
    1.80          if (basename.length() == 0)
    1.81              return false;
    1.82          List<String> list = map.get(dirname);
    1.83          return (list != null && list.contains(basename));
    1.84      }
    1.85  
    1.86 -    public List<String> getFiles(String subdirectory) {
    1.87 +    public List<String> getFiles(RelativeDirectory subdirectory) {
    1.88          return map.get(subdirectory);
    1.89      }
    1.90  
    1.91 -    public JavaFileObject getFileObject(String subdirectory, String file) {
    1.92 -        ZipEntry ze = zdir.getEntry(subdirectory + file);
    1.93 +    public JavaFileObject getFileObject(RelativeDirectory subdirectory, String file) {
    1.94 +        ZipEntry ze = new RelativeFile(subdirectory, file).getZipEntry(zdir);
    1.95          return new ZipFileObject(this, file, ze);
    1.96      }
    1.97  
    1.98 -    public Set<String> getSubdirectories() {
    1.99 +    public Set<RelativeDirectory> getSubdirectories() {
   1.100          return map.keySet();
   1.101      }
   1.102  
   1.103 @@ -105,8 +116,12 @@
   1.104          zdir.close();
   1.105      }
   1.106  
   1.107 +    public String toString() {
   1.108 +        return "ZipArchive[" + zdir.getName() + "]";
   1.109 +    }
   1.110 +
   1.111      protected JavacFileManager fileManager;
   1.112 -    protected final Map<String,List<String>> map;
   1.113 +    protected final Map<RelativeDirectory,List<String>> map;
   1.114      protected final ZipFile zdir;
   1.115  
   1.116      /**
   1.117 @@ -118,7 +133,7 @@
   1.118          ZipArchive zarch;
   1.119          ZipEntry entry;
   1.120  
   1.121 -        public ZipFileObject(ZipArchive zarch, String name, ZipEntry entry) {
   1.122 +        protected ZipFileObject(ZipArchive zarch, String name, ZipEntry entry) {
   1.123              super(zarch.fileManager);
   1.124              this.zarch = zarch;
   1.125              this.name = name;
   1.126 @@ -222,11 +237,6 @@
   1.127          @Override
   1.128          protected String inferBinaryName(Iterable<? extends File> path) {
   1.129              String entryName = getZipEntryName();
   1.130 -            if (zarch instanceof SymbolArchive) {
   1.131 -                String prefix = ((SymbolArchive) zarch).prefix;
   1.132 -                if (entryName.startsWith(prefix))
   1.133 -                    entryName = entryName.substring(prefix.length());
   1.134 -            }
   1.135              return removeExtension(entryName).replace('/', '.');
   1.136          }
   1.137      }

mercurial