From 9446ce33bec8d1b9a2ab181a7c93d32260aa4d88 Mon Sep 17 00:00:00 2001 From: benkobalog <benko.balog@gmail.com> Date: Thu, 4 Jan 2018 11:22:10 +0100 Subject: [PATCH 1/3] Missing error messages #1589 1. Added SymbolIsNotAValue error Message class 2. Substituted the original error message with the new class and added a test --- .../dotc/reporting/diagnostic/ErrorMessageID.java | 1 + .../tools/dotc/reporting/diagnostic/messages.scala | 9 ++++++++- compiler/src/dotty/tools/dotc/typer/Checking.scala | 2 +- .../tools/dotc/reporting/ErrorMessagesTests.scala | 14 ++++++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index 1b7486840bbb..3fbd30284820 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -124,6 +124,7 @@ public enum ErrorMessageID { SymbolChangedSemanticsInVersionID, UnableToEmitSwitchID, MissingCompanionForStaticID, + SymbolIsNotAValueID, ; 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 b8c6a84e771a..a786e5e49a2c 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -208,7 +208,7 @@ object messages { case class WildcardOnTypeArgumentNotAllowedOnNew()(implicit ctx: Context) extends Message(WildcardOnTypeArgumentNotAllowedOnNewID) { - val kind = "syntax" + val kind = "Syntax" val msg = "type argument must be fully defined" val code1 = @@ -2064,4 +2064,11 @@ object messages { val explanation = hl"An object that contains ${"@static"} members must have a companion class." } + + case class SymbolIsNotAValue(symbol: Symbol)(implicit ctx: Context) extends Message(SymbolIsNotAValueID) { + val msg = hl"${symbol.show} is not a value" + val kind = "Type Mismatch" + val explanation = + hl"Scala or Java packages cannot be assigned to a value" + } } diff --git a/compiler/src/dotty/tools/dotc/typer/Checking.scala b/compiler/src/dotty/tools/dotc/typer/Checking.scala index 61dfd30866d7..b6afa91aac62 100644 --- a/compiler/src/dotty/tools/dotc/typer/Checking.scala +++ b/compiler/src/dotty/tools/dotc/typer/Checking.scala @@ -523,7 +523,7 @@ trait Checking { val sym = tree.tpe.termSymbol // The check is avoided inside Java compilation units because it always fails // on the singleton type Module.type. - if ((sym is Package) || ((sym is JavaModule) && !ctx.compilationUnit.isJava)) ctx.error(em"$sym is not a value", tree.pos) + if ((sym is Package) || ((sym is JavaModule) && !ctx.compilationUnit.isJava)) ctx.error(SymbolIsNotAValue(sym), tree.pos) } tree } diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index 69f985e03f61..5e607ecc7e17 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -1277,4 +1277,18 @@ class ErrorMessagesTests extends ErrorMessagesTest { val MissingCompanionForStatic(member) = messages.head assertEquals(member.show, "method bar") } + + @Test def symbolIsNotAValue = + checkMessagesAfter("checkStatic") { + """ + |package p + |object O { + | val v = p + |} + """.stripMargin + }.expect { (itcx, messages) => + implicit val ctx: Context = itcx + val SymbolIsNotAValue(symbol) = messages.head + assertEquals(symbol.show, "package p") + } } From 8311e9110b156e564c5cfb57ede40c640a5fd1c4 Mon Sep 17 00:00:00 2001 From: benkobalog <benko.balog@gmail.com> Date: Thu, 4 Jan 2018 15:29:15 +0100 Subject: [PATCH 2/3] Changing SymbolIsNotAValue to JavaSymbolIsNotAValue --- .../tools/dotc/reporting/diagnostic/ErrorMessageID.java | 2 +- .../dotty/tools/dotc/reporting/diagnostic/messages.scala | 7 +++---- compiler/src/dotty/tools/dotc/typer/Checking.scala | 2 +- .../dotty/tools/dotc/reporting/ErrorMessagesTests.scala | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java index 3fbd30284820..08d6811c946a 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/ErrorMessageID.java @@ -124,7 +124,7 @@ public enum ErrorMessageID { SymbolChangedSemanticsInVersionID, UnableToEmitSwitchID, MissingCompanionForStaticID, - SymbolIsNotAValueID, + JavaSymbolIsNotAValueID, ; 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 a786e5e49a2c..df420de1abc3 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -2065,10 +2065,9 @@ object messages { hl"An object that contains ${"@static"} members must have a companion class." } - case class SymbolIsNotAValue(symbol: Symbol)(implicit ctx: Context) extends Message(SymbolIsNotAValueID) { - val msg = hl"${symbol.show} is not a value" + case class JavaSymbolIsNotAValue(symbol: Symbol)(implicit ctx: Context) extends Message(JavaSymbolIsNotAValueID) { + val msg = hl"$symbol is not a value" val kind = "Type Mismatch" - val explanation = - hl"Scala or Java packages cannot be assigned to a value" + val explanation = hl"Java packages cannot be used as a value" } } diff --git a/compiler/src/dotty/tools/dotc/typer/Checking.scala b/compiler/src/dotty/tools/dotc/typer/Checking.scala index b6afa91aac62..2a9ee59c9cd8 100644 --- a/compiler/src/dotty/tools/dotc/typer/Checking.scala +++ b/compiler/src/dotty/tools/dotc/typer/Checking.scala @@ -523,7 +523,7 @@ trait Checking { val sym = tree.tpe.termSymbol // The check is avoided inside Java compilation units because it always fails // on the singleton type Module.type. - if ((sym is Package) || ((sym is JavaModule) && !ctx.compilationUnit.isJava)) ctx.error(SymbolIsNotAValue(sym), tree.pos) + if ((sym is Package) || ((sym is JavaModule) && !ctx.compilationUnit.isJava)) ctx.error(JavaSymbolIsNotAValue(sym), tree.pos) } tree } diff --git a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala index 5e607ecc7e17..242ee0a60de6 100644 --- a/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala +++ b/compiler/test/dotty/tools/dotc/reporting/ErrorMessagesTests.scala @@ -1278,7 +1278,7 @@ class ErrorMessagesTests extends ErrorMessagesTest { assertEquals(member.show, "method bar") } - @Test def symbolIsNotAValue = + @Test def javaSymbolIsNotAValue = checkMessagesAfter("checkStatic") { """ |package p @@ -1288,7 +1288,7 @@ class ErrorMessagesTests extends ErrorMessagesTest { """.stripMargin }.expect { (itcx, messages) => implicit val ctx: Context = itcx - val SymbolIsNotAValue(symbol) = messages.head + val JavaSymbolIsNotAValue(symbol) = messages.head assertEquals(symbol.show, "package p") } } From 6c296d131139427bd88555987f340c444aebe47d Mon Sep 17 00:00:00 2001 From: benkobalog <benko.balog@gmail.com> Date: Mon, 8 Jan 2018 11:45:46 +0100 Subject: [PATCH 3/3] Changed explanation for JavaSymbolIsNotAValue --- .../dotc/reporting/diagnostic/messages.scala | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala index df420de1abc3..54085545e679 100644 --- a/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala +++ b/compiler/src/dotty/tools/dotc/reporting/diagnostic/messages.scala @@ -2068,6 +2068,21 @@ object messages { case class JavaSymbolIsNotAValue(symbol: Symbol)(implicit ctx: Context) extends Message(JavaSymbolIsNotAValueID) { val msg = hl"$symbol is not a value" val kind = "Type Mismatch" - val explanation = hl"Java packages cannot be used as a value" + val explanation = { + val javaCodeExample = """class A {public static int a() {return 1;}}""" + + val scalaCodeExample = + """val objectA = A // This does not compile + |val aResult = A.a() // This does compile""".stripMargin + + hl"""Java statics and packages cannot be used as a value. + |For Java statics consider the following Java example: + | + |$javaCodeExample + | + |When used from Scala: + | + |$scalaCodeExample""" + } } }