From 180ab7c9376718a3b712146707608ee8f76264f1 Mon Sep 17 00:00:00 2001 From: Doug Roper Date: Wed, 14 Jul 2021 15:24:17 -0400 Subject: [PATCH] Add macro -Xlint tests (#82) --- build.sbt | 6 ++++++ .../weepickle/v1/implicits/MacroImplicits.scala | 3 +++ .../com/rallyhealth/weepickle/v1/SingleInt.scala | 11 +++++++++++ .../main/scala/com/rallyhealth/weepickle/v1/readme.md | 1 + 4 files changed, 21 insertions(+) create mode 100644 weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/SingleInt.scala create mode 100644 weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/readme.md diff --git a/build.sbt b/build.sbt index abd2c374..9d3cb318 100644 --- a/build.sbt +++ b/build.sbt @@ -205,3 +205,9 @@ lazy val weexml = project "com.fasterxml.jackson.dataformat" % "jackson-dataformat-xml" % "2.12.3", ) ) + +lazy val `weepickle-macro-lint-tests` = project + .dependsOn(weepickle) + .settings(noPublish) + .settings(scalacOptions := (scalacOptions.value ++ Seq("-Xlint", "-Xfatal-warnings")).distinct) +// .settings(scalacOptions += "-Ymacro-debug-lite") diff --git a/weepickle-implicits/src/main/scala/com/rallyhealth/weepickle/v1/implicits/MacroImplicits.scala b/weepickle-implicits/src/main/scala/com/rallyhealth/weepickle/v1/implicits/MacroImplicits.scala index 623448ac..045ece69 100644 --- a/weepickle-implicits/src/main/scala/com/rallyhealth/weepickle/v1/implicits/MacroImplicits.scala +++ b/weepickle-implicits/src/main/scala/com/rallyhealth/weepickle/v1/implicits/MacroImplicits.scala @@ -496,6 +496,7 @@ private object MacroImplicits { def storeAggregatedValue(currentIndex: Int, v: Any): Unit = currentIndex match{ case ..${for (arg <- args) yield cq"${arg.i} => ${arg.aggregate} = v.asInstanceOf[${arg.argType}]"} + case _ => throw new java.lang.IndexOutOfBoundsException(currentIndex.toString) } def visitKey() = com.rallyhealth.weepickle.v1.core.StringVisitor def visitKeyValue(s: Any) = { @@ -550,6 +551,8 @@ private object MacroImplicits { } yield i match{ case ..${for (arg <- args) yield cq"${arg.i} => ${arg.mapped}"} + case _ => throw new java.lang.IndexOutOfBoundsException(i.toString) + } throw new com.rallyhealth.weepickle.v1.core.Abort( "missing keys in dictionary: " + keys.mkString(", ") diff --git a/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/SingleInt.scala b/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/SingleInt.scala new file mode 100644 index 00000000..17d0f1f4 --- /dev/null +++ b/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/SingleInt.scala @@ -0,0 +1,11 @@ +package com.rallyhealth.weepickle.v1 + +import com.rallyhealth.weepickle.v1.WeePickle.{FromTo, macroFromTo} + +/** + * @see https://github.com/com-lihaoyi/upickle/issues/345 + */ +case class SingleInt(num: Int) +object SingleInt { + implicit val pickler: FromTo[SingleInt] = macroFromTo +} diff --git a/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/readme.md b/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/readme.md new file mode 100644 index 00000000..996e6c65 --- /dev/null +++ b/weepickle-macro-lint-tests/src/main/scala/com/rallyhealth/weepickle/v1/readme.md @@ -0,0 +1 @@ +The macro expansions of these classes should compile without any `-Xlint` errors.