langtools/src/share/classes/com/sun/tools/javac/util/Log.java
changeset 6582 c7a4fb5a2f86
parent 6143 79b7dee406cc
child 6721 d92073844278
equal deleted inserted replaced
6581:f58f0ce45802 6582:c7a4fb5a2f86
    25 
    25 
    26 package com.sun.tools.javac.util;
    26 package com.sun.tools.javac.util;
    27 
    27 
    28 import java.io.*;
    28 import java.io.*;
    29 import java.util.Arrays;
    29 import java.util.Arrays;
       
    30 import java.util.EnumSet;
    30 import java.util.HashSet;
    31 import java.util.HashSet;
    31 import java.util.Map;
    32 import java.util.Map;
       
    33 import java.util.Queue;
    32 import java.util.Set;
    34 import java.util.Set;
    33 import javax.tools.DiagnosticListener;
    35 import javax.tools.DiagnosticListener;
    34 import javax.tools.JavaFileObject;
    36 import javax.tools.JavaFileObject;
    35 
    37 
    36 import com.sun.tools.javac.tree.JCTree;
    38 import com.sun.tools.javac.tree.JCTree;
   108     /**
   110     /**
   109      * JavacMessages object used for localization.
   111      * JavacMessages object used for localization.
   110      */
   112      */
   111     private JavacMessages messages;
   113     private JavacMessages messages;
   112 
   114 
       
   115     /**
       
   116      * Deferred diagnostics
       
   117      */
       
   118     public boolean deferDiagnostics;
       
   119     public Queue<JCDiagnostic> deferredDiagnostics = new ListBuffer<JCDiagnostic>();
       
   120 
   113     /** Construct a log with given I/O redirections.
   121     /** Construct a log with given I/O redirections.
   114      */
   122      */
   115     @Deprecated
   123     @Deprecated
   116     protected Log(Context context, PrintWriter errWriter, PrintWriter warnWriter, PrintWriter noticeWriter) {
   124     protected Log(Context context, PrintWriter errWriter, PrintWriter warnWriter, PrintWriter noticeWriter) {
   117         super(JCDiagnostic.Factory.instance(context));
   125         super(JCDiagnostic.Factory.instance(context));
   201     public int nerrors = 0;
   209     public int nerrors = 0;
   202 
   210 
   203     /** The number of warnings encountered so far.
   211     /** The number of warnings encountered so far.
   204      */
   212      */
   205     public int nwarnings = 0;
   213     public int nwarnings = 0;
   206 
       
   207     /**
       
   208      * Whether or not an unrecoverable error has been seen.
       
   209      * Unrecoverable errors prevent subsequent annotation processing.
       
   210      */
       
   211     public boolean unrecoverableError;
       
   212 
   214 
   213     /** A set of all errors generated so far. This is used to avoid printing an
   215     /** A set of all errors generated so far. This is used to avoid printing an
   214      *  error message more than once. For each error, a pair consisting of the
   216      *  error message more than once. For each error, a pair consisting of the
   215      *  source file name and source code position of the error is added to the set.
   217      *  source file name and source code position of the error is added to the set.
   216      */
   218      */
   345     public void strictWarning(DiagnosticPosition pos, String key, Object ... args) {
   347     public void strictWarning(DiagnosticPosition pos, String key, Object ... args) {
   346         writeDiagnostic(diags.warning(source, pos, key, args));
   348         writeDiagnostic(diags.warning(source, pos, key, args));
   347         nwarnings++;
   349         nwarnings++;
   348     }
   350     }
   349 
   351 
       
   352     /** Report all deferred diagnostics, and clear the deferDiagnostics flag. */
       
   353     public void reportDeferredDiagnostics() {
       
   354         reportDeferredDiagnostics(EnumSet.allOf(JCDiagnostic.Kind.class));
       
   355     }
       
   356 
       
   357     /** Report selected deferred diagnostics, and clear the deferDiagnostics flag. */
       
   358     public void reportDeferredDiagnostics(Set<JCDiagnostic.Kind> kinds) {
       
   359         deferDiagnostics = false;
       
   360         JCDiagnostic d;
       
   361         while ((d = deferredDiagnostics.poll()) != null) {
       
   362             if (kinds.contains(d.getKind()))
       
   363                 report(d);
       
   364         }
       
   365     }
       
   366 
   350     /**
   367     /**
   351      * Common diagnostic handling.
   368      * Common diagnostic handling.
   352      * The diagnostic is counted, and depending on the options and how many diagnostics have been
   369      * The diagnostic is counted, and depending on the options and how many diagnostics have been
   353      * reported so far, the diagnostic may be handed off to writeDiagnostic.
   370      * reported so far, the diagnostic may be handed off to writeDiagnostic.
   354      */
   371      */
   355     public void report(JCDiagnostic diagnostic) {
   372     public void report(JCDiagnostic diagnostic) {
       
   373         if (deferDiagnostics) {
       
   374             deferredDiagnostics.add(diagnostic);
       
   375             return;
       
   376         }
       
   377 
   356         if (expectDiagKeys != null)
   378         if (expectDiagKeys != null)
   357             expectDiagKeys.remove(diagnostic.getCode());
   379             expectDiagKeys.remove(diagnostic.getCode());
   358 
   380 
   359         switch (diagnostic.getType()) {
   381         switch (diagnostic.getType()) {
   360         case FRAGMENT:
   382         case FRAGMENT: