src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java
branchJDK-8226585-branch
changeset 58109 ee07de0d2c16
parent 55622 0b470386f5f7
child 58290 d885633d9de4
--- 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.
  **************************************************************************/