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