diff options
author | Martin Odersky <odersky@gmail.com> | 2008-10-31 11:33:20 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2008-10-31 11:33:20 +0000 |
commit | 009af5c5334458d386e5dda1adb7d114b3f9430b (patch) | |
tree | 90fddd3687e8c531019e6abf29b3db9ee8c44fc4 | |
parent | 22bb269c5e4a4ed2fb684a0aa5ec9fbbd9c2a6d8 (diff) | |
download | scala-009af5c5334458d386e5dda1adb7d114b3f9430b.tar.gz scala-009af5c5334458d386e5dda1adb7d114b3f9430b.tar.bz2 scala-009af5c5334458d386e5dda1adb7d114b3f9430b.zip |
fixed #1460, #1467
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Erasure.scala | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index 271fafc086..b919c0e2d3 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -232,16 +232,24 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer { case AnnotatedType(_, atp, _) => jsig(atp) case _ => - jsig(erasure(tp)) + val etp = erasure(tp) + if (etp eq tp) throw new UnknownSig + else jsig(etp) } } if (needsJavaSig(sym.info)) { - //println("Java sig of "+sym+" is "+jsig2(true, List(), sym.info))//DEBUG - Some(jsig2(true, List(), sym.info)) + try { + //println("Java sig of "+sym+" is "+jsig2(true, List(), sym.info))//DEBUG + Some(jsig2(true, List(), sym.info)) + } catch { + case ex: UnknownSig => None + } } else None } + class UnknownSig extends Exception + /** Type reference after erasure */ def erasedTypeRef(sym: Symbol): Type = typeRef(erasure(sym.owner.tpe), sym, List()) |