From 00484df43506e6d949a17da902d16b07ba32e6d2 Mon Sep 17 00:00:00 2001 From: Alexandre Archambault Date: Fri, 6 May 2016 13:53:53 +0200 Subject: [PATCH] Exception.getMessage can be null --- cache/src/main/scala/coursier/Cache.scala | 16 ++-------------- cache/src/main/scala/coursier/CacheParse.scala | 2 +- cache/src/main/scala/coursier/Platform.scala | 4 ++-- .../main/scala-2.11/coursier/cli/Bootstrap.scala | 7 +++++-- .../coursier/core/compatibility/package.scala | 2 +- fetch-js/src/main/scala/coursier/Platform.scala | 9 +++++---- .../src/main/scala-2.10/coursier/FromSbt.scala | 2 +- 7 files changed, 17 insertions(+), 25 deletions(-) diff --git a/cache/src/main/scala/coursier/Cache.scala b/cache/src/main/scala/coursier/Cache.scala index 3929dee0f..04a51bdf7 100644 --- a/cache/src/main/scala/coursier/Cache.scala +++ b/cache/src/main/scala/coursier/Cache.scala @@ -204,7 +204,7 @@ object Cache { -\/(FileError.ConcurrentDownload(url)) } catch { case e: Exception => - -\/(FileError.DownloadError(s"Caught $e (${e.getMessage})")) + -\/(FileError.DownloadError(s"Caught $e${Option(e.getMessage).fold("")(" (" + _ + ")")}")) } private def temporaryFile(file: File): File = { @@ -232,7 +232,7 @@ object Cache { def printError(e: Exception): Unit = scala.Console.err.println( - s"Cannot instantiate $clsName: $e${Option(e.getMessage).map(" ("+_+")")}" + s"Cannot instantiate $clsName: $e${Option(e.getMessage).fold("")(" ("+_+")")}" ) val handlerOpt = clsOpt.flatMap { @@ -811,18 +811,6 @@ object Cache { buffer.toByteArray } - def readFully(is: => InputStream) = - Task { - \/.fromTryCatchNonFatal { - val is0 = is - val b = - try readFullySync(is0) - finally is0.close() - - new String(b, "UTF-8") - } .leftMap(_.getMessage) - } - def withContent(is: InputStream, f: (Array[Byte], Int) => Unit): Unit = { val data = Array.ofDim[Byte](16384) diff --git a/cache/src/main/scala/coursier/CacheParse.scala b/cache/src/main/scala/coursier/CacheParse.scala index becd60d43..4506bcd60 100644 --- a/cache/src/main/scala/coursier/CacheParse.scala +++ b/cache/src/main/scala/coursier/CacheParse.scala @@ -31,7 +31,7 @@ object CacheParse { repo.success } catch { case e: MalformedURLException => - ("Error parsing URL " + url + Option(e.getMessage).map(" (" + _ + ")").mkString).failure + ("Error parsing URL " + url + Option(e.getMessage).fold("")(" (" + _ + ")")).failure } } diff --git a/cache/src/main/scala/coursier/Platform.scala b/cache/src/main/scala/coursier/Platform.scala index 2e7d7b6d3..33acf1bde 100644 --- a/cache/src/main/scala/coursier/Platform.scala +++ b/cache/src/main/scala/coursier/Platform.scala @@ -32,10 +32,10 @@ object Platform { new String(b, "UTF-8") } .leftMap{ - case e: java.io.FileNotFoundException => + case e: java.io.FileNotFoundException if e.getMessage != null => s"Not found: ${e.getMessage}" case e => - s"$e: ${e.getMessage}" + s"$e${Option(e.getMessage).fold("")(" (" + _ + ")")}" } } diff --git a/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala b/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala index dc6717e55..fa28ff693 100644 --- a/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala +++ b/cli/src/main/scala-2.11/coursier/cli/Bootstrap.scala @@ -193,7 +193,7 @@ case class Bootstrap( try Files.write(output0.toPath, shellPreamble.getBytes("UTF-8") ++ buffer.toByteArray) catch { case e: IOException => - Console.err.println(s"Error while writing $output0: ${e.getMessage}") + Console.err.println(s"Error while writing $output0${Option(e.getMessage).fold("")(" (" + _ + ")")}") sys.exit(1) } @@ -218,7 +218,10 @@ case class Bootstrap( case e: UnsupportedOperationException => // Ignored case e: IOException => - Console.err.println(s"Error while making $output0 executable: ${e.getMessage}") + Console.err.println( + s"Error while making $output0 executable" + + Option(e.getMessage).fold("")(" (" + _ + ")") + ) sys.exit(1) } diff --git a/core/jvm/src/main/scala/coursier/core/compatibility/package.scala b/core/jvm/src/main/scala/coursier/core/compatibility/package.scala index 3a8f6dc49..c290caaa5 100644 --- a/core/jvm/src/main/scala/coursier/core/compatibility/package.scala +++ b/core/jvm/src/main/scala/coursier/core/compatibility/package.scala @@ -14,7 +14,7 @@ package object compatibility { def xmlParse(s: String): Either[String, Xml.Node] = { def parse = try Right(scala.xml.XML.loadString(s)) - catch { case e: Exception => Left(e.getMessage) } + catch { case e: Exception => Left(e.toString + Option(e.getMessage).fold("")(" (" + _ + ")")) } def fromNode(node: scala.xml.Node): Xml.Node = new Xml.Node { diff --git a/fetch-js/src/main/scala/coursier/Platform.scala b/fetch-js/src/main/scala/coursier/Platform.scala index ccb91f8ed..f09ced57d 100644 --- a/fetch-js/src/main/scala/coursier/Platform.scala +++ b/fetch-js/src/main/scala/coursier/Platform.scala @@ -80,7 +80,7 @@ object Platform { get(artifact.url) .map(\/-(_)) .recover { case e: Exception => - -\/(e.getMessage) + -\/(e.toString + Option(e.getMessage).fold("")(" (" + _ + ")")) } } ) @@ -104,9 +104,10 @@ object Platform { .flatMap(_ => get(artifact.url)) .map { s => logger.fetched(artifact.url); \/-(s) } .recover { case e: Exception => - logger.other(artifact.url, e.getMessage) - -\/(e.getMessage) - } + val msg = e.toString + Option(e.getMessage).fold("")(" (" + _ + ")") + logger.other(artifact.url, msg) + -\/(msg) + } } ) } diff --git a/plugin/src/main/scala-2.10/coursier/FromSbt.scala b/plugin/src/main/scala-2.10/coursier/FromSbt.scala index db49a7943..be68cc9fb 100644 --- a/plugin/src/main/scala-2.10/coursier/FromSbt.scala +++ b/plugin/src/main/scala-2.10/coursier/FromSbt.scala @@ -155,7 +155,7 @@ object FromSbt { log.warn( "Error parsing Maven repository base " + root + - Option(e.getMessage).map(" (" + _ + ")").mkString + + Option(e.getMessage).fold("")(" (" + _ + ")") + ", ignoring it" )