From a18e42bc0773084a3e311646e1e2ffd623db4cfa Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Tue, 5 May 2015 09:59:43 +1000 Subject: 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. --- test/files/run/t9298/Test.java | 7 +++++++ test/files/run/t9298/VC.scala | 5 +++++ test/files/run/t9298b/Test.java | 7 +++++++ test/files/run/t9298b/VC.scala | 8 ++++++++ 4 files changed, 27 insertions(+) create mode 100644 test/files/run/t9298/Test.java create mode 100644 test/files/run/t9298/VC.scala create mode 100644 test/files/run/t9298b/Test.java create mode 100644 test/files/run/t9298b/VC.scala (limited to 'test') 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) + } +} -- cgit v1.2.3