diff options
author | Paul Phillips <paulp@improving.org> | 2012-09-29 18:07:09 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-09-29 18:36:30 -0700 |
commit | 32e70a01da1fda7bdc91d7301ee3b8707fd2bcd4 (patch) | |
tree | 68b610a5cedca13014acdfb1bde79085349f18a9 /test/files/run/t4729/S_2.scala | |
parent | 75a075b507b1c3f4463ab0eb42fecde66978e903 (diff) | |
download | scala-32e70a01da1fda7bdc91d7301ee3b8707fd2bcd4.tar.gz scala-32e70a01da1fda7bdc91d7301ee3b8707fd2bcd4.tar.bz2 scala-32e70a01da1fda7bdc91d7301ee3b8707fd2bcd4.zip |
Fix for SI-4729, overriding java varargs in scala.
This was a bad interaction between anonymous subclasses
and bridge methods.
new Foo { override def bar = 5 }
Scala figures it can mark "bar" private since hey, what's
the difference. The problem is that if it was overriding a
java-defined varargs method in scala, the bridge method
logic says "Oh, it's private? Then you don't need a varargs
bridge." Hey scalac, you're the one that made me private!
You made me like this! You!
Diffstat (limited to 'test/files/run/t4729/S_2.scala')
-rw-r--r-- | test/files/run/t4729/S_2.scala | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/files/run/t4729/S_2.scala b/test/files/run/t4729/S_2.scala new file mode 100644 index 0000000000..e34e3d34d4 --- /dev/null +++ b/test/files/run/t4729/S_2.scala @@ -0,0 +1,29 @@ + // Scala class: +class ScalaVarArgs extends J_1 { + // -- no problem on overriding it using ordinary class + def method(s: String*) { println(s) } +} + +object Test { + def main(args: Array[String]) { + //[1] Ok - no problem using inferred type + val varArgs = new J_1 { + def method(s: String*) { println(s) } + } + varArgs.method("1", "2") + + //[2] Ok -- no problem when explicit set its type after construction + val b: J_1 = varArgs + b.method("1", "2") + + //[3] Ok -- no problem on calling its method + (new ScalaVarArgs).method("1", "2") + (new ScalaVarArgs: J_1).method("1", "2") + + //[4] Not Ok -- error when assigning anonymous class to a explictly typed val + // Compiler error: object creation impossible, since method method in trait VarArgs of type (s: <repeated...>[java.lang.String])Unit is not defined + val tagged: J_1 = new J_1 { + def method(s: String*) { println(s) } + } + } +} |