aboutsummaryrefslogtreecommitdiff
path: root/tests/pos-java-interop/varargsOverride
diff options
context:
space:
mode:
authorGuillaume Martres <smarter@ubuntu.com>2017-03-11 16:19:31 +0100
committerGuillaume Martres <smarter@ubuntu.com>2017-03-12 13:28:27 +0100
commite5e691ea2dd53abb64306b91bf172aaa8e2e6b9c (patch)
treebc6de92440d037bc9e080f97df9c4ff8de025040 /tests/pos-java-interop/varargsOverride
parentb2d3b8938391516e81f18962e67f5bacf0aa2440 (diff)
downloaddotty-e5e691ea2dd53abb64306b91bf172aaa8e2e6b9c.tar.gz
dotty-e5e691ea2dd53abb64306b91bf172aaa8e2e6b9c.tar.bz2
dotty-e5e691ea2dd53abb64306b91bf172aaa8e2e6b9c.zip
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.
Diffstat (limited to 'tests/pos-java-interop/varargsOverride')
-rw-r--r--tests/pos-java-interop/varargsOverride/Base.java5
-rw-r--r--tests/pos-java-interop/varargsOverride/Sub.scala3
2 files changed, 8 insertions, 0 deletions
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
+}