--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Sep 05 12:39:48 2019 +0200
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Sep 12 17:47:24 2019 +0200
@@ -93,6 +93,7 @@
private final Source source;
private final Target target;
private final Profile profile;
+ private final Preview preview;
private final boolean warnOnAnyAccessToMembers;
// The set of lint options currently in effect. It is initialized
@@ -139,10 +140,12 @@
syntheticNameChar = target.syntheticNameChar();
profile = Profile.instance(context);
+ preview = Preview.instance(context);
boolean verboseDeprecated = lint.isEnabled(LintCategory.DEPRECATION);
boolean verboseRemoval = lint.isEnabled(LintCategory.REMOVAL);
boolean verboseUnchecked = lint.isEnabled(LintCategory.UNCHECKED);
+ boolean verbosePreview = lint.isEnabled(LintCategory.PREVIEW);
boolean enforceMandatoryWarnings = true;
deprecationHandler = new MandatoryWarningHandler(log, verboseDeprecated,
@@ -153,6 +156,8 @@
enforceMandatoryWarnings, "unchecked", LintCategory.UNCHECKED);
sunApiHandler = new MandatoryWarningHandler(log, false,
enforceMandatoryWarnings, "sunapi", null);
+ previewHandler = new MandatoryWarningHandler(log, verbosePreview,
+ enforceMandatoryWarnings, "preview", null);
deferredLintHandler = DeferredLintHandler.instance(context);
}
@@ -182,6 +187,10 @@
*/
private MandatoryWarningHandler sunApiHandler;
+ /** A handler for messages about preview features.
+ */
+ private MandatoryWarningHandler previewHandler;
+
/** A handler for deferred lint warnings.
*/
private DeferredLintHandler deferredLintHandler;
@@ -224,6 +233,27 @@
}
}
+ /** Warn about deprecated symbol.
+ * @param pos Position to be used for error reporting.
+ * @param sym The deprecated symbol.
+ */
+ void warnPreview(DiagnosticPosition pos, Symbol sym) {
+ if ((sym.flags() & PREVIEW_ESSENTIAL_API) != 0) {
+ previewHandler.report(pos, Warnings.IsPreview(sym));
+ } else {
+ warnPreview(pos, Warnings.IsPreview(sym));
+ }
+ }
+
+ /** Log a preview warning.
+ * @param pos Position to be used for error reporting.
+ * @param msg A Warning describing the problem.
+ */
+ public void warnPreview(DiagnosticPosition pos, Warning warnKey) {
+ if (!lint.isSuppressed(LintCategory.PREVIEW))
+ previewHandler.report(pos, warnKey);
+ }
+
/** Warn about unchecked operation.
* @param pos Position to be used for error reporting.
* @param msg A string describing the problem.
@@ -262,6 +292,7 @@
removalHandler.reportDeferredDiagnostic();
uncheckedHandler.reportDeferredDiagnostic();
sunApiHandler.reportDeferredDiagnostic();
+ previewHandler.reportDeferredDiagnostic();
}
@@ -3290,6 +3321,16 @@
}
}
+ void checkPreview(DiagnosticPosition pos, Symbol s) {
+ if ((s.flags() & PREVIEW_API) != 0) {
+ if ((s.flags() & PREVIEW_ESSENTIAL_API) != 0 && !preview.isEnabled()) {
+ log.error(pos, Errors.IsPreview(s));
+ } else {
+ deferredLintHandler.report(() -> warnPreview(pos, s));
+ }
+ }
+ }
+
/* *************************************************************************
* Check for recursive annotation elements.
**************************************************************************/