summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-09-18 12:47:21 -0700
committerEugene Burmako <xeno.by@gmail.com>2012-09-18 12:47:21 -0700
commitafef5fea6e2de37344a80a01840ec3c2faef7530 (patch)
treea5be2f41bf8f3a59d8ba3217f2ccef32d561909a /src
parentc9b2ef64108d75ab41ff95cc32bc503e77653e66 (diff)
parent22270c68a12587d0125bd4f14c9d9f4cdcdb24d5 (diff)
downloadscala-afef5fea6e2de37344a80a01840ec3c2faef7530.tar.gz
scala-afef5fea6e2de37344a80a01840ec3c2faef7530.tar.bz2
scala-afef5fea6e2de37344a80a01840ec3c2faef7530.zip
Merge pull request #1324 from scalamacros/ticket/6374
Scala reflection now supports Java CRTP
Diffstat (limited to 'src')
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index 47978821a3..0d9e90d3a6 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -148,8 +148,10 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { thisUnive
object AnnotationClass { def unapply(x: jClass[_]) = x.isAnnotation }
object ConstantArg {
- def enumToSymbol(enum: Enum[_]): Symbol =
- classToScala(enum.getClass).typeSignature.declaration(enum.name: TermName)
+ def enumToSymbol(enum: Enum[_]): Symbol = {
+ val staticPartOfEnum = classToScala(enum.getClass).companionSymbol
+ staticPartOfEnum.typeSignature.declaration(enum.name: TermName)
+ }
def unapply(schemaAndValue: (jClass[_], Any)): Option[Any] = schemaAndValue match {
case (StringClass | PrimitiveClass(), value) => Some(value)
@@ -659,7 +661,6 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { thisUnive
}
override def complete(sym: Symbol): Unit = {
- if (jclazz.isEnum) throw new ScalaReflectionException("implementation restriction: Java enums are not supported")
load(sym)
completeRest()
}
@@ -1024,13 +1025,12 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { thisUnive
rawToExistential(typeRef(clazz.owner.thisType, clazz, List()))
}
case japplied: ParameterizedType =>
- val (pre, sym) = typeToScala(japplied.getRawType) match {
- case ExistentialType(tparams, TypeRef(pre, sym, _)) => (pre, sym)
- case TypeRef(pre, sym, _) => (pre, sym)
- }
+ // http://stackoverflow.com/questions/5767122/parameterizedtype-getrawtype-returns-j-l-r-type-not-class
+ val sym = classToScala(japplied.getRawType.asInstanceOf[jClass[_]])
+ val pre = sym.owner.thisType
val args0 = japplied.getActualTypeArguments
val (args, bounds) = targsToScala(pre.typeSymbol, args0.toList)
- ExistentialType(bounds, typeRef(pre, sym, args))
+ newExistentialType(bounds, typeRef(pre, sym, args))
case jarr: GenericArrayType =>
arrayType(typeToScala(jarr.getGenericComponentType))
case jtvar: jTypeVariable[_] =>