--- a/langtools/test/tools/javac/failover/CheckAttributedTree.java Tue Jan 08 10:17:29 2013 +0100
+++ b/langtools/test/tools/javac/failover/CheckAttributedTree.java Tue Jan 08 13:47:57 2013 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -21,7 +21,15 @@
* questions.
*/
-import com.sun.source.util.TaskEvent;
+/*
+ * @test
+ * @bug 6970584
+ * @summary assorted position errors in compiler syntax trees
+ * @library ../lib
+ * @build JavacTestingAbstractThreadedTest
+ * @run main CheckAttributedTree -q -r -et ERRONEOUS .
+ */
+
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
@@ -34,6 +42,20 @@
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.lang.model.element.Element;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JComponent;
@@ -49,23 +71,14 @@
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
import javax.tools.Diagnostic;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.util.TaskEvent;
import com.sun.source.util.JavacTask;
import com.sun.source.util.TaskListener;
-import com.sun.tools.javac.api.JavacTool;
import com.sun.tools.javac.code.Symbol;
import com.sun.tools.javac.code.Type;
import com.sun.tools.javac.tree.EndPosTable;
@@ -76,11 +89,6 @@
import com.sun.tools.javac.tree.TreeScanner;
import com.sun.tools.javac.util.Pair;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Set;
-import javax.lang.model.element.Element;
-
import static com.sun.tools.javac.tree.JCTree.Tag.*;
/**
@@ -95,13 +103,7 @@
* covering any new language features that may be tested in this test suite.
*/
-/*
- * @test
- * @bug 6970584
- * @summary assorted position errors in compiler syntax trees
- * @run main CheckAttributedTree -q -r -et ERRONEOUS .
- */
-public class CheckAttributedTree {
+public class CheckAttributedTree extends JavacTestingAbstractThreadedTest {
/**
* Main entry point.
* If test.src is set, program runs in jtreg mode, and will throw an Error
@@ -110,9 +112,10 @@
* args is the value of ${test.src}. In jtreg mode, the -r option can be
* given to change the default base directory to the root test directory.
*/
- public static void main(String... args) {
+ public static void main(String... args) throws Exception {
String testSrc = System.getProperty("test.src");
File baseDir = (testSrc == null) ? null : new File(testSrc);
+ throwAssertionOnError = false;
boolean ok = new CheckAttributedTree().run(baseDir, args);
if (!ok) {
if (testSrc != null) // jtreg mode
@@ -130,7 +133,7 @@
* @param args command line args
* @return true if successful or in gui mode
*/
- boolean run(File baseDir, String... args) {
+ boolean run(File baseDir, String... args) throws Exception {
if (args.length == 0) {
usage(System.out);
return true;
@@ -145,8 +148,10 @@
gui = true;
else if (arg.equals("-q"))
quiet = true;
- else if (arg.equals("-v"))
+ else if (arg.equals("-v")) {
verbose = true;
+ printAll = true;
+ }
else if (arg.equals("-t") && i + 1 < args.length)
tags.add(args[++i]);
else if (arg.equals("-ef") && i + 1 < args.length)
@@ -179,12 +184,11 @@
error("File not found: " + file);
}
- if (fileCount != 1)
- System.err.println(fileCount + " files read");
- if (errors > 0)
- System.err.println(errors + " errors");
+ if (fileCount.get() != 1)
+ errWriter.println(fileCount + " files read");
+ checkAfterExec(false);
- return (gui || errors == 0);
+ return (gui || errCount.get() == 0);
}
/**
@@ -215,7 +219,7 @@
* for java files.
* @param file the file or directory to test
*/
- void test(File file) {
+ void test(final File file) {
if (excludeFiles.contains(file)) {
if (!quiet)
error("File " + file + " excluded");
@@ -230,20 +234,24 @@
}
if (file.isFile() && file.getName().endsWith(".java")) {
- try {
- if (verbose)
- System.err.println(file);
- fileCount++;
- NPETester p = new NPETester();
- p.test(read(file));
- } catch (AttributionException e) {
- if (!quiet) {
- error("Error attributing " + file + "\n" + e.getMessage());
+ pool.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ if (verbose)
+ errWriter.println(file);
+ fileCount.incrementAndGet();
+ NPETester p = new NPETester();
+ p.test(read(file));
+ } catch (AttributionException e) {
+ if (!quiet) {
+ error("Error attributing " + file + "\n" + e.getMessage());
+ }
+ } catch (IOException e) {
+ error("Error reading " + file + ": " + e);
+ }
}
- } catch (IOException e) {
- error("Error reading " + file + ": " + e);
- }
- return;
+ });
}
if (!quiet)
@@ -254,8 +262,6 @@
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
Reporter r = new Reporter(pw);
- JavacTool tool = JavacTool.create();
- StandardJavaFileManager fm = tool.getStandardFileManager(r, null, null);
/**
* Read a file.
@@ -265,11 +271,10 @@
* @throws TreePosTest.ParseException if any errors occur while parsing the file
*/
List<Pair<JCCompilationUnit, JCTree>> read(File file) throws IOException, AttributionException {
- JavacTool tool = JavacTool.create();
r.errors = 0;
- Iterable<? extends JavaFileObject> files = fm.getJavaFileObjects(file);
+ Iterable<? extends JavaFileObject> files = fm.get().getJavaFileObjects(file);
String[] opts = { "-XDshouldStopPolicy=ATTR", "-XDverboseCompilePolicy" };
- JavacTask task = tool.getTask(pw, fm, r, Arrays.asList(opts), null, files);
+ JavacTask task = (JavacTask)comp.getTask(pw, fm.get(), r, Arrays.asList(opts), null, files);
final List<Element> analyzedElems = new ArrayList<>();
task.setTaskListener(new TaskListener() {
public void started(TaskEvent e) {
@@ -308,13 +313,9 @@
*/
void error(String msg) {
System.err.println(msg);
- errors++;
+ errCount.incrementAndGet();
}
- /** Number of files that have been analyzed. */
- int fileCount;
- /** Number of errors reported. */
- int errors;
/** Flag: don't report irrelevant files. */
boolean quiet;
/** Flag: show errors in GUI viewer. */
@@ -385,7 +386,8 @@
viewer = new Viewer();
viewer.addEntry(sourcefile, label, encl, self);
}
- error(label + self.toString() + " encl: " + encl.toString() + " in file: " + sourcefile + " " + self.tree);
+ error(label + self.toString() + " encl: " + encl.toString() +
+ " in file: " + sourcefile + " " + self.tree);
}
}
@@ -754,4 +756,8 @@
final Info self;
}
}
+
+ /** Number of files that have been analyzed. */
+ static AtomicInteger fileCount = new AtomicInteger();
+
}