# HG changeset patch # User jjg # Date 1319063386 25200 # Node ID d2cbb77469ed69f9d0b6ced42d752c81f171e153 # Parent 366c233eb83881e8f656e53c337fa14e669b9c65 7101146: Paths should more directly managed by BaseFileManager Reviewed-by: mcimadamore diff -r 366c233eb838 -r d2cbb77469ed src/share/classes/com/sun/tools/javac/file/JavacFileManager.java --- a/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Oct 19 16:56:05 2011 +0100 +++ b/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java Wed Oct 19 15:29:46 2011 -0700 @@ -25,7 +25,6 @@ package com.sun.tools.javac.file; -import java.util.Comparator; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; @@ -41,6 +40,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.EnumSet; import java.util.HashMap; import java.util.Iterator; @@ -54,6 +54,7 @@ import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; +import com.sun.tools.javac.code.Lint; import com.sun.tools.javac.file.RelativePath.RelativeFile; import com.sun.tools.javac.file.RelativePath.RelativeDirectory; import com.sun.tools.javac.main.OptionName; @@ -83,10 +84,6 @@ return buffer.toString().toCharArray(); } - /** Encapsulates knowledge of paths - */ - private Paths paths; - private FSInfo fsInfo; private boolean contextUseOptimizedZip; @@ -154,13 +151,6 @@ @Override public void setContext(Context context) { super.setContext(context); - if (paths == null) { - paths = Paths.instance(context); - } else { - // Reuse the Paths object as it stores the locations that - // have been set with setLocation, etc. - paths.setContext(context); - } fsInfo = FSInfo.instance(context); @@ -179,7 +169,7 @@ @Override public boolean isDefaultBootClassPath() { - return paths.isDefaultBootClassPath(); + return searchPaths.isDefaultBootClassPath(); } public JavaFileObject getFileForInput(String name) { @@ -493,7 +483,7 @@ */ private Archive openArchive(File zipFileName, boolean useOptimizedZip) throws IOException { File origZipFileName = zipFileName; - if (!ignoreSymbolFile && paths.isDefaultBootClassPathRtJar(zipFileName)) { + if (!ignoreSymbolFile && searchPaths.isDefaultBootClassPathRtJar(zipFileName)) { File file = zipFileName.getParentFile().getParentFile(); // ${java.home} if (new File(file.getName()).equals(new File("jre"))) file = file.getParentFile(); @@ -780,7 +770,7 @@ } else if (location == SOURCE_OUTPUT) { dir = (getSourceOutDir() != null ? getSourceOutDir() : getClassOutDir()); } else { - Iterable path = paths.getPathForLocation(location); + Iterable path = searchPaths.getPathForLocation(location); dir = null; for (File f: path) { dir = f; @@ -815,7 +805,7 @@ throws IOException { nullCheck(location); - paths.lazy(); + searchPaths.lazy(); final File dir = location.isOutputLocation() ? getOutputDirectory(path) : null; @@ -824,7 +814,7 @@ else if (location == SOURCE_OUTPUT) sourceOutDir = getOutputLocation(dir, S); else - paths.setPathForLocation(location, path); + searchPaths.setPathForLocation(location, path); } // where private File getOutputDirectory(Iterable path) throws IOException { @@ -854,13 +844,13 @@ public Iterable getLocation(Location location) { nullCheck(location); - paths.lazy(); + searchPaths.lazy(); if (location == CLASS_OUTPUT) { return (getClassOutDir() == null ? null : List.of(getClassOutDir())); } else if (location == SOURCE_OUTPUT) { return (getSourceOutDir() == null ? null : List.of(getSourceOutDir())); } else - return paths.getPathForLocation(location); + return searchPaths.getPathForLocation(location); } private File getClassOutDir() { diff -r 366c233eb838 -r d2cbb77469ed src/share/classes/com/sun/tools/javac/file/Paths.java --- a/src/share/classes/com/sun/tools/javac/file/Paths.java Wed Oct 19 16:56:05 2011 +0100 +++ b/src/share/classes/com/sun/tools/javac/file/Paths.java Wed Oct 19 15:29:46 2011 -0700 @@ -41,7 +41,6 @@ import javax.tools.JavaFileManager.Location; import com.sun.tools.javac.code.Lint; -import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Options; @@ -61,21 +60,6 @@ */ public class Paths { - /** The context key for the todo list */ - protected static final Context.Key pathsKey = - new Context.Key(); - - /** Get the Paths instance for this context. - * @param context the context - * @return the Paths instance for this context - */ - public static Paths instance(Context context) { - Paths instance = context.get(pathsKey); - if (instance == null) - instance = new Paths(context); - return instance; - } - /** The log to use for warning output */ private Log log; @@ -88,17 +72,15 @@ /** Access to (possibly cached) file info */ private FSInfo fsInfo; - protected Paths(Context context) { - context.put(pathsKey, this); + public Paths() { pathsForLocation = new HashMap(16); - setContext(context); } - void setContext(Context context) { - log = Log.instance(context); - options = Options.instance(context); - lint = Lint.instance(context); - fsInfo = FSInfo.instance(context); + public void update(Log log, Options options, Lint lint, FSInfo fsInfo) { + this.log = log; + this.options = options; + this.lint = lint; + this.fsInfo = fsInfo; } /** Whether to warn about non-existent path elements */ diff -r 366c233eb838 -r d2cbb77469ed src/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java --- a/src/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java Wed Oct 19 16:56:05 2011 +0100 +++ b/src/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java Wed Oct 19 15:29:46 2011 -0700 @@ -25,9 +25,7 @@ package com.sun.tools.javac.nio; - import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -60,7 +58,6 @@ import static java.nio.file.FileVisitOption.*; import static javax.tools.StandardLocation.*; -import com.sun.tools.javac.file.Paths; import com.sun.tools.javac.util.BaseFileManager; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.List; @@ -125,9 +122,8 @@ * Set the context for JavacPathFileManager. */ @Override - protected void setContext(Context context) { + public void setContext(Context context) { super.setContext(context); - searchPaths = Paths.instance(context); } @Override @@ -272,7 +268,6 @@ private boolean inited = false; private Map pathsForLocation; - private Paths searchPaths; private static class PathsForLocation extends LinkedHashSet { private static final long serialVersionUID = 6788510222394486733L; diff -r 366c233eb838 -r d2cbb77469ed src/share/classes/com/sun/tools/javac/util/BaseFileManager.java --- a/src/share/classes/com/sun/tools/javac/util/BaseFileManager.java Wed Oct 19 16:56:05 2011 +0100 +++ b/src/share/classes/com/sun/tools/javac/util/BaseFileManager.java Wed Oct 19 15:29:46 2011 -0700 @@ -25,11 +25,6 @@ package com.sun.tools.javac.util; -import com.sun.tools.javac.code.Source; -import com.sun.tools.javac.main.JavacOption; -import com.sun.tools.javac.main.OptionName; -import com.sun.tools.javac.main.RecognizedOptions; -import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.IOException; @@ -54,6 +49,15 @@ import javax.tools.JavaFileObject; import javax.tools.JavaFileObject.Kind; +import com.sun.tools.javac.code.Lint; +import com.sun.tools.javac.code.Source; +import com.sun.tools.javac.file.FSInfo; +import com.sun.tools.javac.file.Paths; +import com.sun.tools.javac.main.JavacOption; +import com.sun.tools.javac.main.OptionName; +import com.sun.tools.javac.main.RecognizedOptions; +import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition; + /** * Utility methods for building a filemanager. * There are no references here to file-system specific objects such as @@ -63,15 +67,21 @@ protected BaseFileManager(Charset charset) { this.charset = charset; byteBufferCache = new ByteBufferCache(); + searchPaths = createPaths(); } /** * Set the context for JavacPathFileManager. */ - protected void setContext(Context context) { + public void setContext(Context context) { log = Log.instance(context); options = Options.instance(context); classLoaderClass = options.get("procloader"); + searchPaths.update(log, options, Lint.instance(context), FSInfo.instance(context)); + } + + protected Paths createPaths() { + return new Paths(); } /** @@ -88,6 +98,8 @@ protected String classLoaderClass; + protected Paths searchPaths; + protected Source getSource() { String sourceName = options.get(OptionName.SOURCE); Source source = null;