diff --git a/build.sbt b/build.sbt index 407edaf6..5b14942a 100644 --- a/build.sbt +++ b/build.sbt @@ -1,4 +1,4 @@ -val scala3 = "3.1.0" +val scala3 = "3.1.2" lazy val root = project .in(file(".")) .settings( @@ -16,17 +16,17 @@ lazy val root = project // Notice how the Scala 2.13-built libraries are used. For more information: // https://www.scala-lang.org/blog/2021/04/08/scala-3-in-sbt.html libraryDependencies ++= Seq( - "com.typesafe.akka" %% "akka-actor-typed" % "2.6.14", - "com.typesafe.akka" %% "akka-slf4j" % "2.6.14", + "com.typesafe.akka" %% "akka-actor-typed" % "2.6.19", + "com.typesafe.akka" %% "akka-slf4j" % "2.6.19", ).map(dep => dep.cross(CrossVersion.for3Use2_13)) ++ Seq( // Libraries that already fully support Scala 3: - "org.typelevel" %% "cats-core" % "2.6.1", + "org.typelevel" %% "cats-core" % "2.7.0", "org.scala-lang" %% "scala3-staging" % scalaVersion.value, - "org.scala-lang.modules" %% "scala-parser-combinators" % "2.0.0", - "ch.qos.logback" % "logback-classic" % "1.2.3", + "org.scala-lang.modules" %% "scala-parser-combinators" % "2.1.1", + "ch.qos.logback" % "logback-classic" % "1.2.11", "org.scalacheck" %% "scalacheck" % "1.15.4" % Test, - "org.scalameta" %% "munit" % "0.7.26" % Test, - "org.scalameta" %% "munit-scalacheck" % "0.7.26" % Test, + "org.scalameta" %% "munit" % "0.7.29" % Test, + "org.scalameta" %% "munit-scalacheck" % "0.7.29" % Test, "com.eed3si9n.expecty" %% "expecty" % "0.15.4" % Test, ), diff --git a/src/main/java/progscala3/objectsystem/JavaArrays.java b/src/main/java/progscala3/objectsystem/JavaArrays.java index ecff3db1..11f33121 100644 --- a/src/main/java/progscala3/objectsystem/JavaArrays.java +++ b/src/main/java/progscala3/objectsystem/JavaArrays.java @@ -3,6 +3,7 @@ public class JavaArrays { public static void main(String[] args) { + System.out.println("*** A java.lang.ArrayStoreException will be thrown: ***"); Integer[] array1 = new Integer[] { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3) }; Number[] array2 = array1; // Compiles fine, but shouldn't!! diff --git a/src/main/scala/progscala3/appdesign/parthenon/PayrollCalculator.scala b/src/main/scala/progscala3/appdesign/parthenon/PayrollCalculator.scala index d6a29c7b..9f62c4de 100644 --- a/src/main/scala/progscala3/appdesign/parthenon/PayrollCalculator.scala +++ b/src/main/scala/progscala3/appdesign/parthenon/PayrollCalculator.scala @@ -21,8 +21,8 @@ object PayrollCalculator: // <1> (name, salary, ruleString) <- data yield Pay(name, salary, toDeductions(ruleString)) - case class BadInput(message: String, input: String) - extends RuntimeException(s"Bad input data, $message: $input") + case class BadInput(message: String, input: String, array: Array[String]) + extends RuntimeException(s"""Bad input data, $message: "$input" (array = ${array.mkString("[", ",", "]")}) """) private type Record = (String, Dollars, String) // <4> @@ -33,13 +33,13 @@ object PayrollCalculator: // <1> yield toRule(line) private def toRule(line: String): Record = // <5> - line.split("""\s*,\s.*""") match + line.split("""\s*,\s*""") match case Array(name, salary, fedTax, stateTax, insurance, retirement) => val ruleString = dsl.format( fedTax.toDouble, stateTax.toDouble, insurance.toDouble, retirement.toDouble) (name, Dollars(salary.toDouble), ruleString) - case array => throw BadInput("expected six fields", line) + case array => throw BadInput("expected six fields", line, array) private val parser = PayrollParser() // <6> private def toDeductions(rule: String): Deductions = diff --git a/src/main/scala/progscala3/basicoop/Abstract.scala b/src/main/scala/progscala3/basicoop/Abstract.scala index e715bf71..00514707 100644 --- a/src/main/scala/progscala3/basicoop/Abstract.scala +++ b/src/main/scala/progscala3/basicoop/Abstract.scala @@ -46,7 +46,7 @@ open class HelloService(override val name: String) // <3> // tag::main[] @main def HelloServiceMain(name: String, users: String*): Unit = - val hs = HelloService("hello") + val hs = HelloService(name) for user <- users request = Map("user" -> user)