< prev index next >

src/jdk.jshell/share/classes/jdk/jshell/TaskFactory.java

Print this page




  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.jshell;
  27 
  28 import com.sun.source.tree.CompilationUnitTree;
  29 import com.sun.source.tree.Tree;
  30 import com.sun.source.util.Trees;
  31 import com.sun.tools.javac.api.JavacTaskImpl;
  32 import com.sun.tools.javac.api.JavacTool;
  33 import com.sun.tools.javac.util.Context;
  34 import java.util.ArrayList;
  35 import java.util.Arrays;
  36 import java.util.Iterator;
  37 import java.util.List;
  38 import javax.tools.Diagnostic;
  39 import javax.tools.DiagnosticCollector;
  40 import javax.tools.JavaCompiler;
  41 import javax.tools.JavaFileManager;
  42 import javax.tools.JavaFileObject;
  43 import javax.tools.ToolProvider;
  44 import static jdk.jshell.Util.*;
  45 import com.sun.source.tree.ImportTree;
  46 import com.sun.tools.javac.code.Types;
  47 import com.sun.tools.javac.util.JavacMessages;
  48 import jdk.jshell.MemoryFileManager.OutputMemoryJavaFileObject;
  49 import java.util.Collections;
  50 import java.util.Locale;
  51 import static javax.tools.StandardLocation.CLASS_OUTPUT;
  52 import static jdk.internal.jshell.debug.InternalDebugControl.DBG_GEN;
  53 import java.io.File;
  54 import java.util.Collection;
  55 import java.util.HashMap;
  56 import java.util.LinkedHashMap;


 378             if (messages == null) {
 379                 messages = JavacMessages.instance(context);
 380             }
 381             return messages;
 382         }
 383 
 384         Trees trees() {
 385             if (trees == null) {
 386                 trees = Trees.instance(task);
 387             }
 388             return trees;
 389         }
 390 
 391         // ------------------ diags functionality
 392 
 393         DiagList getDiagnostics() {
 394             if (diags == null) {
 395                 LinkedHashMap<String, Diag> diagMap = new LinkedHashMap<>();
 396                 for (Diagnostic<? extends JavaFileObject> in : diagnostics.getDiagnostics()) {
 397                     Diag d = diag(in);
 398                     String uniqueKey = d.getCode() + ":" + d.getPosition() + ":" + d.getMessage(null);
 399                     diagMap.put(uniqueKey, d);
 400                 }
 401                 diags = new DiagList(diagMap.values());
 402             }
 403             return diags;
 404         }
 405 
 406         boolean hasErrors() {
 407             return getDiagnostics().hasErrors();
 408         }
 409 
 410         String shortErrorMessage() {
 411             StringBuilder sb = new StringBuilder();
 412             for (Diag diag : getDiagnostics()) {
 413                 for (String line : diag.getMessage(null).split("\\r?\\n")) {
 414                     if (!line.trim().startsWith("location:")) {
 415                         sb.append(line);
 416                     }
 417                 }
 418             }
 419             return sb.toString();
 420         }
 421 
 422         void debugPrintDiagnostics(String src) {
 423             for (Diag diag : getDiagnostics()) {
 424                 state.debug(DBG_GEN, "ERROR --\n");
 425                 for (String line : diag.getMessage(null).split("\\r?\\n")) {
 426                     if (!line.trim().startsWith("location:")) {
 427                         state.debug(DBG_GEN, "%s\n", line);
 428                     }
 429                 }
 430                 int start = (int) diag.getStartPosition();
 431                 int end = (int) diag.getEndPosition();
 432                 if (src != null) {
 433                     String[] srcLines = src.split("\\r?\\n");
 434                     for (String line : srcLines) {
 435                         state.debug(DBG_GEN, "%s\n", line);
 436                     }
 437 
 438                     StringBuilder sb = new StringBuilder();
 439                     for (int i = 0; i < start; ++i) {
 440                         sb.append(' ');
 441                     }
 442                     sb.append('^');
 443                     if (end > start) {
 444                         for (int i = start + 1; i < end; ++i) {
 445                             sb.append('-');


  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package jdk.jshell;
  27 
  28 import com.sun.source.tree.CompilationUnitTree;
  29 import com.sun.source.tree.Tree;
  30 import com.sun.source.util.Trees;
  31 import com.sun.tools.javac.api.JavacTaskImpl;
  32 import com.sun.tools.javac.api.JavacTool;
  33 import com.sun.tools.javac.util.Context;
  34 import java.util.ArrayList;
  35 import java.util.Arrays;

  36 import java.util.List;
  37 import javax.tools.Diagnostic;
  38 import javax.tools.DiagnosticCollector;
  39 import javax.tools.JavaCompiler;
  40 import javax.tools.JavaFileManager;
  41 import javax.tools.JavaFileObject;
  42 import javax.tools.ToolProvider;
  43 import static jdk.jshell.Util.*;
  44 import com.sun.source.tree.ImportTree;
  45 import com.sun.tools.javac.code.Types;
  46 import com.sun.tools.javac.util.JavacMessages;
  47 import jdk.jshell.MemoryFileManager.OutputMemoryJavaFileObject;
  48 import java.util.Collections;
  49 import java.util.Locale;
  50 import static javax.tools.StandardLocation.CLASS_OUTPUT;
  51 import static jdk.internal.jshell.debug.InternalDebugControl.DBG_GEN;
  52 import java.io.File;
  53 import java.util.Collection;
  54 import java.util.HashMap;
  55 import java.util.LinkedHashMap;


 377             if (messages == null) {
 378                 messages = JavacMessages.instance(context);
 379             }
 380             return messages;
 381         }
 382 
 383         Trees trees() {
 384             if (trees == null) {
 385                 trees = Trees.instance(task);
 386             }
 387             return trees;
 388         }
 389 
 390         // ------------------ diags functionality
 391 
 392         DiagList getDiagnostics() {
 393             if (diags == null) {
 394                 LinkedHashMap<String, Diag> diagMap = new LinkedHashMap<>();
 395                 for (Diagnostic<? extends JavaFileObject> in : diagnostics.getDiagnostics()) {
 396                     Diag d = diag(in);
 397                     String uniqueKey = d.getCode() + ":" + d.getPosition() + ":" + d.getMessage(PARSED_LOCALE);
 398                     diagMap.put(uniqueKey, d);
 399                 }
 400                 diags = new DiagList(diagMap.values());
 401             }
 402             return diags;
 403         }
 404 
 405         boolean hasErrors() {
 406             return getDiagnostics().hasErrors();
 407         }
 408 
 409         String shortErrorMessage() {
 410             StringBuilder sb = new StringBuilder();
 411             for (Diag diag : getDiagnostics()) {
 412                 for (String line : diag.getMessage(PARSED_LOCALE).split("\\r?\\n")) {
 413                     if (!line.trim().startsWith("location:")) {
 414                         sb.append(line);
 415                     }
 416                 }
 417             }
 418             return sb.toString();
 419         }
 420 
 421         void debugPrintDiagnostics(String src) {
 422             for (Diag diag : getDiagnostics()) {
 423                 state.debug(DBG_GEN, "ERROR --\n");
 424                 for (String line : diag.getMessage(PARSED_LOCALE).split("\\r?\\n")) {
 425                     if (!line.trim().startsWith("location:")) {
 426                         state.debug(DBG_GEN, "%s\n", line);
 427                     }
 428                 }
 429                 int start = (int) diag.getStartPosition();
 430                 int end = (int) diag.getEndPosition();
 431                 if (src != null) {
 432                     String[] srcLines = src.split("\\r?\\n");
 433                     for (String line : srcLines) {
 434                         state.debug(DBG_GEN, "%s\n", line);
 435                     }
 436 
 437                     StringBuilder sb = new StringBuilder();
 438                     for (int i = 0; i < start; ++i) {
 439                         sb.append(' ');
 440                     }
 441                     sb.append('^');
 442                     if (end > start) {
 443                         for (int i = start + 1; i < end; ++i) {
 444                             sb.append('-');
< prev index next >