From b722e61682807772093cc499415d58a76fc2d0ab Mon Sep 17 00:00:00 2001 From: Adriaan Moors Date: Tue, 4 Apr 2017 17:30:00 -0700 Subject: `CompleterWrapper` delegates `typeParams`. Fixes the problem reported with #5730 by xuwei-k in scala/scala-dev#352. --- src/compiler/scala/tools/nsc/typechecker/Namers.scala | 3 +++ test/files/pos/userdefined_apply_poly_overload.scala | 13 +++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 test/files/pos/userdefined_apply_poly_overload.scala 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 -- cgit v1.2.3