diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index 63f7b02ce959..ce6712231617 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -93,6 +93,7 @@ public enum ErrorMessageID { ModifiersNotAllowedID, WildcardOnTypeArgumentNotAllowedOnNewID, ImplicitFunctionTypeNeedsNonEmptyParameterListID, + WrongNumberOfParametersID ; public int errorNumber() { diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala index c338cf5534c1..af0861ad6bf2 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -1687,4 +1687,11 @@ object messages { } } + case class WrongNumberOfParameters(expected: Int)(implicit ctx: Context) + extends Message(WrongNumberOfParametersID) { + val kind = "Syntax" + val msg = s"wrong number of parameters, expected: $expected" + val explanation = "" + } + } diff --git a/compiler/src/dotty/tools/dotc/typer/Typer.scala b/compiler/src/dotty/tools/dotc/typer/Typer.scala index b16c520d5f37..c8f2c26874ad 100644 --- a/compiler/src/dotty/tools/dotc/typer/Typer.scala +++ b/compiler/src/dotty/tools/dotc/typer/Typer.scala @@ -798,7 +798,7 @@ class Typer extends Namer with TypeAssigner with Applications with Implicits wit def protoFormal(i: Int): Type = if (protoFormals.length == params.length) protoFormals(i) - else errorType(i"wrong number of parameters, expected: ${protoFormals.length}", tree.pos) + else errorType(WrongNumberOfParameters(protoFormals.length), tree.pos) /** Is `formal` a product type which is elementwise compatible with `params`? */ def ptIsCorrectProduct(formal: Type) = { diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index b798eff3dcef..8f7398c9683e 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -893,4 +893,21 @@ class ErrorMessagesTests extends ErrorMessagesTest { messages.foreach(assertEquals(_, ImplicitFunctionTypeNeedsNonEmptyParameterList())) } + @Test def wrongNumberOfParameters = + checkMessagesAfter("refchecks") { + """object NumberOfParams { + | def unary[T](x: T => Unit) = () + | unary((x, y) => ()) + |} """.stripMargin + } + .expect { (ictx, messages) => + implicit val ctx: Context = ictx + val defn = ictx.definitions + + assertMessageCount(1, messages) + val err :: Nil = messages + + assertEquals(err, WrongNumberOfParameters(1)) + } + }