diff options
author | Martin Odersky <odersky@gmail.com> | 2017-04-04 20:47:04 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2017-04-04 20:47:04 +0200 |
commit | bc269505221ac36e48ce64dcef2e1688d05d93c6 (patch) | |
tree | d91f5da35d68390eb681014ebccf641830c31c25 /compiler/src | |
parent | a71cb970b779692d2dd68cd9ba00d2be5e6759be (diff) | |
download | dotty-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.scala | 10 |
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) } |