diff options
author | paltherr <paltherr@epfl.ch> | 2004-03-21 01:28:51 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2004-03-21 01:28:51 +0000 |
commit | 45028dc737cd1628c45db0fd00c666689876f706 (patch) | |
tree | 9d5d8a3b56b8a03ed8708e42b234e5d305058096 /sources/scalac | |
parent | bf519a01e3793f2d1d5efe98ee40e67d2a9618c0 (diff) | |
download | scala-45028dc737cd1628c45db0fd00c666689876f706.tar.gz scala-45028dc737cd1628c45db0fd00c666689876f706.tar.bz2 scala-45028dc737cd1628c45db0fd00c666689876f706.zip |
- Moved AbstractFile from scalac.util into scal...
- Moved AbstractFile from scalac.util into scala.tools.util
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/symtab/classfile/ClassParser.java | 1 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/PackageParser.java | 2 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/SymblParser.java | 1 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/UnPickle.java | 1 | ||||
-rw-r--r-- | sources/scalac/util/AbstractFile.java | 589 | ||||
-rw-r--r-- | sources/scalac/util/AbstractFileReader.java | 3 | ||||
-rw-r--r-- | sources/scalac/util/ClassPath.java | 2 |
7 files changed, 8 insertions, 591 deletions
diff --git a/sources/scalac/symtab/classfile/ClassParser.java b/sources/scalac/symtab/classfile/ClassParser.java index 4c40a6016c..e1d782a2a7 100644 --- a/sources/scalac/symtab/classfile/ClassParser.java +++ b/sources/scalac/symtab/classfile/ClassParser.java @@ -8,6 +8,7 @@ package scalac.symtab.classfile; +import scala.tools.util.AbstractFile; import scalac.*; import scalac.symtab.*; import scalac.util.*; diff --git a/sources/scalac/symtab/classfile/PackageParser.java b/sources/scalac/symtab/classfile/PackageParser.java index 3181702de5..2ed6430106 100644 --- a/sources/scalac/symtab/classfile/PackageParser.java +++ b/sources/scalac/symtab/classfile/PackageParser.java @@ -13,6 +13,7 @@ import java.util.Iterator; import java.util.HashMap; import java.util.HashSet; +import scala.tools.util.AbstractFile; import scala.tools.util.Position; import scalac.Global; @@ -21,7 +22,6 @@ import scalac.symtab.SourceCompleter; import scalac.symtab.Symbol; import scalac.symtab.SymbolLoader; import scalac.symtab.Type; -import scalac.util.AbstractFile; import scalac.util.Name; import scalac.util.SourceRepresentation; diff --git a/sources/scalac/symtab/classfile/SymblParser.java b/sources/scalac/symtab/classfile/SymblParser.java index 36abf84df7..fb826d853d 100644 --- a/sources/scalac/symtab/classfile/SymblParser.java +++ b/sources/scalac/symtab/classfile/SymblParser.java @@ -8,6 +8,7 @@ package scalac.symtab.classfile; +import scala.tools.util.AbstractFile; import scalac.*; import scalac.symtab.*; import scalac.util.*; diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java index db5edbeacc..74a7027424 100644 --- a/sources/scalac/symtab/classfile/UnPickle.java +++ b/sources/scalac/symtab/classfile/UnPickle.java @@ -11,6 +11,7 @@ package scalac.symtab.classfile; import java.util.HashMap; import java.io.IOException; import java.io.PrintStream; +import scala.tools.util.AbstractFile; import scala.tools.util.Position; import scalac.*; import scalac.atree.AConstant; diff --git a/sources/scalac/util/AbstractFile.java b/sources/scalac/util/AbstractFile.java deleted file mode 100644 index 7069df868b..0000000000 --- a/sources/scalac/util/AbstractFile.java +++ /dev/null @@ -1,589 +0,0 @@ -/* ____ ____ ____ ____ ______ *\ -** / __// __ \/ __// __ \/ ____/ SOcos COmpiles Scala ** -** __\_ \/ /_/ / /__/ /_/ /\_ \ (c) 2002, LAMP/EPFL ** -** /_____/\____/\___/\____/____/ ** -** ** -** $Id$ -\* */ - -package scalac.util; - -import java.io.*; -import java.util.*; -import java.util.zip.*; -import java.util.jar.*; - -public abstract class AbstractFile { - - /** separator - */ - protected char separator = File.separatorChar; - - /** table of all opened jar-files - */ - protected static Hashtable opened = new Hashtable(); - - /** get name of the file - */ - public abstract String getName(); - - /** get path of the file - */ - public abstract String getPath(); - - /** does the file exist? - */ - public abstract boolean exists(); - - /** is the file a directory? - */ - public abstract boolean isDirectory(); - - /** date file was last modified - */ - public abstract long lastModified(); - - /** read content of the file into a byte[] buffer - */ - public abstract byte[] read() throws IOException; - - /** list contents of a directory - */ - public abstract String[] list() throws IOException; - - /** open a new file - */ - public abstract AbstractFile open(String name); - - /** return an input stream for the file - */ - public InputStream getInputStream() throws IOException { - return new ByteArrayInputStream(read()); - } - - /** open file 'name' in directory 'dirname' - */ - public static AbstractFile open(String dirname, String name) { - AbstractFile res; - if (dirname == null) - res = new PlainFile(new File(name)); - else if (dirname.endsWith(".zip")) { - AbstractFile dir = (AbstractFile)opened.get(dirname); - if (dir == null) { - dir = new ZipDir(new File(dirname)); - if (dir.isDirectory()) - opened.put(dirname, dir); - } - res = (name == null) ? dir : dir.open(name); - } else if (dirname.endsWith(".jar")) { - AbstractFile dir = (AbstractFile)opened.get(dirname); - if (dir == null) { - dir = new JarArchive(new File(dirname)); - if (dir.isDirectory()) - opened.put(dirname, dir); - } - res = (name == null) ? dir : dir.open(name); - } else if (name == null) - res = new PlainFile(new File(dirname)); - else - res = new PlainFile(new File(dirname, name)); - if (!res.exists()) - res = null; - return res; - } - - /** create file given by a fully qualified name from root directory `outdir'; - * create intermediate directories if they do not exist already - */ - public static File create(File outdir, String name, - String suffix) throws IOException { - int start = 0; - int end = name.indexOf('.'); - while (end >= start) { - outdir = new File(outdir, name.substring(start, end)); - if (!outdir.exists()) - outdir.mkdir(); - start = end + 1; - end = name.indexOf('.', start); - } - return new File(outdir, name.substring(start) + suffix); - } -} - -class PlainFile extends AbstractFile { - File f; - - PlainFile(File f) { - this.f = f; - } - - public String getName() { - return f.getName(); - } - - public String getPath() { - return f.getPath(); - } - - public boolean exists() { - return f.exists(); - } - - public boolean isDirectory() { - return f.isDirectory(); - } - - public long lastModified() { - return f.lastModified(); - } - - public byte[] read() throws IOException { - FileInputStream in = new FileInputStream(f); - int rest = (int)f.length(); - byte[] buf = new byte[rest]; - do { - int res = in.read(buf, buf.length - rest, rest); - if (res == -1) - throw new IOException("read error"); - rest -= res; - } while (rest > 0); - in.close(); - return buf; - } - - public String[] list() throws IOException { - File[] fs = f.listFiles(); - if (fs == null) - return new String[0]; - String[] res = new String[fs.length]; - for (int i = 0; i < fs.length; i++) { - res[i] = fs[i].getName(); - if (fs[i].isDirectory() && - !res[i].endsWith("/")) - res[i] = res[i] + "/"; - } - return res; - } - - public AbstractFile open(String name) { - return new PlainFile(new File(f, name)); - } -} - -class ZippedFile extends AbstractFile { - ZipDir dir; - ZipEntry zipEntry; - - { - separator = '/'; - } - - ZippedFile(ZipDir dir, String name) { - this.dir = dir; - if (dir.zipFile != null) { - name = name.replace(File.separatorChar, separator); - zipEntry = this.dir.zipFile.getEntry(name); - if (zipEntry == null) - zipEntry = this.dir.zipFile.getEntry(name + separator); - } - } - - public String getName() { - return zipEntry.getName(); - } - - public String getPath() { - return dir.getPath() + "(" + zipEntry.getName() + ")"; - } - - public boolean exists() { - return (zipEntry != null); - } - - public boolean isDirectory() { - return zipEntry.isDirectory(); - } - - public long lastModified() { - return zipEntry.getTime(); - } - - public byte[] read() throws IOException { - InputStream in = dir.zipFile.getInputStream(zipEntry); - int rest = (int)zipEntry.getSize(); - byte[] buf = new byte[rest]; - do { - int res = in.read(buf, buf.length - rest, rest); - if (res == -1) - throw new IOException("read error"); - rest -= res; - } while (rest > 0); - in.close(); - return buf; - } - - public String[] list() throws IOException { - if (!isDirectory()) - throw new IOException("not a directory"); - return dir.list(zipEntry.getName()); - } - - public AbstractFile open(String name) { - String pathname = zipEntry.getName(); - return new ZippedFile(dir, pathname + name); - } -} - -class ZipDir extends AbstractFile { - File f; - ZipFile zipFile; - - { - separator = '/'; - } - - ZipDir(File f) { - this.f = f; - try { - zipFile = new ZipFile(f); - } catch (ZipException e) { - } catch (IOException e) {} - } - - public String getName() { - return f.getName(); - } - - public String getPath() { - return f.getPath(); - } - - public boolean exists() { - return (zipFile != null); - } - - public boolean isDirectory() { - return (zipFile != null); - } - - public long lastModified() { - return -1; - } - - public byte[] read() throws IOException { - throw new IOException("cannot read directory"); - } - - public String[] list(String prefix) { - int n = 0; - for (Enumeration enum = zipFile.entries(); enum.hasMoreElements();) { - ZipEntry e = (ZipEntry)enum.nextElement(); - if (e.getName().startsWith(prefix)) { - String candidate = e.getName().substring(prefix.length()); - if (candidate.indexOf(separator) < 0) - n++; - } - } - String[] filenames = new String[n]; - n = 0; - for (Enumeration enum = zipFile.entries(); enum.hasMoreElements();) { - ZipEntry e = (ZipEntry)enum.nextElement(); - if (e.getName().startsWith(prefix)) { - String candidate = e.getName().substring(prefix.length()); - if (candidate.indexOf(separator) < 0) - filenames[n++] = candidate; - } - } - return filenames; - } - - public String[] list() throws IOException { - return list(""); - } - - public AbstractFile open(String name) { - return new ZippedFile(this, name); - } -} - -final class JarArchive extends AbstractFile { - File f; - JarFile jarFile; - HashMap entries; - - public final static String[] EMPTY = new String[0]; - - - JarArchive(File f) { - try { - jarFile = new JarFile(this.f = f); - } - catch (ZipException e) {} - catch (IOException e) {} - } - - public String getName() { - return f.getName(); - } - - public String getPath() { - return f.getPath(); - } - - public boolean exists() { - return jarFile != null; - } - - public boolean isDirectory() { - return jarFile != null; - } - - public long lastModified() { - return -1; - } - - public byte[] read() throws IOException { - throw new IOException("cannot read archive"); - } - - private void load() { - entries = new HashMap(); - if (jarFile == null) - return; - Enumeration enum = jarFile.entries(); - while (enum.hasMoreElements()) { - String candidate = ((JarEntry)enum.nextElement()).getName(); - int i = candidate.indexOf('/'); - int j = 0; - HashMap files = entries; - while (i >= 0) { - String dirname = candidate.substring(j, j = (i + 1)); - JarDirEntry dir = (JarDirEntry)files.get(dirname); - if (dir == null) - files.put(dirname, dir = new JarDirEntry( - candidate.substring(0, j))); - files = dir.entries; - i = candidate.indexOf('/', j); - } - if (j < (candidate.length() - 1)) { - String filename = candidate.substring(j); - JarFileEntry file = (JarFileEntry)files.get(filename); - if (file == null) - files.put(filename, new JarFileEntry(candidate)); - } - } - } - - public String[] list(String prefix) { - prefix = prefix.replace(File.separatorChar, '/'); - if (entries == null) - load(); - int i = prefix.indexOf('/'); - int j = 0; - HashMap files = entries; - while (i >= 0) { - String dirname = prefix.substring(j, j = (i + 1)); - JarDirEntry dir = (JarDirEntry)files.get(dirname); - if (dir == null) - return EMPTY; - files = dir.entries; - i = prefix.indexOf('/', j); - } - if (j < (prefix.length() - 1)) { - String filename = prefix.substring(j); - return (files.get(filename) != null) ? new String[]{prefix} - : EMPTY; - } else - return (String[])files.keySet().toArray(new String[files.size()]); - } - - public String[] list() throws IOException { - return list(""); - } - - public AbstractFile open(String name) { - if (entries == null) - load(); - name = name.replace(File.separatorChar, '/'); - int i = name.indexOf('/'); - int j = 0; - int namelen = name.length(); - HashMap files = entries; - while (i >= 0) { - String dirname = name.substring(j, j = (i + 1)); - if (files != null) { - JarDirEntry dir = (JarDirEntry)files.get(dirname); - if (dir == null) - files = null; - else if (j == namelen) - return dir; - else - files = dir.entries; - } - i = name.indexOf('/', j); - } - if (j < (namelen - 1)) { - String filename = name.substring(j); - if (files == null) - return new NoJarFileEntry(name); - JarFileEntry file = (JarFileEntry)files.get(filename); - if (file == null) - return new NoJarFileEntry(name); - else - return file; - } else - return new NoJarDirEntry(name); - } - - static class NoJarDirEntry extends AbstractFile { - String name; - - NoJarDirEntry(String name) { - this.name = name; - } - - public String getName() { - return name.substring( - name.lastIndexOf('/', name.length() - 2) + 1); - } - - public String getPath() { - return name; - } - - public String getFullName() { - return name; - } - - public boolean exists() { - return false; - } - - public boolean isDirectory() { - return true; - } - - public long lastModified() { - return -1; - } - - public String[] list() throws IOException { - throw new IOException("not a directory"); - } - - public byte[] read() throws IOException { - throw new IOException("cannot read archive"); - } - - public AbstractFile open(String fname) { - throw new Error("cannot open archive entry"); - } - } - - final class JarDirEntry extends NoJarDirEntry { - HashMap entries; - - JarDirEntry(String name) { - super(name); - this.entries = new HashMap(); - } - - public String getPath() { - return JarArchive.this.getPath() + "(" + name + ")"; - } - - public boolean exists() { - return true; - } - - public String[] list() throws IOException { - return JarArchive.this.list(name); - } - - public AbstractFile open(String fname) { - fname = fname.replace(File.separatorChar, '/'); - return JarArchive.this.open(name + fname); - } - } - - static class NoJarFileEntry extends AbstractFile { - String name; - - NoJarFileEntry(String name) { - this.name = name; - } - - public String getName() { - return name.substring( - name.lastIndexOf('/', name.length() - 1) + 1); - } - - public String getFullName() { - return name; - } - - public String getPath() { - return name; - } - - public boolean exists() { - return false; - } - - public boolean isDirectory() { - return false; - } - - public long lastModified() { - return -1; - } - - public String[] list() throws IOException { - throw new IOException("not a directory"); - } - - public byte[] read() throws IOException { - throw new IOException("cannot read archive"); - } - - public AbstractFile open(String fname) { - throw new Error("not a directory"); - } - } - - final class JarFileEntry extends NoJarFileEntry { - - JarFileEntry(String name) { - super(name); - } - - public String getPath() { - return JarArchive.this.getPath() + "(" + name + ")"; - } - - public boolean exists() { - return true; - } - - public long lastModified() { - return jarFile.getJarEntry(name).getTime(); - } - - public byte[] read() throws IOException { - JarEntry jarEntry = jarFile.getJarEntry(name); - if (jarEntry == null) - throw new IOException("unable to read " + name); - InputStream in = jarFile.getInputStream(jarEntry); - int rest = (int)jarEntry.getSize(); - byte[] buf = new byte[rest]; - do { - int res = in.read(buf, buf.length - rest, rest); - if (res == -1) - throw new IOException("read error"); - rest -= res; - } while (rest > 0); - in.close(); - return buf; - } - } -} diff --git a/sources/scalac/util/AbstractFileReader.java b/sources/scalac/util/AbstractFileReader.java index 3ecd385dc6..bf3d6f437d 100644 --- a/sources/scalac/util/AbstractFileReader.java +++ b/sources/scalac/util/AbstractFileReader.java @@ -8,8 +8,9 @@ package scalac.util; -import java.io.*; +import java.io.IOException; +import scala.tools.util.AbstractFile; public class AbstractFileReader { diff --git a/sources/scalac/util/ClassPath.java b/sources/scalac/util/ClassPath.java index bd2a0665e9..6e68be350a 100644 --- a/sources/scalac/util/ClassPath.java +++ b/sources/scalac/util/ClassPath.java @@ -11,6 +11,8 @@ package scalac.util; import java.io.*; import java.util.*; +import scala.tools.util.AbstractFile; + public class ClassPath { |