summaryrefslogtreecommitdiff
path: root/src/reflect/scala
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-07-30 21:14:42 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-08-02 15:50:01 +0200
commit013acf6eb0117ca12ab2a0d0e8560df40a7392a3 (patch)
tree2f69939025e5796381327bd16f602b5be9cfcba4 /src/reflect/scala
parent367b82de04bdee24b0994e30c1464297eae16d74 (diff)
downloadscala-013acf6eb0117ca12ab2a0d0e8560df40a7392a3.tar.gz
scala-013acf6eb0117ca12ab2a0d0e8560df40a7392a3.tar.bz2
scala-013acf6eb0117ca12ab2a0d0e8560df40a7392a3.zip
renames asType to toType and asXXXSymbol to asXXX
This renaming arguably makes the intent of `asType` more clear, but more importantly it shaves 6 symbols off pervasive casts that are required to anything meaningful with reflection API (as in mirror.reflectMethod(tpe.member(newTermName("x")).asMethodSymbol)).
Diffstat (limited to 'src/reflect/scala')
-rw-r--r--src/reflect/scala/reflect/api/Mirrors.scala10
-rw-r--r--src/reflect/scala/reflect/api/Symbols.scala18
-rw-r--r--src/reflect/scala/reflect/api/TagInterop.scala4
-rw-r--r--src/reflect/scala/reflect/internal/BuildUtils.scala8
-rw-r--r--src/reflect/scala/reflect/internal/Definitions.scala42
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala12
-rw-r--r--src/reflect/scala/reflect/internal/Symbols.scala6
-rw-r--r--src/reflect/scala/reflect/internal/Trees.scala6
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala29
9 files changed, 58 insertions, 77 deletions
diff --git a/src/reflect/scala/reflect/api/Mirrors.scala b/src/reflect/scala/reflect/api/Mirrors.scala
index fe4348d568..a4d86cf1fd 100644
--- a/src/reflect/scala/reflect/api/Mirrors.scala
+++ b/src/reflect/scala/reflect/api/Mirrors.scala
@@ -34,7 +34,7 @@ trait Mirrors { self: Universe =>
* that can be used to get and, if appropriate, set the value of the field.
*
* To get a field symbol by the name of the field you would like to reflect,
- * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the field>)).asTermSymbol.accessed`.
+ * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the field>)).asTerm.accessed`.
* For further information about member lookup refer to `Symbol.typeSignature`.
*
* The input symbol can be either private or non-private (Scala reflection transparently deals with visibility).
@@ -54,7 +54,7 @@ trait Mirrors { self: Universe =>
* that can be used to invoke the method provided.
*
* To get a method symbol by the name of the method you would like to reflect,
- * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the method>)).asMethodSymbol`.
+ * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the method>)).asMethod`.
* For further information about member lookup refer to `Symbol.typeSignature`.
*
* The input symbol can be either private or non-private (Scala reflection transparently deals with visibility).
@@ -66,7 +66,7 @@ trait Mirrors { self: Universe =>
* that can be used to create instances of the class, inspect its companion object or perform further reflections.
*
* To get a class symbol by the name of the class you would like to reflect,
- * use `<this mirror>.symbol.typeSignature.member(newTypeName(<name of the class>)).asClassSymbol`.
+ * use `<this mirror>.symbol.typeSignature.member(newTypeName(<name of the class>)).asClass`.
* For further information about member lookup refer to `Symbol.typeSignature`.
*
* The input symbol can be either private or non-private (Scala reflection transparently deals with visibility).
@@ -78,7 +78,7 @@ trait Mirrors { self: Universe =>
* that can be used to get the instance of the object or inspect its companion class.
*
* To get a module symbol by the name of the object you would like to reflect,
- * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the object>)).asModuleSymbol`.
+ * use `<this mirror>.symbol.typeSignature.member(newTermName(<name of the object>)).asModule`.
* For further information about member lookup refer to `Symbol.typeSignature`.
*
* The input symbol can be either private or non-private (Scala reflection transparently deals with visibility).
@@ -201,7 +201,7 @@ trait Mirrors { self: Universe =>
* that can be used to invoke it and construct instances of this mirror's symbols.
*
* To get a constructor symbol you would like to reflect,
- * use `<this mirror>.symbol.typeSignature.member(nme.CONSTRUCTOR).asMethodSymbol`.
+ * use `<this mirror>.symbol.typeSignature.member(nme.CONSTRUCTOR).asMethod`.
* For further information about member lookup refer to `Symbol.typeSignature`.
*
* The input symbol can be either private or non-private (Scala reflection transparently deals with visibility).
diff --git a/src/reflect/scala/reflect/api/Symbols.scala b/src/reflect/scala/reflect/api/Symbols.scala
index cd9044c934..e55c1ea11a 100644
--- a/src/reflect/scala/reflect/api/Symbols.scala
+++ b/src/reflect/scala/reflect/api/Symbols.scala
@@ -236,24 +236,6 @@ trait Symbols extends base.Symbols { self: Universe =>
/** Does this symbol represent an existentially bound type?
*/
def isExistential : Boolean
-
- /** A type reference that refers to this type symbol seen
- * as a member of given type `site`.
- */
- def asTypeIn(site: Type): Type
-
- /** A type reference that refers to this type symbol
- * Note if symbol is a member of a class, one almost always is interested
- * in `asTypeIn` with a site type instead.
- *
- * Example: Given a class declaration `class C[T] { ... } `, that generates a symbol
- * `C`. Then `C.asType` is the type `C[T]`.
- *
- * By contrast, `C.typeSignature` would be a type signature of form
- * `PolyType(ClassInfoType(...))` that describes type parameters, value
- * parameters, parent types, and members of `C`.
- */
- def asType: Type // !!! Same as typeSignature.
}
/** The API of method symbols */
diff --git a/src/reflect/scala/reflect/api/TagInterop.scala b/src/reflect/scala/reflect/api/TagInterop.scala
index f1938083b5..4d2254cb9f 100644
--- a/src/reflect/scala/reflect/api/TagInterop.scala
+++ b/src/reflect/scala/reflect/api/TagInterop.scala
@@ -27,8 +27,8 @@ trait TagInterop { self: JavaUniverse =>
val jm = mirror.asInstanceOf[ju.Mirror]
val sym = jm.classSymbol(manifest.erasure)
val tpe =
- if (manifest.typeArguments.isEmpty) sym.asType
- else ju.appliedType(sym.asTypeConstructor, manifest.typeArguments map (targ => ju.manifestToTypeTag(jm, targ)) map (_.in(jm).tpe))
+ if (manifest.typeArguments.isEmpty) sym.toType
+ else ju.appliedType(sym.toTypeConstructor, manifest.typeArguments map (targ => ju.manifestToTypeTag(jm, targ)) map (_.in(jm).tpe))
tpe.asInstanceOf[U # Type]
case u =>
u.manifestToTypeTag(mirror.asInstanceOf[u.Mirror], manifest).in(mirror).tpe
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala
index ad59605760..74b9442076 100644
--- a/src/reflect/scala/reflect/internal/BuildUtils.scala
+++ b/src/reflect/scala/reflect/internal/BuildUtils.scala
@@ -8,11 +8,11 @@ trait BuildUtils extends base.BuildUtils { self: SymbolTable =>
class BuildImpl extends BuildBase {
def selectType(owner: Symbol, name: String): TypeSymbol =
- select(owner, newTypeName(name)).asTypeSymbol
+ select(owner, newTypeName(name)).asType
def selectTerm(owner: Symbol, name: String): TermSymbol = {
- val result = select(owner, newTermName(name)).asTermSymbol
- if (result.isOverloaded) result.suchThat(!_.isMethod).asTermSymbol
+ val result = select(owner, newTermName(name)).asTerm
+ if (result.isOverloaded) result.suchThat(!_.isMethod).asTerm
else result
}
@@ -26,7 +26,7 @@ trait BuildUtils extends base.BuildUtils { self: SymbolTable =>
def selectOverloadedMethod(owner: Symbol, name: String, index: Int): MethodSymbol = {
val result = owner.info.decl(newTermName(name)).alternatives(index)
- if (result ne NoSymbol) result.asMethodSymbol
+ if (result ne NoSymbol) result.asMethod
else MissingRequirementError.notFound("overloaded method %s #%d in %s".format(name, index, owner.fullName))
}
diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala
index 90aa0b732c..7248fac5fb 100644
--- a/src/reflect/scala/reflect/internal/Definitions.scala
+++ b/src/reflect/scala/reflect/internal/Definitions.scala
@@ -20,21 +20,21 @@ trait Definitions extends api.StandardDefinitions {
object definitions extends DefinitionsClass
// [Eugene] find a way to make these non-lazy
- lazy val ByteTpe = definitions.ByteClass.asType
- lazy val ShortTpe = definitions.ShortClass.asType
- lazy val CharTpe = definitions.CharClass.asType
- lazy val IntTpe = definitions.IntClass.asType
- lazy val LongTpe = definitions.LongClass.asType
- lazy val FloatTpe = definitions.FloatClass.asType
- lazy val DoubleTpe = definitions.DoubleClass.asType
- lazy val BooleanTpe = definitions.BooleanClass.asType
- lazy val UnitTpe = definitions.UnitClass.asType
- lazy val AnyTpe = definitions.AnyClass.asType
- lazy val ObjectTpe = definitions.ObjectClass.asType
- lazy val AnyValTpe = definitions.AnyValClass.asType
- lazy val AnyRefTpe = definitions.AnyRefClass.asType
- lazy val NothingTpe = definitions.NothingClass.asType
- lazy val NullTpe = definitions.NullClass.asType
+ lazy val ByteTpe = definitions.ByteClass.toTypeConstructor
+ lazy val ShortTpe = definitions.ShortClass.toTypeConstructor
+ lazy val CharTpe = definitions.CharClass.toTypeConstructor
+ lazy val IntTpe = definitions.IntClass.toTypeConstructor
+ lazy val LongTpe = definitions.LongClass.toTypeConstructor
+ lazy val FloatTpe = definitions.FloatClass.toTypeConstructor
+ lazy val DoubleTpe = definitions.DoubleClass.toTypeConstructor
+ lazy val BooleanTpe = definitions.BooleanClass.toTypeConstructor
+ lazy val UnitTpe = definitions.UnitClass.toTypeConstructor
+ lazy val AnyTpe = definitions.AnyClass.toTypeConstructor
+ lazy val ObjectTpe = definitions.ObjectClass.toTypeConstructor
+ lazy val AnyValTpe = definitions.AnyValClass.toTypeConstructor
+ lazy val AnyRefTpe = definitions.AnyRefClass.toTypeConstructor
+ lazy val NothingTpe = definitions.NothingClass.toTypeConstructor
+ lazy val NullTpe = definitions.NullClass.toTypeConstructor
/** Since both the value parameter types and the result type may
* require access to the type parameter symbols, we model polymorphic
@@ -183,11 +183,11 @@ trait Definitions extends api.StandardDefinitions {
// It becomes tricky to create dedicated objects for other symbols because
// of initialization order issues.
lazy val JavaLangPackage = getRequiredPackage(sn.JavaLang)
- lazy val JavaLangPackageClass = JavaLangPackage.moduleClass.asClassSymbol
+ lazy val JavaLangPackageClass = JavaLangPackage.moduleClass.asClass
lazy val ScalaPackage = getRequiredPackage(nme.scala_)
- lazy val ScalaPackageClass = ScalaPackage.moduleClass.asClassSymbol
+ lazy val ScalaPackageClass = ScalaPackage.moduleClass.asClass
lazy val RuntimePackage = getRequiredPackage("scala.runtime")
- lazy val RuntimePackageClass = RuntimePackage.moduleClass.asClassSymbol
+ lazy val RuntimePackageClass = RuntimePackage.moduleClass.asClass
lazy val JavaLangEnumClass = requiredClass[java.lang.Enum[_]]
@@ -1045,7 +1045,7 @@ trait Definitions extends api.StandardDefinitions {
// System.err.println("isMethod = " + result.isMethod)
// System.err.println("isTerm = " + result.isTerm)
// System.err.println("isValue = " + result.isValue)
- // result.asMethodSymbol
+ // result.asMethod
//
// prints this:
//
@@ -1074,8 +1074,8 @@ trait Definitions extends api.StandardDefinitions {
// [scalacfork]
// [scalacfork] uncaught exception during compilation: java.lang.ClassCastException
// [scalacfork] error: java.lang.ClassCastException: value apply
- // [scalacfork] at scala.reflect.base.Symbols$SymbolBase$class.asMethodSymbol(Symbols.scala:118)
- // [scalacfork] at scala.reflect.internal.Symbols$SymbolContextApiImpl.asMethodSymbol(Symbols.scala:63)
+ // [scalacfork] at scala.reflect.base.Symbols$SymbolBase$class.asMethod(Symbols.scala:118)
+ // [scalacfork] at scala.reflect.internal.Symbols$SymbolContextApiImpl.asMethod(Symbols.scala:63)
// [scalacfork] at scala.reflect.internal.Definitions$DefinitionsClass.Symbol_apply(Definitions.scala:381)
// [Eugene++] should be a ClassCastException instead?
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index 75962ff9d0..133b035228 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -628,14 +628,13 @@ trait StdNames {
val array_length : NameType = "array_length"
val array_update : NameType = "array_update"
val arraycopy: NameType = "arraycopy"
- val asTermSymbol: NameType = "asTermSymbol"
- val asModuleSymbol: NameType = "asModuleSymbol"
- val asMethodSymbol: NameType = "asMethodSymbol"
- val asTypeSymbol: NameType = "asTypeSymbol"
- val asClassSymbol: NameType = "asClassSymbol"
+ val asTerm: NameType = "asTerm"
+ val asModule: NameType = "asModule"
+ val asMethod: NameType = "asMethod"
+ val asType: NameType = "asType"
+ val asClass: NameType = "asClass"
val asInstanceOf_ : NameType = "asInstanceOf"
val asInstanceOf_Ob : NameType = "$asInstanceOf"
- val asTypeConstructor: NameType = "asTypeConstructor"
val assert_ : NameType = "assert"
val assume_ : NameType = "assume"
val basis : NameType = "basis"
@@ -767,6 +766,7 @@ trait StdNames {
val toObjectArray : NameType = "toObjectArray"
val toSeq: NameType = "toSeq"
val toString_ : NameType = if (forMSIL) "ToString" else "toString"
+ val toTypeConstructor: NameType = "toTypeConstructor"
val tpe : NameType = "tpe"
val tree : NameType = "tree"
val true_ : NameType = "true"
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala
index 68144da2d7..372520e48f 100644
--- a/src/reflect/scala/reflect/internal/Symbols.scala
+++ b/src/reflect/scala/reflect/internal/Symbols.scala
@@ -75,9 +75,9 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
def typeSignature: Type = info
def typeSignatureIn(site: Type): Type = site memberInfo this
- def asType: Type = tpe
- def asTypeIn(site: Type): Type = site.memberType(this)
- def asTypeConstructor: Type = typeConstructor
+ def toType: Type = tpe
+ def toTypeIn(site: Type): Type = site.memberType(this)
+ def toTypeConstructor: Type = typeConstructor
def setFlags(flags: FlagSet): this.type = setInternalFlags(flags)
def setInternalFlags(flag: Long): this.type = { setFlag(flag); this }
def setTypeSignature(tpe: Type): this.type = { setInfo(tpe); this }
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala
index 619e3bc170..ddc40b2e9f 100644
--- a/src/reflect/scala/reflect/internal/Trees.scala
+++ b/src/reflect/scala/reflect/internal/Trees.scala
@@ -1024,14 +1024,14 @@ trait Trees extends api.Trees { self: SymbolTable =>
}
}
-
+
/** Delegate for a TypeTree symbol. This operation is unsafe because
* it may trigger type checking when forcing the type symbol of the
* underlying type.
*/
protected def typeTreeSymbol(tree: TypeTree): Symbol =
if (tree.tpe == null) null else tree.tpe.typeSymbol
-
+
// --- generic traversers and transformers
override protected def itraverse(traverser: Traverser, tree: Tree): Unit = {
@@ -1266,7 +1266,7 @@ trait Trees extends api.Trees { self: SymbolTable =>
}
}
- private def mclass(sym: Symbol) = sym map (_.asModuleSymbol.moduleClass)
+ private def mclass(sym: Symbol) = sym map (_.asModule.moduleClass)
// --- specific traversers and transformers
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index 0878801715..6ae7e6d7eb 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -150,7 +150,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
def classSymbol(rtcls: RuntimeClass): ClassSymbol = classToScala(rtcls)
- def moduleSymbol(rtcls: RuntimeClass): ModuleSymbol = classToScala(rtcls).companionModule.asModuleSymbol
+ def moduleSymbol(rtcls: RuntimeClass): ModuleSymbol = classToScala(rtcls).companionModule.asModule
private def checkMemberOf(wannabe: Symbol, owner: Symbol) =
if (!owner.info.member(wannabe.name).alternatives.contains(wannabe)) ErrorNotMember(wannabe, owner)
@@ -166,7 +166,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
if (field.isGetter) nme.getterToLocal(field.name)
else if (field.isSetter) nme.getterToLocal(nme.setterToGetter(field.name))
else field.name
- val field1 = (field.owner.info decl name).asTermSymbol
+ val field1 = (field.owner.info decl name).asTerm
try fieldToJava(field1)
catch {
case _: NoSuchFieldException => ErrorNonExistentField(field1)
@@ -260,7 +260,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
private class JavaModuleMirror(val outer: AnyRef, val symbol: ModuleSymbol)
extends JavaTemplateMirror with ModuleMirror {
- def erasure = symbol.moduleClass.asClassSymbol
+ def erasure = symbol.moduleClass.asClass
def isStatic = true
def instance = {
if (!symbol.owner.isPackageClass) throw new Error("inner and nested modules are not supported yet")
@@ -629,7 +629,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
val preOwner = classToScala(jOwner)
val owner = followStatic(preOwner, jmeth.getModifiers)
(lookup(owner, jmeth.getName) suchThat (erasesTo(_, jmeth)) orElse jmethodAsScala(jmeth))
- .asMethodSymbol
+ .asMethod
}
/**
@@ -643,7 +643,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
private def constructorToScala1(jconstr: jConstructor[_]): MethodSymbol = {
val owner = followStatic(classToScala(jconstr.getDeclaringClass), jconstr.getModifiers)
(lookup(owner, jconstr.getName) suchThat (erasesTo(_, jconstr)) orElse jconstrAsScala(jconstr))
- .asMethodSymbol
+ .asMethod
}
/**
@@ -657,8 +657,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
private def fieldToScala1(jfield: jField): TermSymbol = {
val owner = followStatic(classToScala(jfield.getDeclaringClass), jfield.getModifiers)
- (lookup(owner, jfield.getName) suchThat (!_.isMethod) orElse jfieldAsScala(jfield))
- .asTermSymbol
+ (lookup(owner, jfield.getName) suchThat (!_.isMethod) orElse jfieldAsScala(jfield)).asTerm
}
/**
@@ -691,7 +690,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
val name = (fullname: TermName) drop split + 1
val opkg = owner.info decl name
if (opkg.isPackage)
- opkg.asModuleSymbol
+ opkg.asModule
else if (opkg == NoSymbol) {
val pkg = owner.newPackage(name)
pkg.moduleClass setInfo new LazyPackageType
@@ -758,7 +757,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
s"""${if (cls == NoSymbol) "not a type: symbol" else "no symbol could be"}
| loaded from $jclazz in $owner with name $simpleName and classloader $classLoader""".stripMargin)
- cls.asClassSymbol
+ cls.asClass
}
}
@@ -773,7 +772,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
private def typeParamToScala1(jparam: jTypeVariable[_ <: GenericDeclaration]): TypeSymbol = {
val owner = genericDeclarationToScala(jparam.getGenericDeclaration)
owner.info match {
- case PolyType(tparams, _) => tparams.find(_.name.toString == jparam.getName).get.asTypeSymbol
+ case PolyType(tparams, _) => tparams.find(_.name.toString == jparam.getName).get.asType
}
}
@@ -941,7 +940,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
else if (clazz.owner.isPackageClass)
javaClass(clazz.javaClassName)
else if (clazz.owner.isClass)
- classToJava(clazz.owner.asClassSymbol)
+ classToJava(clazz.owner.asClass)
.getDeclaredClasses
.find(_.getSimpleName == clazz.name.toString)
.getOrElse(noClass)
@@ -957,7 +956,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
* @param meth The Scala field.
*/
def fieldToJava(fld: TermSymbol): jField = fieldCache.toJava(fld) {
- val jclazz = classToJava(fld.owner.asClassSymbol)
+ val jclazz = classToJava(fld.owner.asClass)
val jname = nme.dropLocalSuffix(fld.name).toString
try jclazz getDeclaredField jname
catch {
@@ -969,7 +968,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
* @param meth The Scala method
*/
def methodToJava(meth: MethodSymbol): jMethod = methodCache.toJava(meth) {
- val jclazz = classToJava(meth.owner.asClassSymbol)
+ val jclazz = classToJava(meth.owner.asClass)
val paramClasses = transformedType(meth).paramTypes map typeToJavaClass
val jname = nme.dropLocalSuffix(meth.name).toString
try jclazz getDeclaredMethod (jname, paramClasses: _*)
@@ -983,7 +982,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
* @param constr The Scala constructor
*/
def constructorToJava(constr: MethodSymbol): jConstructor[_] = constructorCache.toJava(constr) {
- val jclazz = classToJava(constr.owner.asClassSymbol)
+ val jclazz = classToJava(constr.owner.asClass)
val paramClasses = transformedType(constr).paramTypes map typeToJavaClass
val effectiveParamClasses =
if (!constr.owner.owner.isStaticOwner) jclazz.getEnclosingClass +: paramClasses
@@ -1001,7 +1000,7 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym
def typeToJavaClass(tpe: Type): jClass[_] = tpe match {
case ExistentialType(_, rtpe) => typeToJavaClass(rtpe)
case TypeRef(_, ArrayClass, List(elemtpe)) => jArrayClass(typeToJavaClass(elemtpe))
- case TypeRef(_, sym: ClassSymbol, _) => classToJava(sym.asClassSymbol)
+ case TypeRef(_, sym: ClassSymbol, _) => classToJava(sym.asClass)
case tpe @ TypeRef(_, sym: AliasTypeSymbol, _) => typeToJavaClass(tpe.dealias)
case _ => throw new NoClassDefFoundError("no Java class corresponding to "+tpe+" found")
}