1.1 --- a/test/tools/javac/failover/CheckAttributedTree.java Tue Jan 08 10:17:29 2013 +0100 1.2 +++ b/test/tools/javac/failover/CheckAttributedTree.java Tue Jan 08 13:47:57 2013 +0000 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -21,7 +21,15 @@ 1.11 * questions. 1.12 */ 1.13 1.14 -import com.sun.source.util.TaskEvent; 1.15 +/* 1.16 + * @test 1.17 + * @bug 6970584 1.18 + * @summary assorted position errors in compiler syntax trees 1.19 + * @library ../lib 1.20 + * @build JavacTestingAbstractThreadedTest 1.21 + * @run main CheckAttributedTree -q -r -et ERRONEOUS . 1.22 + */ 1.23 + 1.24 import java.awt.BorderLayout; 1.25 import java.awt.Color; 1.26 import java.awt.Dimension; 1.27 @@ -34,6 +42,20 @@ 1.28 import java.awt.event.ActionListener; 1.29 import java.awt.event.MouseAdapter; 1.30 import java.awt.event.MouseEvent; 1.31 +import java.io.File; 1.32 +import java.io.IOException; 1.33 +import java.io.PrintStream; 1.34 +import java.io.PrintWriter; 1.35 +import java.io.StringWriter; 1.36 +import java.lang.reflect.Field; 1.37 +import java.util.ArrayList; 1.38 +import java.util.Arrays; 1.39 +import java.util.concurrent.atomic.AtomicInteger; 1.40 +import java.util.HashSet; 1.41 +import java.util.List; 1.42 +import java.util.Set; 1.43 + 1.44 +import javax.lang.model.element.Element; 1.45 import javax.swing.DefaultComboBoxModel; 1.46 import javax.swing.JComboBox; 1.47 import javax.swing.JComponent; 1.48 @@ -49,23 +71,14 @@ 1.49 import javax.swing.text.BadLocationException; 1.50 import javax.swing.text.DefaultHighlighter; 1.51 import javax.swing.text.Highlighter; 1.52 -import java.io.File; 1.53 -import java.io.IOException; 1.54 -import java.io.PrintStream; 1.55 -import java.io.PrintWriter; 1.56 -import java.io.StringWriter; 1.57 -import java.lang.reflect.Field; 1.58 -import java.util.ArrayList; 1.59 -import java.util.List; 1.60 import javax.tools.Diagnostic; 1.61 import javax.tools.DiagnosticListener; 1.62 import javax.tools.JavaFileObject; 1.63 -import javax.tools.StandardJavaFileManager; 1.64 1.65 import com.sun.source.tree.CompilationUnitTree; 1.66 +import com.sun.source.util.TaskEvent; 1.67 import com.sun.source.util.JavacTask; 1.68 import com.sun.source.util.TaskListener; 1.69 -import com.sun.tools.javac.api.JavacTool; 1.70 import com.sun.tools.javac.code.Symbol; 1.71 import com.sun.tools.javac.code.Type; 1.72 import com.sun.tools.javac.tree.EndPosTable; 1.73 @@ -76,11 +89,6 @@ 1.74 import com.sun.tools.javac.tree.TreeScanner; 1.75 import com.sun.tools.javac.util.Pair; 1.76 1.77 -import java.util.Arrays; 1.78 -import java.util.HashSet; 1.79 -import java.util.Set; 1.80 -import javax.lang.model.element.Element; 1.81 - 1.82 import static com.sun.tools.javac.tree.JCTree.Tag.*; 1.83 1.84 /** 1.85 @@ -95,13 +103,7 @@ 1.86 * covering any new language features that may be tested in this test suite. 1.87 */ 1.88 1.89 -/* 1.90 - * @test 1.91 - * @bug 6970584 1.92 - * @summary assorted position errors in compiler syntax trees 1.93 - * @run main CheckAttributedTree -q -r -et ERRONEOUS . 1.94 - */ 1.95 -public class CheckAttributedTree { 1.96 +public class CheckAttributedTree extends JavacTestingAbstractThreadedTest { 1.97 /** 1.98 * Main entry point. 1.99 * If test.src is set, program runs in jtreg mode, and will throw an Error 1.100 @@ -110,9 +112,10 @@ 1.101 * args is the value of ${test.src}. In jtreg mode, the -r option can be 1.102 * given to change the default base directory to the root test directory. 1.103 */ 1.104 - public static void main(String... args) { 1.105 + public static void main(String... args) throws Exception { 1.106 String testSrc = System.getProperty("test.src"); 1.107 File baseDir = (testSrc == null) ? null : new File(testSrc); 1.108 + throwAssertionOnError = false; 1.109 boolean ok = new CheckAttributedTree().run(baseDir, args); 1.110 if (!ok) { 1.111 if (testSrc != null) // jtreg mode 1.112 @@ -130,7 +133,7 @@ 1.113 * @param args command line args 1.114 * @return true if successful or in gui mode 1.115 */ 1.116 - boolean run(File baseDir, String... args) { 1.117 + boolean run(File baseDir, String... args) throws Exception { 1.118 if (args.length == 0) { 1.119 usage(System.out); 1.120 return true; 1.121 @@ -145,8 +148,10 @@ 1.122 gui = true; 1.123 else if (arg.equals("-q")) 1.124 quiet = true; 1.125 - else if (arg.equals("-v")) 1.126 + else if (arg.equals("-v")) { 1.127 verbose = true; 1.128 + printAll = true; 1.129 + } 1.130 else if (arg.equals("-t") && i + 1 < args.length) 1.131 tags.add(args[++i]); 1.132 else if (arg.equals("-ef") && i + 1 < args.length) 1.133 @@ -179,12 +184,11 @@ 1.134 error("File not found: " + file); 1.135 } 1.136 1.137 - if (fileCount != 1) 1.138 - System.err.println(fileCount + " files read"); 1.139 - if (errors > 0) 1.140 - System.err.println(errors + " errors"); 1.141 + if (fileCount.get() != 1) 1.142 + errWriter.println(fileCount + " files read"); 1.143 + checkAfterExec(false); 1.144 1.145 - return (gui || errors == 0); 1.146 + return (gui || errCount.get() == 0); 1.147 } 1.148 1.149 /** 1.150 @@ -215,7 +219,7 @@ 1.151 * for java files. 1.152 * @param file the file or directory to test 1.153 */ 1.154 - void test(File file) { 1.155 + void test(final File file) { 1.156 if (excludeFiles.contains(file)) { 1.157 if (!quiet) 1.158 error("File " + file + " excluded"); 1.159 @@ -230,20 +234,24 @@ 1.160 } 1.161 1.162 if (file.isFile() && file.getName().endsWith(".java")) { 1.163 - try { 1.164 - if (verbose) 1.165 - System.err.println(file); 1.166 - fileCount++; 1.167 - NPETester p = new NPETester(); 1.168 - p.test(read(file)); 1.169 - } catch (AttributionException e) { 1.170 - if (!quiet) { 1.171 - error("Error attributing " + file + "\n" + e.getMessage()); 1.172 + pool.execute(new Runnable() { 1.173 + @Override 1.174 + public void run() { 1.175 + try { 1.176 + if (verbose) 1.177 + errWriter.println(file); 1.178 + fileCount.incrementAndGet(); 1.179 + NPETester p = new NPETester(); 1.180 + p.test(read(file)); 1.181 + } catch (AttributionException e) { 1.182 + if (!quiet) { 1.183 + error("Error attributing " + file + "\n" + e.getMessage()); 1.184 + } 1.185 + } catch (IOException e) { 1.186 + error("Error reading " + file + ": " + e); 1.187 + } 1.188 } 1.189 - } catch (IOException e) { 1.190 - error("Error reading " + file + ": " + e); 1.191 - } 1.192 - return; 1.193 + }); 1.194 } 1.195 1.196 if (!quiet) 1.197 @@ -254,8 +262,6 @@ 1.198 StringWriter sw = new StringWriter(); 1.199 PrintWriter pw = new PrintWriter(sw); 1.200 Reporter r = new Reporter(pw); 1.201 - JavacTool tool = JavacTool.create(); 1.202 - StandardJavaFileManager fm = tool.getStandardFileManager(r, null, null); 1.203 1.204 /** 1.205 * Read a file. 1.206 @@ -265,11 +271,10 @@ 1.207 * @throws TreePosTest.ParseException if any errors occur while parsing the file 1.208 */ 1.209 List<Pair<JCCompilationUnit, JCTree>> read(File file) throws IOException, AttributionException { 1.210 - JavacTool tool = JavacTool.create(); 1.211 r.errors = 0; 1.212 - Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(file); 1.213 + Iterable<? extends JavaFileObject> files = fm.get().getJavaFileObjects(file); 1.214 String[] opts = { "-XDshouldStopPolicy=ATTR", "-XDverboseCompilePolicy" }; 1.215 - JavacTask task = tool.getTask(pw, fm, r, Arrays.asList(opts), null, files); 1.216 + JavacTask task = (JavacTask)comp.getTask(pw, fm.get(), r, Arrays.asList(opts), null, files); 1.217 final List<Element> analyzedElems = new ArrayList<>(); 1.218 task.setTaskListener(new TaskListener() { 1.219 public void started(TaskEvent e) { 1.220 @@ -308,13 +313,9 @@ 1.221 */ 1.222 void error(String msg) { 1.223 System.err.println(msg); 1.224 - errors++; 1.225 + errCount.incrementAndGet(); 1.226 } 1.227 1.228 - /** Number of files that have been analyzed. */ 1.229 - int fileCount; 1.230 - /** Number of errors reported. */ 1.231 - int errors; 1.232 /** Flag: don't report irrelevant files. */ 1.233 boolean quiet; 1.234 /** Flag: show errors in GUI viewer. */ 1.235 @@ -385,7 +386,8 @@ 1.236 viewer = new Viewer(); 1.237 viewer.addEntry(sourcefile, label, encl, self); 1.238 } 1.239 - error(label + self.toString() + " encl: " + encl.toString() + " in file: " + sourcefile + " " + self.tree); 1.240 + error(label + self.toString() + " encl: " + encl.toString() + 1.241 + " in file: " + sourcefile + " " + self.tree); 1.242 } 1.243 } 1.244 1.245 @@ -754,4 +756,8 @@ 1.246 final Info self; 1.247 } 1.248 } 1.249 + 1.250 + /** Number of files that have been analyzed. */ 1.251 + static AtomicInteger fileCount = new AtomicInteger(); 1.252 + 1.253 }