8015073: c.s.t.javac.api.JavacTool.getTask() - more informative exception
authorksrini
Fri, 27 Sep 2013 16:05:56 -0700
changeset 20604 13bdd49ddaf0
parent 20603 1cba7386cfd9
child 20605 6f987a5ad8d0
8015073: c.s.t.javac.api.JavacTool.getTask() - more informative exception Reviewed-by: jjg
langtools/src/share/classes/com/sun/tools/javac/api/JavacTool.java
langtools/test/tools/javac/api/TestJavacTask.java
--- 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();
+    }
 }