diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2017-03-11 16:19:31 +0100 |
---|---|---|
committer | Guillaume Martres <smarter@ubuntu.com> | 2017-03-12 13:28:27 +0100 |
commit | e5e691ea2dd53abb64306b91bf172aaa8e2e6b9c (patch) | |
tree | bc6de92440d037bc9e080f97df9c4ff8de025040 /tests/pos-java-interop/varargsOverride | |
parent | b2d3b8938391516e81f18962e67f5bacf0aa2440 (diff) | |
download | dotty-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.java | 5 | ||||
-rw-r--r-- | tests/pos-java-interop/varargsOverride/Sub.scala | 3 |
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 +} |