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 }