From 5f9f38f300d8651840ea7c8ed88b6675fea6e8c8 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Wed, 29 Oct 2014 21:55:14 -0400 Subject: [PATCH] Fix cross-JDK issues around invalid URIs in JDK6 --- .../sbt/compiler/javac/DiagnosticsReporter.scala | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/compile/src/main/scala/sbt/compiler/javac/DiagnosticsReporter.scala b/compile/src/main/scala/sbt/compiler/javac/DiagnosticsReporter.scala index 2fdb63790..cd908bc63 100644 --- a/compile/src/main/scala/sbt/compiler/javac/DiagnosticsReporter.scala +++ b/compile/src/main/scala/sbt/compiler/javac/DiagnosticsReporter.scala @@ -34,6 +34,14 @@ final class DiagnosticsReporter(reporter: Reporter) extends DiagnosticListener[J case _ => getRawMessage } } + private def fixSource[T <: JavaFileObject](source: T): Option[String] = { + try Option(source).map(_.toUri.normalize).map(new File(_)).map(_.getAbsolutePath) + catch { + case t: IllegalArgumentException => + // Oracle JDK6 has a super dumb notion of what a URI is + Option(source).map(_.toUri.toString) + } + } override def report(d: Diagnostic[_ <: JavaFileObject]) { val severity = d.getKind match { @@ -55,12 +63,14 @@ final class DiagnosticsReporter(reporter: Reporter) extends DiagnosticListener[J getOrElse("") } override val offset = Logger.o2m(Option(Integer.valueOf(d.getPosition.toInt))) - private val sourceUri = Option(d.getSource).map(_.toUri.toString) + private val sourceUri = fixSource(d.getSource) override val sourcePath = Logger.o2m(sourceUri) override val sourceFile = Logger.o2m(sourceUri.map(new File(_))) override val pointer = Logger.o2m(Option.empty[Integer]) override val pointerSpace = Logger.o2m(Option.empty[String]) - override def toString = s"${d.getSource}:${d.getLineNumber}" + override def toString = + if (sourceUri.isDefined) s"${sourceUri.get}:${if (line.isDefined) line.get else -1}" + else "" } reporter.log(pos, msg, severity) }