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"""
+    }
   }
 }