34
35 import javax.lang.model.SourceVersion;
36 import javax.tools.JavaFileManager;
37 import javax.tools.JavaFileManager.Location;
38 import javax.tools.JavaFileObject;
39 import javax.tools.StandardJavaFileManager;
40 import javax.tools.StandardLocation;
41
42 import com.sun.tools.javac.code.Scope.WriteableScope;
43 import com.sun.tools.javac.code.Symbol.ClassSymbol;
44 import com.sun.tools.javac.code.Symbol.Completer;
45 import com.sun.tools.javac.code.Symbol.CompletionFailure;
46 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
47 import com.sun.tools.javac.code.Symbol.PackageSymbol;
48 import com.sun.tools.javac.code.Symbol.TypeSymbol;
49 import com.sun.tools.javac.comp.Annotate;
50 import com.sun.tools.javac.file.JRTIndex;
51 import com.sun.tools.javac.file.JavacFileManager;
52 import com.sun.tools.javac.jvm.ClassReader;
53 import com.sun.tools.javac.jvm.Profile;
54 import com.sun.tools.javac.platform.PlatformDescription;
55 import com.sun.tools.javac.util.*;
56
57 import static javax.tools.StandardLocation.*;
58
59 import static com.sun.tools.javac.code.Flags.*;
60 import static com.sun.tools.javac.code.Kinds.Kind.*;
61
62 import static com.sun.tools.javac.main.Option.*;
63
64 import com.sun.tools.javac.util.Dependencies.CompletionCause;
65
66 /**
67 * This class provides operations to locate class definitions
68 * from the source and class files on the paths provided to javac.
69 *
70 * <p><b>This is NOT part of any supported API.
71 * If you write code that depends on this, you do so at your own risk.
72 * This code and its internal interfaces are subject to change or
73 * deletion without notice.</b>
74 */
75 public class ClassFinder {
76 /** The context key for the class finder. */
77 protected static final Context.Key<ClassFinder> classFinderKey = new Context.Key<>();
78
79 ClassReader reader;
80
81 private final Annotate annotate;
82
83 /** Switch: verbose output.
183 instance = new ClassFinder(context);
184 return instance;
185 }
186
187 /** Construct a new class finder. */
188 protected ClassFinder(Context context) {
189 context.put(classFinderKey, this);
190 reader = ClassReader.instance(context);
191 names = Names.instance(context);
192 syms = Symtab.instance(context);
193 fileManager = context.get(JavaFileManager.class);
194 dependencies = Dependencies.instance(context);
195 if (fileManager == null)
196 throw new AssertionError("FileManager initialization error");
197 diagFactory = JCDiagnostic.Factory.instance(context);
198
199 log = Log.instance(context);
200 annotate = Annotate.instance(context);
201
202 Options options = Options.instance(context);
203 verbose = options.isSet(VERBOSE);
204 cacheCompletionFailure = options.isUnset("dev");
205 preferSource = "source".equals(options.get("-Xprefer"));
206 userPathsFirst = options.isSet(XXUSERPATHSFIRST);
207 allowSigFiles = context.get(PlatformDescription.class) != null;
208
209 completionFailureName =
210 options.isSet("failcomplete")
211 ? names.fromString(options.get("failcomplete"))
212 : null;
213
214 moduleOverride = options.isSet(XMODULE) ? names.fromString(options.get(XMODULE))
215 : null;
216
217 // Temporary, until more info is available from the module system.
218 boolean useCtProps;
219 JavaFileManager fm = context.get(JavaFileManager.class);
220 if (fm instanceof JavacFileManager) {
221 JavacFileManager jfm = (JavacFileManager) fm;
222 useCtProps = jfm.isDefaultBootClassPath() && jfm.isSymbolFileEnabled();
223 } else if (fm.getClass().getName().equals("com.sun.tools.sjavac.comp.SmartFileManager")) {
224 useCtProps = !options.isSet("ignore.symbol.file");
225 } else {
226 useCtProps = false;
227 }
228 jrtIndex = useCtProps && JRTIndex.isAvailable() ? JRTIndex.getSharedInstance() : null;
229
230 profile = Profile.instance(context);
231 }
232
233
234 /************************************************************************
|
34
35 import javax.lang.model.SourceVersion;
36 import javax.tools.JavaFileManager;
37 import javax.tools.JavaFileManager.Location;
38 import javax.tools.JavaFileObject;
39 import javax.tools.StandardJavaFileManager;
40 import javax.tools.StandardLocation;
41
42 import com.sun.tools.javac.code.Scope.WriteableScope;
43 import com.sun.tools.javac.code.Symbol.ClassSymbol;
44 import com.sun.tools.javac.code.Symbol.Completer;
45 import com.sun.tools.javac.code.Symbol.CompletionFailure;
46 import com.sun.tools.javac.code.Symbol.ModuleSymbol;
47 import com.sun.tools.javac.code.Symbol.PackageSymbol;
48 import com.sun.tools.javac.code.Symbol.TypeSymbol;
49 import com.sun.tools.javac.comp.Annotate;
50 import com.sun.tools.javac.file.JRTIndex;
51 import com.sun.tools.javac.file.JavacFileManager;
52 import com.sun.tools.javac.jvm.ClassReader;
53 import com.sun.tools.javac.jvm.Profile;
54 import com.sun.tools.javac.main.Option;
55 import com.sun.tools.javac.platform.PlatformDescription;
56 import com.sun.tools.javac.util.*;
57
58 import static javax.tools.StandardLocation.*;
59
60 import static com.sun.tools.javac.code.Flags.*;
61 import static com.sun.tools.javac.code.Kinds.Kind.*;
62
63 import com.sun.tools.javac.util.Dependencies.CompletionCause;
64
65 /**
66 * This class provides operations to locate class definitions
67 * from the source and class files on the paths provided to javac.
68 *
69 * <p><b>This is NOT part of any supported API.
70 * If you write code that depends on this, you do so at your own risk.
71 * This code and its internal interfaces are subject to change or
72 * deletion without notice.</b>
73 */
74 public class ClassFinder {
75 /** The context key for the class finder. */
76 protected static final Context.Key<ClassFinder> classFinderKey = new Context.Key<>();
77
78 ClassReader reader;
79
80 private final Annotate annotate;
81
82 /** Switch: verbose output.
182 instance = new ClassFinder(context);
183 return instance;
184 }
185
186 /** Construct a new class finder. */
187 protected ClassFinder(Context context) {
188 context.put(classFinderKey, this);
189 reader = ClassReader.instance(context);
190 names = Names.instance(context);
191 syms = Symtab.instance(context);
192 fileManager = context.get(JavaFileManager.class);
193 dependencies = Dependencies.instance(context);
194 if (fileManager == null)
195 throw new AssertionError("FileManager initialization error");
196 diagFactory = JCDiagnostic.Factory.instance(context);
197
198 log = Log.instance(context);
199 annotate = Annotate.instance(context);
200
201 Options options = Options.instance(context);
202 verbose = options.isSet(Option.VERBOSE);
203 cacheCompletionFailure = options.isUnset("dev");
204 preferSource = "source".equals(options.get("-Xprefer"));
205 userPathsFirst = options.isSet(Option.XXUSERPATHSFIRST);
206 allowSigFiles = context.get(PlatformDescription.class) != null;
207
208 completionFailureName =
209 options.isSet("failcomplete")
210 ? names.fromString(options.get("failcomplete"))
211 : null;
212
213 moduleOverride = options.isSet(Option.XMODULE) ? names.fromString(options.get(Option.XMODULE))
214 : null;
215
216 // Temporary, until more info is available from the module system.
217 boolean useCtProps;
218 JavaFileManager fm = context.get(JavaFileManager.class);
219 if (fm instanceof JavacFileManager) {
220 JavacFileManager jfm = (JavacFileManager) fm;
221 useCtProps = jfm.isDefaultBootClassPath() && jfm.isSymbolFileEnabled();
222 } else if (fm.getClass().getName().equals("com.sun.tools.sjavac.comp.SmartFileManager")) {
223 useCtProps = !options.isSet("ignore.symbol.file");
224 } else {
225 useCtProps = false;
226 }
227 jrtIndex = useCtProps && JRTIndex.isAvailable() ? JRTIndex.getSharedInstance() : null;
228
229 profile = Profile.instance(context);
230 }
231
232
233 /************************************************************************
|