31 import java.io.PrintWriter;
32 import java.io.Writer;
33 import java.net.URL;
34 import java.nio.file.Files;
35 import java.nio.file.NoSuchFileException;
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 import java.security.CodeSource;
39 import java.security.DigestInputStream;
40 import java.security.MessageDigest;
41 import java.security.NoSuchAlgorithmException;
42 import java.text.SimpleDateFormat;
43 import java.util.Calendar;
44 import java.util.Set;
45 import java.util.regex.Matcher;
46 import java.util.regex.Pattern;
47
48 import javax.tools.JavaFileManager;
49
50 import com.sun.tools.javac.api.BasicJavacTask;
51 import com.sun.tools.javac.file.CacheFSInfo;
52 import com.sun.tools.javac.file.BaseFileManager;
53 import com.sun.tools.javac.file.JavacFileManager;
54 import com.sun.tools.javac.jvm.Target;
55 import com.sun.tools.javac.platform.PlatformDescription;
56 import com.sun.tools.javac.processing.AnnotationProcessingError;
57 import com.sun.tools.javac.resources.CompilerProperties.Errors;
58 import com.sun.tools.javac.util.*;
59 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticInfo;
60 import com.sun.tools.javac.util.Log.PrefixKind;
61 import com.sun.tools.javac.util.Log.WriterKind;
62
63 import jdk.internal.opt.CommandLine;
64 import jdk.internal.opt.CommandLine.UnmatchedQuote;
65
66 /** This class provides a command line interface to the javac compiler.
67 *
68 * <p><b>This is NOT part of any supported API.
69 * If you write code that depends on this, you do so at your own risk.
70 * This code and its internal interfaces are subject to change or
283 return Result.OK;
284
285 // init Dependencies
286 if (options.isSet("debug.completionDeps")) {
287 Dependencies.GraphDependencies.preRegister(context);
288 }
289
290 BasicJavacTask t = (BasicJavacTask) BasicJavacTask.instance(context);
291
292 // init plugins
293 Set<List<String>> pluginOpts = args.getPluginOpts();
294 t.initPlugins(pluginOpts);
295
296 // init multi-release jar handling
297 if (fileManager.isSupportedOption(Option.MULTIRELEASE.primaryName) == 1) {
298 Target target = Target.instance(context);
299 List<String> list = List.of(target.multiReleaseValue());
300 fileManager.handleOption(Option.MULTIRELEASE.primaryName, list.iterator());
301 }
302
303 // init JavaCompiler
304 JavaCompiler comp = JavaCompiler.instance(context);
305
306 // init doclint
307 List<String> docLintOpts = args.getDocLintOpts();
308 if (!docLintOpts.isEmpty()) {
309 t.initDocLint(docLintOpts);
310 }
311
312 if (options.get(Option.XSTDOUT) != null) {
313 // Stdout reassigned - ask compiler to close it when it is done
314 comp.closeables = comp.closeables.prepend(log.getWriter(WriterKind.NOTICE));
315 }
316
317 boolean printArgsToFile = options.isSet("printArgsToFile");
318 try {
319 comp.compile(args.getFileObjects(), args.getClassNames(), null, List.nil());
320
321 if (log.expectDiagKeys != null) {
322 if (log.expectDiagKeys.isEmpty()) {
|
31 import java.io.PrintWriter;
32 import java.io.Writer;
33 import java.net.URL;
34 import java.nio.file.Files;
35 import java.nio.file.NoSuchFileException;
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 import java.security.CodeSource;
39 import java.security.DigestInputStream;
40 import java.security.MessageDigest;
41 import java.security.NoSuchAlgorithmException;
42 import java.text.SimpleDateFormat;
43 import java.util.Calendar;
44 import java.util.Set;
45 import java.util.regex.Matcher;
46 import java.util.regex.Pattern;
47
48 import javax.tools.JavaFileManager;
49
50 import com.sun.tools.javac.api.BasicJavacTask;
51 import com.sun.tools.javac.code.Preview;
52 import com.sun.tools.javac.file.CacheFSInfo;
53 import com.sun.tools.javac.file.BaseFileManager;
54 import com.sun.tools.javac.file.JavacFileManager;
55 import com.sun.tools.javac.jvm.Target;
56 import com.sun.tools.javac.platform.PlatformDescription;
57 import com.sun.tools.javac.processing.AnnotationProcessingError;
58 import com.sun.tools.javac.resources.CompilerProperties.Errors;
59 import com.sun.tools.javac.util.*;
60 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticInfo;
61 import com.sun.tools.javac.util.Log.PrefixKind;
62 import com.sun.tools.javac.util.Log.WriterKind;
63
64 import jdk.internal.opt.CommandLine;
65 import jdk.internal.opt.CommandLine.UnmatchedQuote;
66
67 /** This class provides a command line interface to the javac compiler.
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
284 return Result.OK;
285
286 // init Dependencies
287 if (options.isSet("debug.completionDeps")) {
288 Dependencies.GraphDependencies.preRegister(context);
289 }
290
291 BasicJavacTask t = (BasicJavacTask) BasicJavacTask.instance(context);
292
293 // init plugins
294 Set<List<String>> pluginOpts = args.getPluginOpts();
295 t.initPlugins(pluginOpts);
296
297 // init multi-release jar handling
298 if (fileManager.isSupportedOption(Option.MULTIRELEASE.primaryName) == 1) {
299 Target target = Target.instance(context);
300 List<String> list = List.of(target.multiReleaseValue());
301 fileManager.handleOption(Option.MULTIRELEASE.primaryName, list.iterator());
302 }
303
304 // pass preview mode to the file manager:
305 if (fileManager.isSupportedOption(Option.PREVIEWMODE.primaryName) == 1) {
306 Preview preview = Preview.instance(context);
307 fileManager.handleOption(Option.PREVIEWMODE.primaryName, List.of(String.valueOf(preview.isEnabled())).iterator());
308 }
309
310 // init JavaCompiler
311 JavaCompiler comp = JavaCompiler.instance(context);
312
313 // init doclint
314 List<String> docLintOpts = args.getDocLintOpts();
315 if (!docLintOpts.isEmpty()) {
316 t.initDocLint(docLintOpts);
317 }
318
319 if (options.get(Option.XSTDOUT) != null) {
320 // Stdout reassigned - ask compiler to close it when it is done
321 comp.closeables = comp.closeables.prepend(log.getWriter(WriterKind.NOTICE));
322 }
323
324 boolean printArgsToFile = options.isSet("printArgsToFile");
325 try {
326 comp.compile(args.getFileObjects(), args.getClassNames(), null, List.nil());
327
328 if (log.expectDiagKeys != null) {
329 if (log.expectDiagKeys.isEmpty()) {
|