-
Notifications
You must be signed in to change notification settings - Fork 22
Types$$TypeError when using inherited method from Java with repeated parameters #2413
Copy link
Copy link
Closed
Milestone
Description
Hello,
I tried to compile a piece of scala code using 2.7.5 (and 2.7.6); and I had a compiler crash:
It happens when I extend a java class which defines a method having a repeated parameter.
When I call it from the scala subclass it works, unless I call it inside a for statement or a partial function.
Let me know if I'm doing something wrong.
Thanks a lot for your work
== Step to reproduce: ==
- edit test/java/TestJava.java
package test.java;
public class TestJava {
protected String repeatParam(String ... items) {
return "nothing";
}
}- edit test/scalac/TestScalac.scala
package test.scalac
import test.java.TestJava
class Foo extends TestJava {
// THIS METHOD YIELDS TO CRASH
def foomethod : Option[String] => Unit = {
case None =>
val path = repeatParam("s","a","b","c")
()
case Some(error) =>
()
}
// THIS IS OK
def foomethod2 : String = repeatParam("s","a");
// THIS IS OK
val aVal = repeatParam("1","2","3")
// THIS YIELDS TO CRASH
def foomethod3 {
for (a <- 1 to 4 ;
anotherVal = repeatParam("1","2","3"))
yield anotherVal
}
}== Here is the scalac (ant task) output ==
Notice that TestJava class is already compiled at that time.
[scalac] scala.tools.nsc.symtab.Types$$TypeError: type mismatch;
[scalac] found : java.lang.String*
[scalac] required: java.lang.String
[scalac] at scala.tools.nsc.typechecker.Contexts$$Context.error(Contexts.scala:352)
[scalac] at scala.tools.nsc.typechecker.Infer$$Inferencer.error(Infer.scala:266)
[scalac] at scala.tools.nsc.typechecker.Infer$$Inferencer.typeError(Infer.scala:276)
[scalac] at scala.tools.nsc.typechecker.Infer$$Inferencer.typeErrorTree(Infer.scala:285)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.adapt(Typers.scala:862)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3363)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typedArg(Typers.scala:1649)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:1687)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer$$$$anonfun$$21.apply(Typers.scala:1686)
[scalac] at scala.List$$.map2(List.scala:333)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typedArgs(Typers.scala:1686)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.doTypedApply(Typers.scala:1774)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typedApply$$1(Typers.scala:2657)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3257)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3358)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3406)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.transformedOrTyped(Typers.scala:3464)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typedDefDef(Typers.scala:1370)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3097)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3358)
[scalac] at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:3395)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.makeAccessor(SuperAccessors.scala:300)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:182)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:224)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$4.apply(Trees.scala:1364)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$4.apply(Trees.scala:1364)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1363)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1386)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$transform$$2.apply(SuperAccessors.scala:227)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$transform$$2.apply(SuperAccessors.scala:227)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.scala$$tools$$nsc$$typechecker$$SuperAccessors$$SuperAccTransformer$$$$withInvalidOwner(SuperAccessors.scala:247)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:226)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$1.apply(SuperAccessors.scala:60)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$1.apply(SuperAccessors.scala:57)
[scalac] at scala.List$$.map2(List.scala:333)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transformArgs(SuperAccessors.scala:57)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:224)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1432)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:208)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1422)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:200)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:224)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1386)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$5.apply(Trees.scala:1369)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$5.apply(Trees.scala:1368)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1367)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformTrees$$1.apply(Trees.scala:1460)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformTrees$$1.apply(Trees.scala:1460)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformTrees(Trees.scala:1460)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$4.apply(SuperAccessors.scala:156)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer$$$$anonfun$$4.apply(SuperAccessors.scala:156)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:156)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformTemplate(Trees.scala:1462)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1356)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1356)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1355)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:143)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1351)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1351)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1351)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1351)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1478)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1476)
[scalac] at scala.List$$.loop$$1(List.scala:300)
[scalac] at scala.List$$.mapConserve(List.scala:317)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1476)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1352)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1484)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:33)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.atOwner(TypingTransformers.scala:27)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.atOwner(SuperAccessors.scala:241)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1351)
[scalac] at scala.tools.nsc.transform.TypingTransformers$$TypingTransformer.transform(TypingTransformers.scala:46)
[scalac] at scala.tools.nsc.typechecker.SuperAccessors$$SuperAccTransformer.transform(SuperAccessors.scala:230)
[scalac] at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:1479)
[scalac] at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:30)
[scalac] at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:267)
[scalac] at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:246)
[scalac] at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:246)
[scalac] at scala.Iterator$$class.foreach(Iterator.scala:414)
[scalac] at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:266)
[scalac] at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:246)
[scalac] at scala.tools.nsc.Global$$Run.compileSources(Global.scala:574)
[scalac] at scala.tools.nsc.Global$$Run.compile(Global.scala:667)
[scalac] at scala.tools.ant.Scalac.execute(Scalac.scala:574)
[scalac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
[scalac] at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
[scalac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[scalac] at java.lang.reflect.Method.invoke(Method.java:597)
[scalac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
[scalac] at org.apache.tools.ant.Task.perform(Task.java:348)
[scalac] at org.apache.tools.ant.Target.execute(Target.java:357)
[scalac] at org.apache.tools.ant.Target.performTasks(Target.java:385)
[scalac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1337)
[scalac] at org.apache.tools.ant.Project.executeTarget(Project.java:1306)
[scalac] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[scalac] at org.apache.tools.ant.Project.executeTargets(Project.java:1189)
[scalac] at org.apache.tools.ant.Main.runBuild(Main.java:758)
[scalac] at org.apache.tools.ant.Main.startAnt(Main.java:217)
[scalac] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
[scalac] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104) Reactions are currently unavailable