diff -r 8369cde9152a -r 53535e4e1b08 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Tue Oct 21 13:08:20 2014 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java Tue Oct 21 17:50:13 2014 -0700 @@ -25,19 +25,17 @@ package com.sun.tools.javac.file; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.CharBuffer; import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -48,8 +46,6 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; -import java.util.stream.Stream; import java.util.zip.ZipFile; import javax.lang.model.SourceVersion; @@ -58,8 +54,8 @@ import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; +import com.sun.tools.javac.file.RelativePath.RelativeFile; import com.sun.tools.javac.file.RelativePath.RelativeDirectory; -import com.sun.tools.javac.file.RelativePath.RelativeFile; import com.sun.tools.javac.util.BaseFileManager; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; @@ -98,15 +94,15 @@ protected boolean mmappedIO; protected boolean symbolFileEnabled; - protected enum SortFiles implements Comparator { + protected enum SortFiles implements Comparator { FORWARD { - public int compare(Path f1, Path f2) { - return f1.getFileName().compareTo(f2.getFileName()); + public int compare(File f1, File f2) { + return f1.getName().compareTo(f2.getName()); } }, REVERSE { - public int compare(Path f1, Path f2) { - return -f1.getFileName().compareTo(f2.getFileName()); + public int compare(File f1, File f2) { + return -f1.getName().compareTo(f2.getName()); } } } @@ -165,10 +161,10 @@ } public JavaFileObject getFileForInput(String name) { - return getRegularFile(Paths.get(name)); + return getRegularFile(new File(name)); } - public JavaFileObject getRegularFile(Path file) { + public JavaFileObject getRegularFile(File file) { return new RegularFileObject(this, file); } @@ -258,26 +254,25 @@ * Insert all files in subdirectory subdirectory of directory directory * which match fileKinds into resultList */ - private void listDirectory(Path directory, + private void listDirectory(File directory, RelativeDirectory subdirectory, Set fileKinds, boolean recurse, ListBuffer resultList) { - Path d = subdirectory.getFile(directory); + File d = subdirectory.getFile(directory); if (!caseMapCheck(d, subdirectory)) return; - - java.util.List files; - try (Stream s = Files.list(d)) { - files = (sortFiles == null ? s : s.sorted(sortFiles)).collect(Collectors.toList()); - } catch (IOException ignore) { + File[] files = d.listFiles(); + if (files == null) return; - } + + if (sortFiles != null) + Arrays.sort(files, sortFiles); - for (Path f: files) { - String fname = f.getFileName().toString(); - if (Files.isDirectory(f)) { + for (File f: files) { + String fname = f.getName(); + if (f.isDirectory()) { if (recurse && SourceVersion.isIdentifier(fname)) { listDirectory(directory, new RelativeDirectory(subdirectory, fname), @@ -288,7 +283,7 @@ } else { if (isValidFile(fname, fileKinds)) { JavaFileObject fe = - new RegularFileObject(this, fname, d.resolve(fname)); + new RegularFileObject(this, fname, new File(d, fname)); resultList.append(fe); } } @@ -331,7 +326,7 @@ * Insert all files in subdirectory subdirectory of container which * match fileKinds into resultList */ - private void listContainer(Path container, + private void listContainer(File container, RelativeDirectory subdirectory, Set fileKinds, boolean recurse, @@ -376,13 +371,13 @@ * ends in a string of characters with the same case as given name. * Ignore file separators in both path and name. */ - private boolean caseMapCheck(Path f, RelativePath name) { + private boolean caseMapCheck(File f, RelativePath name) { if (fileSystemIsCaseSensitive) return true; // Note that getCanonicalPath() returns the case-sensitive // spelled file name. String path; try { - path = f.toRealPath().toString(); + path = f.getCanonicalPath(); } catch (IOException ex) { return false; } @@ -419,8 +414,8 @@ } public class MissingArchive implements Archive { - final Path zipFileName; - public MissingArchive(Path name) { + final File zipFileName; + public MissingArchive(File name) { zipFileName = name; } public boolean contains(RelativePath name) { @@ -450,7 +445,7 @@ /** A directory of zip files already opened. */ - Map archives = new HashMap<>(); + Map archives = new HashMap<>(); private static final String[] symbolFileLocation = { "lib", "ct.sym" }; private static final RelativeDirectory symbolFilePrefix @@ -462,7 +457,7 @@ * fail over to the platform zip, and allow it to deal with a potentially * non compliant zip file. */ - protected Archive openArchive(Path zipFilename) throws IOException { + protected Archive openArchive(File zipFilename) throws IOException { try { return openArchive(zipFilename, contextUseOptimizedZip); } catch (IOException ioe) { @@ -476,17 +471,17 @@ /** Open a new zip file directory, and cache it. */ - private Archive openArchive(Path zipFileName, boolean useOptimizedZip) throws IOException { - Path origZipFileName = zipFileName; + private Archive openArchive(File zipFileName, boolean useOptimizedZip) throws IOException { + File origZipFileName = zipFileName; if (symbolFileEnabled && locations.isDefaultBootClassPathRtJar(zipFileName)) { - Path file = zipFileName.getParent().getParent(); // ${java.home} - if (file.getFileName().equals(Paths.get("jre"))) - file = file.getParent(); + File file = zipFileName.getParentFile().getParentFile(); // ${java.home} + if (new File(file.getName()).equals(new File("jre"))) + file = file.getParentFile(); // file == ${jdk.home} for (String name : symbolFileLocation) - file = file.resolve(name); + file = new File(file, name); // file == ${jdk.home}/lib/ct.sym - if (Files.exists(file)) + if (file.exists()) zipFileName = file; } @@ -499,7 +494,7 @@ String preindexCacheLocation = null; if (!useOptimizedZip) { - zdir = new ZipFile(zipFileName.toFile()); + zdir = new ZipFile(zipFileName); } else { usePreindexedCache = options.isSet("usezipindex"); preindexCacheLocation = options.get("java.io.tmpdir"); @@ -549,12 +544,12 @@ options.isSet("writezipindexfiles"))); } } - } catch (FileNotFoundException | NoSuchFileException ex) { + } catch (FileNotFoundException ex) { archive = new MissingArchive(zipFileName); } catch (ZipFileIndex.ZipFormatException zfe) { throw zfe; } catch (IOException ex) { - if (Files.exists(zipFileName)) + if (zipFileName.exists()) log.error("error.reading.file", zipFileName, getMessage(ex)); archive = new MissingArchive(zipFileName); } @@ -614,13 +609,13 @@ nullCheck(packageName); nullCheck(kinds); - Iterable path = asPaths(getLocation(location)); + Iterable path = getLocation(location); if (path == null) return List.nil(); RelativeDirectory subdirectory = RelativeDirectory.forPackage(packageName); ListBuffer results = new ListBuffer<>(); - for (Path directory : path) + for (File directory : path) listContainer(directory, subdirectory, kinds, recurse, results); return results.toList(); } @@ -630,7 +625,7 @@ file.getClass(); // null check location.getClass(); // null check // Need to match the path semantics of list(location, ...) - Iterable path = getLocationAsPaths(location); + Iterable path = getLocation(location); if (path == null) { return null; } @@ -690,16 +685,16 @@ } private JavaFileObject getFileForInput(Location location, RelativeFile name) throws IOException { - Iterable path = asPaths(getLocation(location)); + Iterable path = getLocation(location); if (path == null) return null; - for (Path dir: path) { + for (File dir: path) { Archive a = archives.get(dir); if (a == null) { if (fsInfo.isDirectory(dir)) { - Path f = name.getFile(dir); - if (Files.exists(f)) + File f = name.getFile(dir); + if (f.exists()) return new RegularFileObject(this, f); continue; } @@ -753,32 +748,29 @@ FileObject sibling) throws IOException { - Path dir; + File dir; if (location == CLASS_OUTPUT) { if (getClassOutDir() != null) { dir = getClassOutDir(); } else { - Path siblingDir = null; + File siblingDir = null; if (sibling != null && sibling instanceof RegularFileObject) { - siblingDir = ((RegularFileObject)sibling).file.getParent(); + siblingDir = ((RegularFileObject)sibling).file.getParentFile(); } - if (siblingDir == null) - return new RegularFileObject(this, Paths.get(fileName.basename())); - else - return new RegularFileObject(this, siblingDir.resolve(fileName.basename())); + return new RegularFileObject(this, new File(siblingDir, fileName.basename())); } } else if (location == SOURCE_OUTPUT) { dir = (getSourceOutDir() != null ? getSourceOutDir() : getClassOutDir()); } else { - Iterable path = locations.getLocation(location); + Iterable path = locations.getLocation(location); dir = null; - for (Path f: path) { + for (File f: path) { dir = f; break; } } - Path file = fileName.getFile(dir); // null-safe + File file = fileName.getFile(dir); // null-safe return new RegularFileObject(this, file); } @@ -793,7 +785,7 @@ else result = new ArrayList<>(); for (File f: files) - result.add(new RegularFileObject(this, nullCheck(f).toPath())); + result.add(new RegularFileObject(this, nullCheck(f))); return result; } @@ -804,29 +796,24 @@ @DefinedBy(Api.COMPILER) public void setLocation(Location location, - Iterable searchpath) + Iterable path) throws IOException { nullCheck(location); - locations.setLocation(location, asPaths(searchpath)); + locations.setLocation(location, path); } @DefinedBy(Api.COMPILER) public Iterable getLocation(Location location) { nullCheck(location); - return asFiles(locations.getLocation(location)); - } - - private Iterable getLocationAsPaths(Location location) { - nullCheck(location); return locations.getLocation(location); } - private Path getClassOutDir() { + private File getClassOutDir() { return locations.getOutputLocation(CLASS_OUTPUT); } - private Path getSourceOutDir() { + private File getSourceOutDir() { return locations.getOutputLocation(SOURCE_OUTPUT); } @@ -897,50 +884,4 @@ return s; return e.toString(); } - - /* Converters between files and paths. - * These are temporary until we can update the StandardJavaFileManager API. - */ - - static Iterable asPaths(final Iterable files) { - if (files == null) - return null; - - return () -> new Iterator() { - Iterator iter = files.iterator(); - - @Override - public boolean hasNext() { - return iter.hasNext(); - } - - @Override - public Path next() { - return iter.next().toPath(); - } - }; - } - - static Iterable asFiles(final Iterable paths) { - if (paths == null) - return null; - - return () -> new Iterator() { - Iterator iter = paths.iterator(); - - @Override - public boolean hasNext() { - return iter.hasNext(); - } - - @Override - public File next() { - return iter.next().toFile(); - } - }; - } - - static File asFile(Path path) { - return path == null ? null : path.toFile(); - } }