From 027b94f938fddc4716d31146982de25c8908b9ae Mon Sep 17 00:00:00 2001 From: Lorand Szakacs Date: Fri, 21 Jul 2017 08:02:43 +0300 Subject: [PATCH] #1589 Move duplicate qualified modifier error to new format --- .../src/dotty/tools/dotc/parsing/Parsers.scala | 2 +- .../reporting/diagnostic/ErrorMessageID.java | 3 ++- .../dotc/reporting/diagnostic/messages.scala | 8 ++++++++ .../dotc/reporting/ErrorMessagesTests.scala | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index bd26a4ff038d..b553e00f3740 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -1700,7 +1700,7 @@ object Parsers { def accessQualifierOpt(mods: Modifiers): Modifiers = if (in.token == LBRACKET) { if ((mods is Local) || mods.hasPrivateWithin) - syntaxError("duplicate private/protected qualifier") + syntaxError(DuplicatePrivateProtectedQualifier()) inBrackets { if (in.token == THIS) { in.nextToken(); mods | Local } else mods.withPrivateWithin(ident().toTypeName) diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index ce6712231617..f2b8f662e69e 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -93,7 +93,8 @@ public enum ErrorMessageID { ModifiersNotAllowedID, WildcardOnTypeArgumentNotAllowedOnNewID, ImplicitFunctionTypeNeedsNonEmptyParameterListID, - WrongNumberOfParametersID + WrongNumberOfParametersID, + DuplicatePrivateProtectedQualifierID, ; 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 af0861ad6bf2..3b398d23661c 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -1694,4 +1694,12 @@ object messages { val explanation = "" } + case class DuplicatePrivateProtectedQualifier()(implicit ctx: Context) + extends Message(DuplicatePrivateProtectedQualifierID) { + val kind = "Syntax" + val msg = "duplicate private/protected qualifier" + val explanation = + hl"It is not allowed to combine `private` and `protected` modifiers even if they are qualified to different scopes" + } + } diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index cb8c4e3d8cb3..a597ef498b07 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -910,4 +910,20 @@ class ErrorMessagesTests extends ErrorMessagesTest { assertEquals(err, WrongNumberOfParameters(1)) } + + @Test def duplicatePrivateProtectedQualifier = + checkMessagesAfter("frontend") { + """class Test { + | private[Test] protected[this] def foo(): Unit = () + |} """.stripMargin + } + .expect { (ictx, messages) => + implicit val ctx: Context = ictx + val defn = ictx.definitions + + assertMessageCount(1, messages) + val err :: Nil = messages + + assertEquals(DuplicatePrivateProtectedQualifier(), err) + } }