40 import java.util.function.Predicate;
41 import java.util.regex.Matcher;
42 import java.util.regex.Pattern;
43 import java.util.stream.Stream;
44
45 import javax.lang.model.SourceVersion;
46 import javax.tools.JavaFileManager;
47 import javax.tools.JavaFileManager.Location;
48 import javax.tools.JavaFileObject;
49 import javax.tools.JavaFileObject.Kind;
50 import javax.tools.StandardJavaFileManager;
51 import javax.tools.StandardLocation;
52
53 import com.sun.tools.doclint.DocLint;
54 import com.sun.tools.javac.code.Source;
55 import com.sun.tools.javac.file.BaseFileManager;
56 import com.sun.tools.javac.file.JavacFileManager;
57 import com.sun.tools.javac.jvm.Profile;
58 import com.sun.tools.javac.jvm.Target;
59 import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
60 import com.sun.tools.javac.platform.PlatformDescription;
61 import com.sun.tools.javac.platform.PlatformUtils;
62 import com.sun.tools.javac.resources.CompilerProperties.Errors;
63 import com.sun.tools.javac.resources.CompilerProperties.Fragments;
64 import com.sun.tools.javac.resources.CompilerProperties.LintWarnings;
65 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
66 import com.sun.tools.javac.util.Context;
67 import com.sun.tools.javac.util.JCDiagnostic;
68 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticInfo;
69 import com.sun.tools.javac.util.JCDiagnostic.Fragment;
70 import com.sun.tools.javac.util.List;
71 import com.sun.tools.javac.util.ListBuffer;
72 import com.sun.tools.javac.util.Log;
73 import com.sun.tools.javac.util.Log.PrefixKind;
74 import com.sun.tools.javac.util.Log.WriterKind;
75 import com.sun.tools.javac.util.Options;
76 import com.sun.tools.javac.util.PropagatedException;
77
78 /**
79 * Shared option and argument handling for command line and API usage of javac.
295 * Handles the {@code --release} option.
296 *
297 * @param additionalOptions a predicate to handle additional options implied by the
298 * {@code --release} option. The predicate should return true if all the additional
299 * options were processed successfully.
300 * @return true if successful, false otherwise
301 */
302 public boolean handleReleaseOptions(Predicate<Iterable<String>> additionalOptions) {
303 String platformString = options.get(Option.RELEASE);
304
305 checkOptionAllowed(platformString == null,
306 option -> reportDiag(Errors.ReleaseBootclasspathConflict(option)),
307 Option.BOOT_CLASS_PATH, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND,
308 Option.XBOOTCLASSPATH_PREPEND,
309 Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS,
310 Option.EXTDIRS, Option.DJAVA_EXT_DIRS,
311 Option.SOURCE, Option.TARGET,
312 Option.SYSTEM, Option.UPGRADE_MODULE_PATH);
313
314 if (platformString != null) {
315 PlatformDescription platformDescription =
316 PlatformUtils.lookupPlatformDescription(platformString);
317
318 if (platformDescription == null) {
319 reportDiag(Errors.UnsupportedReleaseVersion(platformString));
320 return false;
321 }
322
323 options.put(Option.SOURCE, platformDescription.getSourceVersion());
324 options.put(Option.TARGET, platformDescription.getTargetVersion());
325
326 context.put(PlatformDescription.class, platformDescription);
327
328 if (!additionalOptions.test(platformDescription.getAdditionalOptions()))
329 return false;
330
331 JavaFileManager platformFM = platformDescription.getFileManager();
332 DelegatingJavaFileManager.installReleaseFileManager(context,
333 platformFM,
334 getFileManager());
335 }
336
|
40 import java.util.function.Predicate;
41 import java.util.regex.Matcher;
42 import java.util.regex.Pattern;
43 import java.util.stream.Stream;
44
45 import javax.lang.model.SourceVersion;
46 import javax.tools.JavaFileManager;
47 import javax.tools.JavaFileManager.Location;
48 import javax.tools.JavaFileObject;
49 import javax.tools.JavaFileObject.Kind;
50 import javax.tools.StandardJavaFileManager;
51 import javax.tools.StandardLocation;
52
53 import com.sun.tools.doclint.DocLint;
54 import com.sun.tools.javac.code.Source;
55 import com.sun.tools.javac.file.BaseFileManager;
56 import com.sun.tools.javac.file.JavacFileManager;
57 import com.sun.tools.javac.jvm.Profile;
58 import com.sun.tools.javac.jvm.Target;
59 import com.sun.tools.javac.main.OptionHelper.GrumpyHelper;
60 import com.sun.tools.javac.platform.JDKPlatformProvider;
61 import com.sun.tools.javac.platform.PlatformDescription;
62 import com.sun.tools.javac.platform.PlatformUtils;
63 import com.sun.tools.javac.resources.CompilerProperties.Errors;
64 import com.sun.tools.javac.resources.CompilerProperties.Fragments;
65 import com.sun.tools.javac.resources.CompilerProperties.LintWarnings;
66 import com.sun.tools.javac.resources.CompilerProperties.Warnings;
67 import com.sun.tools.javac.util.Context;
68 import com.sun.tools.javac.util.JCDiagnostic;
69 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticInfo;
70 import com.sun.tools.javac.util.JCDiagnostic.Fragment;
71 import com.sun.tools.javac.util.List;
72 import com.sun.tools.javac.util.ListBuffer;
73 import com.sun.tools.javac.util.Log;
74 import com.sun.tools.javac.util.Log.PrefixKind;
75 import com.sun.tools.javac.util.Log.WriterKind;
76 import com.sun.tools.javac.util.Options;
77 import com.sun.tools.javac.util.PropagatedException;
78
79 /**
80 * Shared option and argument handling for command line and API usage of javac.
296 * Handles the {@code --release} option.
297 *
298 * @param additionalOptions a predicate to handle additional options implied by the
299 * {@code --release} option. The predicate should return true if all the additional
300 * options were processed successfully.
301 * @return true if successful, false otherwise
302 */
303 public boolean handleReleaseOptions(Predicate<Iterable<String>> additionalOptions) {
304 String platformString = options.get(Option.RELEASE);
305
306 checkOptionAllowed(platformString == null,
307 option -> reportDiag(Errors.ReleaseBootclasspathConflict(option)),
308 Option.BOOT_CLASS_PATH, Option.XBOOTCLASSPATH, Option.XBOOTCLASSPATH_APPEND,
309 Option.XBOOTCLASSPATH_PREPEND,
310 Option.ENDORSEDDIRS, Option.DJAVA_ENDORSED_DIRS,
311 Option.EXTDIRS, Option.DJAVA_EXT_DIRS,
312 Option.SOURCE, Option.TARGET,
313 Option.SYSTEM, Option.UPGRADE_MODULE_PATH);
314
315 if (platformString != null) {
316 String platformAndOptions = platformString;
317 if (options.isSet(Option.PREVIEW)) {
318 platformAndOptions += ":" + JDKPlatformProvider.PREVIEW_OPTION;
319 }
320 PlatformDescription platformDescription =
321 PlatformUtils.lookupPlatformDescription(platformAndOptions);
322
323 if (platformDescription == null) {
324 reportDiag(Errors.UnsupportedReleaseVersion(platformString));
325 return false;
326 }
327
328 options.put(Option.SOURCE, platformDescription.getSourceVersion());
329 options.put(Option.TARGET, platformDescription.getTargetVersion());
330
331 context.put(PlatformDescription.class, platformDescription);
332
333 if (!additionalOptions.test(platformDescription.getAdditionalOptions()))
334 return false;
335
336 JavaFileManager platformFM = platformDescription.getFileManager();
337 DelegatingJavaFileManager.installReleaseFileManager(context,
338 platformFM,
339 getFileManager());
340 }
341
|