From 5f4c061e90a239f12092316d8046dad34ad568b0 Mon Sep 17 00:00:00 2001 From: Steve Lawrence Date: Mon, 22 Jun 2015 09:03:29 -0400 Subject: [PATCH] Convert Scala @throws annotations to Java throws clauses With recent versions of javadoc, checks are made to ensure that throws clasues exist for any javadoc @throws tags. This patch converts Scala @throws annotations to the Java throws clause so that these checks can pass. --- plugin/src/main/scala/com/typesafe/genjavadoc/AST.scala | 6 +++++- tests/expected_output/akka/rk/buh/is/it/A.java | 5 +++++ tests/src/test/scala/scala/javadoc/test.scala | 7 +++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/scala/com/typesafe/genjavadoc/AST.scala b/plugin/src/main/scala/com/typesafe/genjavadoc/AST.scala index 6f08bcd..9df321f 100644 --- a/plugin/src/main/scala/com/typesafe/genjavadoc/AST.scala +++ b/plugin/src/main/scala/com/typesafe/genjavadoc/AST.scala @@ -90,8 +90,12 @@ trait AST { this: TransformCake ⇒ case Nil ⇒ acc } val args = rec(d.vparamss.head) mkString ("(", ", ", ")") + + val throwsAnnotations = d.symbol.throwsAnnotations.map(_.fullName) + val throws = if (throwsAnnotations.isEmpty) "" else "throws " + throwsAnnotations.mkString(", ") + val impl = if (d.mods.isDeferred || interface) ";" else "{ throw new RuntimeException(); }" - val pattern = (n: String) ⇒ s"$acc $tp $n $args $impl" + val pattern = (n: String) ⇒ s"$acc $tp $n $args $throws $impl" def hasParam(n: String) = comment.find(_.contains(s"@param $n")).isDefined val commentWithParams = if (fabricateParams && comment.size > 1 && comment.head.startsWith("/**")) { diff --git a/tests/expected_output/akka/rk/buh/is/it/A.java b/tests/expected_output/akka/rk/buh/is/it/A.java index 924acea..18657d9 100644 --- a/tests/expected_output/akka/rk/buh/is/it/A.java +++ b/tests/expected_output/akka/rk/buh/is/it/A.java @@ -196,6 +196,11 @@ public class C implements akka.rk.buh.is.it.X { * @return (undocumented) */ public int hello (scala.collection.Seq s) { throw new RuntimeException(); } + /** + * throws + * @return (undocumented) + */ + public int testthrows () throws java.lang.IllegalArgumentException, java.lang.NullPointerException { throw new RuntimeException(); } /** * Accessor for nested Scala object * @return (undocumented) diff --git a/tests/src/test/scala/scala/javadoc/test.scala b/tests/src/test/scala/scala/javadoc/test.scala index 104ad43..60f1ee7 100644 --- a/tests/src/test/scala/scala/javadoc/test.scala +++ b/tests/src/test/scala/scala/javadoc/test.scala @@ -120,6 +120,13 @@ class A { @varargs def hello(s: String*) = 0 + /** + * throws + */ + @throws[IllegalArgumentException] + @throws(classOf[NullPointerException]) + def testthrows = 0 + /** * class A.B */