8015073: c.s.t.javac.api.JavacTool.getTask() - more informative exception
Reviewed-by: jjg
--- a/langtools/src/share/classes/com/sun/tools/javac/api/JavacTool.java Fri Sep 27 13:06:38 2013 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/api/JavacTool.java Fri Sep 27 16:05:56 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -120,7 +120,6 @@
try {
ClientCodeWrapper ccw = ClientCodeWrapper.instance(context);
- final String kindMsg = "All compilation units must be of SOURCE kind";
if (options != null)
for (String option : options)
option.getClass(); // null check
@@ -132,8 +131,11 @@
if (compilationUnits != null) {
compilationUnits = ccw.wrapJavaFileObjects(compilationUnits); // implicit null check
for (JavaFileObject cu : compilationUnits) {
- if (cu.getKind() != JavaFileObject.Kind.SOURCE)
+ if (cu.getKind() != JavaFileObject.Kind.SOURCE) {
+ String kindMsg = "Compilation unit is not of SOURCE kind: "
+ + "\"" + cu.getName() + "\"";
throw new IllegalArgumentException(kindMsg);
+ }
}
}
--- a/langtools/test/tools/javac/api/TestJavacTask.java Fri Sep 27 13:06:38 2013 -0700
+++ b/langtools/test/tools/javac/api/TestJavacTask.java Fri Sep 27 16:05:56 2013 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -23,8 +23,8 @@
/*
* @test
- * @bug 4813736
- * @summary Provide a basic test of access to the Java Model from javac
+ * @bug 4813736 8015073
+ * @summary Provide a basic test of access to the Java Model from javac, and error messages
* @author Peter von der Ah\u00e9
* @run main TestJavacTask TestJavacTask.java
*/
@@ -40,21 +40,36 @@
import javax.tools.ToolProvider;
public class TestJavacTask {
-
- static JavacTaskImpl getTask(JavaCompiler compiler, File... file) {
+ static final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+ static JavacTaskImpl getTask(File... file) {
StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> files =
fm.getJavaFileObjectsFromFiles(Arrays.asList(file));
return (JavacTaskImpl)compiler.getTask(null, fm, null, null, null, files);
}
- public static void main(String... args) throws IOException {
- JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
+ static void basicTest(String... args) throws IOException {
String srcdir = System.getProperty("test.src");
File file = new File(srcdir, args[0]);
- JavacTaskImpl task = getTask(tool, file);
+ JavacTaskImpl task = getTask(file);
for (TypeElement clazz : task.enter(task.parse()))
System.out.println(clazz.getSimpleName());
}
+ static void checkKindError() {
+ final File testFile = new File("Test.java "); // <-note trailing space!
+ try {
+ getTask(testFile);
+ } catch (IllegalArgumentException iae) {
+ if (!iae.getMessage().contains("\"" + testFile.getName() + "\"")) {
+ System.err.println("Got message: " + iae.getMessage());
+ throw new RuntimeException("Error: expected string not found");
+ }
+ }
+ }
+
+ public static void main(String... args) throws IOException {
+ basicTest(args);
+ checkKindError();
+ }
}