6930076: "null" can incorrectly appear in error message compiler.err.error.reading.file
authorjjg
Fri, 26 Feb 2010 15:26:58 -0800
changeset 5007 28dee2489196
parent 5006 8904e3c899b0
child 5008 3a90203fa91e
6930076: "null" can incorrectly appear in error message compiler.err.error.reading.file Reviewed-by: darcy
langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java
langtools/src/share/classes/com/sun/tools/javac/file/Paths.java
langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
--- a/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Fri Feb 26 08:42:22 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/JavacFileManager.java	Fri Feb 26 15:26:58 2010 -0800
@@ -260,7 +260,7 @@
                     archive = openArchive(directory);
                 } catch (IOException ex) {
                     log.error("error.reading.file",
-                       directory, ex.getLocalizedMessage());
+                       directory, getMessage(ex));
                     return;
                 }
             }
@@ -489,7 +489,7 @@
                 archive = new MissingArchive(zipFileName);
             } catch (IOException ex) {
                 if (zipFileName.exists())
-                    log.error("error.reading.file", zipFileName, ex.getLocalizedMessage());
+                    log.error("error.reading.file", zipFileName, getMessage(ex));
                 archive = new MissingArchive(zipFileName);
             }
 
@@ -838,4 +838,23 @@
         }
         throw new IllegalArgumentException("Invalid relative path: " + file);
     }
+
+    /**
+     * Get a detail message from an IOException.
+     * Most, but not all, instances of IOException provide a non-null result
+     * for getLocalizedMessage().  But some instances return null: in these
+     * cases, fallover to getMessage(), and if even that is null, return the
+     * name of the exception itself.
+     * @param e an IOException
+     * @return a string to include in a compiler diagnostic
+     */
+    public static String getMessage(IOException e) {
+        String s = e.getLocalizedMessage();
+        if (s != null)
+            return s;
+        s = e.getMessage();
+        if (s != null)
+            return s;
+        return e.toString();
+    }
 }
--- a/langtools/src/share/classes/com/sun/tools/javac/file/Paths.java	Fri Feb 26 08:42:22 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/file/Paths.java	Fri Feb 26 15:26:58 2010 -0800
@@ -320,7 +320,7 @@
                     addFile(f, warn);
                 }
             } catch (IOException e) {
-                log.error("error.reading.file", jarFile, e.getLocalizedMessage());
+                log.error("error.reading.file", jarFile, JavacFileManager.getMessage(e));
             }
         }
     }
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Fri Feb 26 08:42:22 2010 -0800
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Fri Feb 26 15:26:58 2010 -0800
@@ -558,7 +558,7 @@
             inputFiles.add(filename);
             return filename.getCharContent(false);
         } catch (IOException e) {
-            log.error("error.reading.file", filename, e.getLocalizedMessage());
+            log.error("error.reading.file", filename, JavacFileManager.getMessage(e));
             return null;
         }
     }
@@ -717,7 +717,7 @@
         try {
             tree = parse(filename, filename.getCharContent(false));
         } catch (IOException e) {
-            log.error("error.reading.file", filename, e);
+            log.error("error.reading.file", filename, JavacFileManager.getMessage(e));
             tree = make.TopLevel(List.<JCTree.JCAnnotation>nil(), null, List.<JCTree>nil());
         } finally {
             log.useSource(prev);