diff options
author | Antonio Cunei <antonio.cunei@epfl.ch> | 2011-11-18 17:04:59 +0000 |
---|---|---|
committer | Antonio Cunei <antonio.cunei@epfl.ch> | 2011-11-18 17:04:59 +0000 |
commit | e9296ba5fcef39cc807d5f4187ce15722f73944e (patch) | |
tree | 54411648aeba0ffe23376405ced1805f54df9056 | |
parent | ed0c41d2e4d89f18a64cc18752b404c30e315825 (diff) | |
download | scala-e9296ba5fcef39cc807d5f4187ce15722f73944e.tar.gz scala-e9296ba5fcef39cc807d5f4187ce15722f73944e.tar.bz2 scala-e9296ba5fcef39cc807d5f4187ce15722f73944e.zip |
Backport of r26028.
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala b/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala index 815b4705bd..94d9bca945 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/UnPickler.scala @@ -14,6 +14,7 @@ import Flags._ import scala.reflect.generic.PickleFormat._ import collection.mutable.{HashMap, ListBuffer} import annotation.switch +import java.io.IOException /** @author Martin Odersky * @version 1.0 @@ -58,6 +59,17 @@ abstract class UnPickler extends reflect.generic.UnPickler { def toTypeError(e: MissingRequirementError) = new TypeError(e.msg) + /** Convert to a type error, that is printed gracefully instead of crashing. + * + * Similar in intent to what SymbolLoader does (but here we don't have access to + * error reporting, so we rely on the typechecker to report the error). + * + * @note Unlike 2.10, 2.9 may throw either IOException or MissingRequirementError. This + * simply tries to make it more robust. + */ + def toTypeError(e: IOException) = + new TypeError(e.getMessage) + /** A lazy type which when completed returns type at index `i`. */ private class LazyTypeRef(i: Int) extends LazyType { private val definedAtRunId = currentRunId @@ -69,6 +81,7 @@ abstract class UnPickler extends reflect.generic.UnPickler { if (currentRunId != definedAtRunId) sym.setInfo(adaptToNewRunMap(tp)) } catch { case e: MissingRequirementError => throw toTypeError(e) + case e: IOException => throw toTypeError(e) } override def load(sym: Symbol) { complete(sym) } } @@ -88,6 +101,7 @@ abstract class UnPickler extends reflect.generic.UnPickler { sym.asInstanceOf[TermSymbol].setAlias(alias) } catch { case e: MissingRequirementError => throw toTypeError(e) + case e: IOException => throw toTypeError(e) } } } |