summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2015-05-05 09:59:43 +1000
committerJason Zaugg <jzaugg@gmail.com>2015-05-05 10:04:49 +1000
commita18e42bc0773084a3e311646e1e2ffd623db4cfa (patch)
treec06957d9199e507144ddff039edb2c82bae44dd3 /src/reflect
parentf635ba91d641d900ffd56ae0f4bbfb8e88bfe2d1 (diff)
downloadscala-a18e42bc0773084a3e311646e1e2ffd623db4cfa.tar.gz
scala-a18e42bc0773084a3e311646e1e2ffd623db4cfa.tar.bz2
scala-a18e42bc0773084a3e311646e1e2ffd623db4cfa.zip
SI-9298 Fix erasure of value classes in Java
Value classes that appear in signatures of Java defined methods should not be erased to the underlying type. Before this change, we'd get a `ClassCastException`, as the Scala call site would unbox the value class despite the fact the Java recipient would expect the boxed representation. I've tested this for primitive and object wrapped types in parameter and return position.
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/transform/Erasure.scala2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/transform/Erasure.scala b/src/reflect/scala/reflect/internal/transform/Erasure.scala
index d5b5967145..707972242a 100644
--- a/src/reflect/scala/reflect/internal/transform/Erasure.scala
+++ b/src/reflect/scala/reflect/internal/transform/Erasure.scala
@@ -254,6 +254,8 @@ trait Erasure {
def mergeParents(parents: List[Type]): Type =
if (parents.isEmpty) ObjectTpe
else parents.head
+
+ override protected def eraseDerivedValueClassRef(tref: TypeRef): Type = eraseNormalClassRef(tref)
}
object scalaErasure extends ScalaErasureMap