From e5e691ea2dd53abb64306b91bf172aaa8e2e6b9c Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Sat, 11 Mar 2017 16:19:31 +0100 Subject: Fix overriding a Java method with varargs If A method like: override def foo(x: Object*) overrides a Java method, it needs to be rewritten as: def foo(x: Seq[Object]) override def foo(x: Array[Object]): Object = foo(Predef.wrapRefArray(x)) This should be handled by ElimRepeated but there were two bugs: - `addVarArgsBridge` was called at phase `thisTransformer.next`, this is too late to create the bridge since `T*` has already been rewritten as `Seq[T]` - The original method symbol needs to have the `override` flag dropped, since it doesn't override anything. Furthermore, RefChecks had to be moved after ElimRepeated, otherwise the testcase would fail the overriding checks. --- tests/pos-java-interop/varargsOverride/Base.java | 5 +++++ tests/pos-java-interop/varargsOverride/Sub.scala | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 tests/pos-java-interop/varargsOverride/Base.java create mode 100644 tests/pos-java-interop/varargsOverride/Sub.scala (limited to 'tests/pos-java-interop') diff --git a/tests/pos-java-interop/varargsOverride/Base.java b/tests/pos-java-interop/varargsOverride/Base.java new file mode 100644 index 000000000..a4607b71c --- /dev/null +++ b/tests/pos-java-interop/varargsOverride/Base.java @@ -0,0 +1,5 @@ +class Base { + public Object foo(Object... x) { + return x; + } +} diff --git a/tests/pos-java-interop/varargsOverride/Sub.scala b/tests/pos-java-interop/varargsOverride/Sub.scala new file mode 100644 index 000000000..9d3e2bf0d --- /dev/null +++ b/tests/pos-java-interop/varargsOverride/Sub.scala @@ -0,0 +1,3 @@ +class Sub extends Base { + override def foo(x: Object*): Object = x +} -- cgit v1.2.3