summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@typesafe.com>2015-05-05 08:18:54 +0200
committerLukas Rytz <lukas.rytz@typesafe.com>2015-05-05 08:18:54 +0200
commit8200009ea5dafcdf79488f19175c53e7b571aa75 (patch)
treec06957d9199e507144ddff039edb2c82bae44dd3
parentf635ba91d641d900ffd56ae0f4bbfb8e88bfe2d1 (diff)
parenta18e42bc0773084a3e311646e1e2ffd623db4cfa (diff)
downloadscala-8200009ea5dafcdf79488f19175c53e7b571aa75.tar.gz
scala-8200009ea5dafcdf79488f19175c53e7b571aa75.tar.bz2
scala-8200009ea5dafcdf79488f19175c53e7b571aa75.zip
Merge pull request #4490 from retronym/ticket/9298
SI-9298 Fix erasure of value classes in Java
-rw-r--r--src/reflect/scala/reflect/internal/transform/Erasure.scala2
-rw-r--r--test/files/run/t9298/Test.java7
-rw-r--r--test/files/run/t9298/VC.scala5
-rw-r--r--test/files/run/t9298b/Test.java7
-rw-r--r--test/files/run/t9298b/VC.scala8
5 files changed, 29 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
diff --git a/test/files/run/t9298/Test.java b/test/files/run/t9298/Test.java
new file mode 100644
index 0000000000..81f5265985
--- /dev/null
+++ b/test/files/run/t9298/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+ public void consume(VC vc) {}
+
+ public static void main(String[] args) {
+ new Client().test();
+ }
+}
diff --git a/test/files/run/t9298/VC.scala b/test/files/run/t9298/VC.scala
new file mode 100644
index 0000000000..916e62dc59
--- /dev/null
+++ b/test/files/run/t9298/VC.scala
@@ -0,0 +1,5 @@
+class VC(val s: String) extends AnyVal
+
+class Client {
+ def test = new Test().consume(new VC(""))
+}
diff --git a/test/files/run/t9298b/Test.java b/test/files/run/t9298b/Test.java
new file mode 100644
index 0000000000..f369b26f36
--- /dev/null
+++ b/test/files/run/t9298b/Test.java
@@ -0,0 +1,7 @@
+public class Test {
+ public VC identity(VC vc) { return vc; }
+
+ public static void main(String[] args) {
+ new Client().test();
+ }
+}
diff --git a/test/files/run/t9298b/VC.scala b/test/files/run/t9298b/VC.scala
new file mode 100644
index 0000000000..bb5978b6e4
--- /dev/null
+++ b/test/files/run/t9298b/VC.scala
@@ -0,0 +1,8 @@
+class VC(val s: Int) extends AnyVal
+
+class Client {
+ def test = {
+ val vc: VC = new Test().identity(new VC(42))
+ assert(vc.s == 42)
+ }
+}