summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/symtab/Definitions.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-05-23 14:33:28 +0000
committerMartin Odersky <odersky@gmail.com>2006-05-23 14:33:28 +0000
commit673fb7e02b704b9cc288b1b591f982b3131b16c9 (patch)
tree008ee074a99f1df990c08096ffb81776aea8aeb7 /src/compiler/scala/tools/nsc/symtab/Definitions.scala
parentb7ff021e0870d51efc150954c959b70bef539285 (diff)
downloadscala-673fb7e02b704b9cc288b1b591f982b3131b16c9.tar.gz
scala-673fb7e02b704b9cc288b1b591f982b3131b16c9.tar.bz2
scala-673fb7e02b704b9cc288b1b591f982b3131b16c9.zip
Fixed problem with classOf[x.type]
Diffstat (limited to 'src/compiler/scala/tools/nsc/symtab/Definitions.scala')
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Definitions.scala18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Definitions.scala b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
index 38c90278ed..cea264467c 100644
--- a/src/compiler/scala/tools/nsc/symtab/Definitions.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Definitions.scala
@@ -392,16 +392,22 @@ trait Definitions requires SymbolTable {
def isUnboxedClass(sym: Symbol): boolean = isValueClass(sym) || sym == ArrayClass;
def signature(tp: Type): String = {
+ def erasure(tp: Type): Type = tp match {
+ case st: SubType => erasure(st.supertype)
+ case RefinedType(parents, _) => erasure(parents.head)
+ case _ => tp
+ }
def flatNameString(sym: Symbol, separator: char): String =
if (sym.owner.isPackageClass) sym.fullNameString('.')
else flatNameString(sym.owner, separator) + "$" + sym.simpleName;
- def signature1(tp: Type): String = {
- if (tp.symbol == ArrayClass) "[" + signature1(tp.typeArgs.head);
- else if (isValueClass(tp.symbol)) String.valueOf(abbrvTag(tp.symbol))
- else "L" + flatNameString(tp.symbol, '/') + ";"
+ def signature1(etp: Type): String = {
+ if (etp.symbol == ArrayClass) "[" + signature1(erasure(etp.typeArgs.head))
+ else if (isValueClass(etp.symbol)) String.valueOf(abbrvTag(etp.symbol))
+ else "L" + flatNameString(etp.symbol, '/') + ";"
}
- if (tp.symbol == ArrayClass) signature1(tp);
- else flatNameString(tp.symbol, '.')
+ val etp = erasure(tp)
+ if (etp.symbol == ArrayClass) signature1(etp)
+ else flatNameString(etp.symbol, '.')
}
private var isInitialized = false;