aboutsummaryrefslogtreecommitdiff
path: root/compiler/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-04-04 20:47:04 +0200
committerMartin Odersky <odersky@gmail.com>2017-04-04 20:47:04 +0200
commitbc269505221ac36e48ce64dcef2e1688d05d93c6 (patch)
treed91f5da35d68390eb681014ebccf641830c31c25 /compiler/src
parenta71cb970b779692d2dd68cd9ba00d2be5e6759be (diff)
downloaddotty-bc269505221ac36e48ce64dcef2e1688d05d93c6.tar.gz
dotty-bc269505221ac36e48ce64dcef2e1688d05d93c6.tar.bz2
dotty-bc269505221ac36e48ce64dcef2e1688d05d93c6.zip
Make leak avoidance more robust
If class files are missing, finding an underlying class reference might give a NoType. This caused an asInstanceOf to fail. We now handle that case gracefully.
Diffstat (limited to 'compiler/src')
-rw-r--r--compiler/src/dotty/tools/dotc/typer/Checking.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/typer/Checking.scala b/compiler/src/dotty/tools/dotc/typer/Checking.scala
index b43391592..4b5b4476d 100644
--- a/compiler/src/dotty/tools/dotc/typer/Checking.scala
+++ b/compiler/src/dotty/tools/dotc/typer/Checking.scala
@@ -400,8 +400,14 @@ object Checking {
case tp: ClassInfo =>
tp.derivedClassInfo(
prefix = apply(tp.prefix),
- classParents = tp.parentsWithArgs.map(p =>
- apply(p).underlyingClassRef(refinementOK = false).asInstanceOf[TypeRef]))
+ classParents =
+ tp.parentsWithArgs.map { p =>
+ apply(p).underlyingClassRef(refinementOK = false) match {
+ case ref: TypeRef => ref
+ case _ => defn.ObjectType // can happen if class files are missing
+ }
+ }
+ )
case _ =>
mapOver(tp)
}