summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2008-10-31 11:33:20 +0000
committerMartin Odersky <odersky@gmail.com>2008-10-31 11:33:20 +0000
commit009af5c5334458d386e5dda1adb7d114b3f9430b (patch)
tree90fddd3687e8c531019e6abf29b3db9ee8c44fc4
parent22bb269c5e4a4ed2fb684a0aa5ec9fbbd9c2a6d8 (diff)
downloadscala-009af5c5334458d386e5dda1adb7d114b3f9430b.tar.gz
scala-009af5c5334458d386e5dda1adb7d114b3f9430b.tar.bz2
scala-009af5c5334458d386e5dda1adb7d114b3f9430b.zip
fixed #1460, #1467
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala14
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())