summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan@lightbend.com>2017-04-05 08:09:53 -0700
committerGitHub <noreply@github.com>2017-04-05 08:09:53 -0700
commitd9150aaec8431f79b426761826ce44ac3a61a92b (patch)
treefe4f1d05f97a8b4cd6d8aee0b0f9481bd5eabae6
parent94dd1dcb3f062cf96f84507abab417f7bea78e8c (diff)
parentb722e61682807772093cc499415d58a76fc2d0ab (diff)
downloadscala-d9150aaec8431f79b426761826ce44ac3a61a92b.tar.gz
scala-d9150aaec8431f79b426761826ce44ac3a61a92b.tar.bz2
scala-d9150aaec8431f79b426761826ce44ac3a61a92b.zip
Merge pull request #5828 from adriaanm/userdefined-apply-352
`CompleterWrapper` delegates `typeParams`.
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala3
-rw-r--r--test/files/pos/userdefined_apply_poly_overload.scala13
2 files changed, 16 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
index 69b8cb12e6..b755ee3ebd 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala
@@ -611,6 +611,9 @@ trait Namers extends MethodSynthesis {
}
class CompleterWrapper(completer: TypeCompleter) extends TypeCompleter {
+ // override important when completer.isInstanceOf[PolyTypeCompleter]!
+ override val typeParams = completer.typeParams
+
val tree = completer.tree
override def complete(sym: Symbol): Unit = {
diff --git a/test/files/pos/userdefined_apply_poly_overload.scala b/test/files/pos/userdefined_apply_poly_overload.scala
new file mode 100644
index 0000000000..6760c1424f
--- /dev/null
+++ b/test/files/pos/userdefined_apply_poly_overload.scala
@@ -0,0 +1,13 @@
+object Foo {
+ // spurious error if:
+ // - this definition precedes that of apply (which is overloaded with the synthetic one derived from the case class)
+ // - AND `Foo.apply` is explicitly applied to `[A]` (no error if `[A]` is inferred)
+ //
+ def referToPolyOverloadedApply[A]: Foo[A] = Foo.apply[A]("bla")
+ // ^
+ // found : String("bla")
+ // required: Int
+
+ def apply[A](x: Int): Foo[A] = ???
+}
+case class Foo[A](x: String) // must be polymorphic