From 4d1bf3ad68b3def3bbdc7ac8c45cb1a72c2c4e09 Mon Sep 17 00:00:00 2001 From: Kevin Wright Date: Fri, 26 Jan 2018 20:01:29 +0000 Subject: Made it compile under Java 9 --- build.sbt | 14 +++++++++++++- core/shared/src/main/scala/magnolia.scala | 4 ++++ tests/src/main/scala/tests.scala | 7 ++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 178ac83..fda55a8 100644 --- a/build.sbt +++ b/build.sbt @@ -29,11 +29,21 @@ lazy val tests = project addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.1" cross CrossVersion.full), libraryDependencies ++= Seq( "com.fommil" %% "deriving-macro" % "0.9.0", - "com.fommil" %% "scalaz-deriving" % "0.9.0" + "com.fommil" %% "scalaz-deriving" % "0.9.0", + // These 4 because scalaz-deriving collects dependencies like they were pokémon + // Including XML stuff that got modularised in Java 9... + // which is odd for a library that has nothing whatsoever to do with XML! + "javax.xml.bind" % "jaxb-api" % "2.3.0", + "com.sun.xml.bind" % "jaxb-impl" % "2.3.0", + "org.glassfish.jaxb" % "jaxb-runtime" % "2.3.0", + "javax.activation" % "activation" % "1.1.1" ) ) .dependsOn(examplesJVM) + + + lazy val benchmarks = project .in(file("benchmarks")) .settings(buildSettings: _*) @@ -55,6 +65,8 @@ lazy val buildSettings = Seq( "-Ywarn-inaccessible", "-Ywarn-adapted-args" ), +// javaOptions += "--add-modules=javax.xml.bind", +// javacOptions += "--add-modules=javax.xml.bind", scmInfo := Some( ScmInfo(url("https://github.com/propensive/magnolia"), "scm:git:git@github.com:propensive/magnolia.git") diff --git a/core/shared/src/main/scala/magnolia.scala b/core/shared/src/main/scala/magnolia.scala index 5318aa2..a1d4e8a 100644 --- a/core/shared/src/main/scala/magnolia.scala +++ b/core/shared/src/main/scala/magnolia.scala @@ -203,6 +203,10 @@ object Magnolia { val caseParamsReversed = caseClassParameters.foldLeft[List[CaseParam]](Nil) { (acc, param) => + for (ann <- param.annotations) { + c.info(c.enclosingPosition, ann.tree.toString, force = false) + } + val paramName = param.name.decodedName.toString val paramTypeSubstituted = param.typeSignatureIn(genericType).resultType diff --git a/tests/src/main/scala/tests.scala b/tests/src/main/scala/tests.scala index a311291..11a5d2f 100644 --- a/tests/src/main/scala/tests.scala +++ b/tests/src/main/scala/tests.scala @@ -245,6 +245,7 @@ object Tests extends TestApp { } }.assert(_ == "Cannot patch value `Person(Bob,42)`, expected 2 fields but got 3") + test("throw on an illegal patch attempt with field type mismatch") { // these two implicits can be removed once https://github.com/propensive/magnolia/issues/58 is closed implicit val stringPatcher = Patcher.forSingleValue[String] @@ -253,10 +254,14 @@ object Tests extends TestApp { try { val person = Person("Bob", 42) implicitly[Patcher[Entity]].patch(person, Seq(null, 'killer)) + "it worked" } catch { case NonFatal(e) => e.getMessage } - }.assert(_ == "scala.Symbol cannot be cast to java.lang.Integer") + }.assert{x => + //tiny hack because Java 9 inserts the "java.base/" module name in the error message + x.startsWith("scala.Symbol cannot be cast to") && x.endsWith("java.lang.Integer") + } class ParentClass { case class InnerClass(name: String) -- cgit v1.2.3