diff options
Diffstat (limited to 'src')
3 files changed, 13 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/FatalError.scala b/src/compiler/scala/tools/nsc/FatalError.scala index 9d219410e2..836bd79175 100644 --- a/src/compiler/scala/tools/nsc/FatalError.scala +++ b/src/compiler/scala/tools/nsc/FatalError.scala @@ -7,3 +7,10 @@ package scala.tools.nsc case class FatalError(msg: String) extends Exception(msg) +class MissingRequirementError(val req: String) extends FatalError(req + " not found.") +object MissingRequirementError { + def unapply(x: Throwable) = x match { + case x: MissingRequirementError => Some(x.req) + case _ => None + } +} diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala index f16a7d2716..559f3f5890 100644 --- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala +++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala @@ -399,7 +399,7 @@ trait Definitions { if (result == NoSymbol) { if (settings.debug.value) { Console.println(sym.info); Console.println(sym.info.members) }//debug - throw new FatalError((if (module) "object " else "class ") + fullname + " not found.") + throw new MissingRequirementError((if (module) "object " else "class ") + fullname) } result } diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala index 426a9d4a52..a4dcdc8fee 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala @@ -51,6 +51,9 @@ abstract class ClassfileParser { } def parse(file: AbstractFile, root: Symbol) = try { + def handleMissing(e: MissingRequirementError) = + throw new IOException("Missing dependency '" + e.req + "', required by " + in.file) + def handleError(e: Exception) = { if (settings.debug.value) e.printStackTrace() throw new IOException("class file '" + in.file + "' is broken\n(" + { @@ -84,8 +87,8 @@ abstract class ClassfileParser { this.pool = new ConstantPool parseClass() } catch { - case e: FatalError => handleError(e) - case e: RuntimeException => handleError(e) + case e: MissingRequirementError => handleMissing(e) + case e: RuntimeException => handleError(e) } } finally { busy = false |