aboutsummaryrefslogtreecommitdiff
path: root/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala
diff options
context:
space:
mode:
Diffstat (limited to 'doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala')
-rw-r--r--doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala312
1 files changed, 312 insertions, 0 deletions
diff --git a/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala b/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala
new file mode 100644
index 000000000..9c423c3ea
--- /dev/null
+++ b/doc-tool/src/dotty/tools/dottydoc/model/JavaConverters.scala
@@ -0,0 +1,312 @@
+package dotty.tools.dottydoc
+package model
+
+import comment._
+import references._
+
+import _root_.java.util.HashMap
+import _root_.java.util.LinkedList
+
+object JavaConverters {
+ import scala.collection.JavaConverters._
+ import _root_.java.util.{ Optional => JOptional, Map => JMap }
+
+ implicit class OptStr(val opt: Option[String]) extends AnyVal {
+ def asJava = opt.getOrElse(null)
+ }
+
+ implicit class OptMap(val opt: Option[JMap[String, _]]) extends AnyVal {
+ def asJava = opt.getOrElse(Map.empty.asJava)
+ }
+
+ implicit class JavaComment(val cmt: Comment) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "body" -> cmt.body,
+ "short" -> cmt.short,
+ "authors" -> cmt.authors.asJava,
+ "see" -> cmt.see.asJava,
+ "result" -> cmt.result.asJava,
+ "throws" -> cmt.throws.asJava,
+ "valueParams" -> cmt.valueParams.asJava,
+ "typeParams" -> cmt.typeParams.asJava,
+ "version" -> cmt.version.asJava,
+ "since" -> cmt.since.asJava,
+ "todo" -> cmt.todo.asJava,
+ "deprecated" -> cmt.deprecated.asJava,
+ "note" -> cmt.note.asJava,
+ "example" -> cmt.example.asJava,
+ "constructor" -> cmt.constructor.asJava,
+ "group" -> cmt.group.asJava,
+ "groupDesc" -> cmt.groupDesc.asJava,
+ "groupNames" -> cmt.groupNames.asJava,
+ "groupPrio" -> cmt.groupPrio.asJava,
+ "hideImplicitConversions" -> cmt.hideImplicitConversions.asJava
+ ).asJava
+ }
+
+ implicit class JavaPackage(val ent: Package) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "path" -> ent.path.asJava,
+ "members" -> ent.members.map(_.asJava()).asJava,
+ "children" -> ent.children.map(_.asJava()).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "superTypes" -> ent.superTypes,
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "signature" -> ent.signature
+ ) ++ extras).asJava
+ }
+
+ implicit class JavaCaseClass(val ent: CaseClass) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "members" -> ent.members.map(_.asJava()).asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "typeParams" -> ent.typeParams.asJava,
+ "superTypes" -> ent.superTypes.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "hasCompanion" -> ent.hasCompanion,
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
+ ) ++ extras).asJava
+ }
+
+ implicit class JavaClass(val ent: Class) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "members" -> ent.members.map(_.asJava()).asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "typeParams" -> ent.typeParams.asJava,
+ "superTypes" -> ent.superTypes.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "hasCompanion" -> ent.hasCompanion,
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
+ ) ++ extras).asJava
+ }
+
+ implicit class JavaTrait(val ent: Trait) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "members" -> ent.members.map(_.asJava()).asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "typeParams" -> ent.typeParams.asJava,
+ "superTypes" -> ent.superTypes.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "hasCompanion" -> ent.hasCompanion,
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
+ ) ++ extras).asJava
+ }
+
+ implicit class JavaObject(val ent: Object) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = (Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "members" -> ent.members.map(_.asJava()).asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "superTypes" -> ent.superTypes.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "hasVisibleMembers" -> ent.hasVisibleMembers,
+ "hasCompanion" -> ent.hasCompanion,
+ "companionPath" -> ent.companionPath.asJava,
+ "signature" -> ent.signature
+ ) ++ extras).asJava
+ }
+
+ implicit class JavaDef(val ent: Def) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "returnValue" -> ent.returnValue.asJava,
+ "typeParams" -> ent.typeParams.asJava,
+ "paramLists" -> ent.paramLists.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "implicitlyAddedFrom" -> ent.implicitlyAddedFrom.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
+ ).asJava
+ }
+
+ implicit class JavaVal(val ent: Val) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "name" -> ent.name,
+ "modifiers" -> ent.modifiers.asJava,
+ "path" -> ent.path.asJava,
+ "returnValue" -> ent.returnValue.asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "implicitlyAddedFrom" -> ent.implicitlyAddedFrom.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
+ ).asJava
+ }
+
+ implicit class JavaTypeAlias(val ent: TypeAlias) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "kind" -> ent.kind,
+ "annotations" -> ent.annotations.asJava,
+ "modifiers" -> ent.modifiers.asJava,
+ "name" -> ent.name,
+ "path" -> ent.path.asJava,
+ "alias" -> ent.alias.map(_.asJava).asJava,
+ "comment" -> ent.comment.map(_.asJava).asJava,
+ "isPrivate" -> ent.isPrivate,
+ "isProtected" -> ent.isProtected,
+ "signature" -> ent.signature
+ ).asJava
+ }
+
+ implicit class JavaParamList(val pl: ParamList) extends AnyVal {
+ def asJava: JMap[String, _] = Map(
+ "list" -> pl.list.map(_.asJava).asJava,
+ "isImplicit" -> pl.isImplicit
+ ).asJava
+ }
+
+ implicit class JavaReference(val ref: Reference) extends AnyVal {
+ def asJava: JMap[String, _] = ref match {
+ case TypeReference(title, tpeLink, paramLinks) => Map(
+ "kind" -> "TypeReference",
+ "title" -> title,
+ "tpeLink" -> tpeLink.asJava,
+ "paramLinks" -> paramLinks.map(_.asJava).asJava,
+ "scala" -> ref
+ ).asJava
+
+ case OrTypeReference(left, right) => Map(
+ "kind" -> "OrTypeReference",
+ "left" -> left.asJava,
+ "right" -> right.asJava,
+ "scala" -> ref
+ ).asJava
+
+ case AndTypeReference(left, right) => Map(
+ "kind" -> "AndTypeReference",
+ "left" -> left.asJava,
+ "right" -> right.asJava,
+ "scala" -> ref
+ ).asJava
+
+ case FunctionReference(args, returnValue) => Map(
+ "kind" -> "FunctionReference",
+ "args" -> args.map(_.asJava).asJava,
+ "returnValue" -> returnValue.asJava,
+ "scala" -> ref
+ ).asJava
+
+ case TupleReference(args) => Map(
+ "kind" -> "TupleReference",
+ "args" -> args.map(_.asJava).asJava,
+ "scala" -> ref
+ ).asJava
+
+ case BoundsReference(low, high) => Map(
+ "kind" -> "BoundsReference",
+ "low" -> low.asJava,
+ "hight" -> high.asJava,
+ "scala" -> ref
+ ).asJava
+
+ case NamedReference(title, ref, isByName, isRepeated) => Map(
+ "kind" -> "NamedReference",
+ "title" -> title,
+ "ref" -> ref.asJava,
+ "isByName" -> isByName,
+ "isRepeated" -> isRepeated,
+ "scala" -> ref
+ ).asJava
+
+ case ConstantReference(title) => Map(
+ "kind" -> "ConstantReference",
+ "title" -> title,
+ "scala" -> ref
+ ).asJava
+
+ case EmptyReference =>
+ throw new IllegalStateException("Empty reference discovered while converting to Java Map")
+ }
+ }
+
+ implicit class JavaMaterializableLink(val link: MaterializableLink) extends AnyVal {
+ def asJava: JMap[String, _] = link match {
+ case UnsetLink(title, query) => Map(
+ "kind" -> "UnsetLink",
+ "title" -> title,
+ "query" -> query,
+ "scala" -> link
+ ).asJava
+
+ case MaterializedLink(title, target) => Map(
+ "kind" -> "MaterializedLink",
+ "title" -> title,
+ "target" -> target,
+ "scala" -> link
+ ).asJava
+
+ case NoLink(title, target) => Map(
+ "kind" -> "NoLink",
+ "title" -> title,
+ "target" -> target,
+ "scala" -> link
+ ).asJava
+ }
+ }
+
+ implicit class JavaEntity(val ent: Entity) extends AnyVal {
+ def asJava(extras: Map[String, _] = Map.empty): JMap[String, _] = parseEntity(ent, extras)
+ }
+
+ private def parseEntity(ent: Entity, extras: Map[String, _]): JMap[String, _] = ent match {
+ case ent: Package => ent.asJava(extras)
+ case ent: CaseClass => ent.asJava(extras)
+ case ent: Class => ent.asJava(extras)
+ case ent: Trait => ent.asJava(extras)
+ case ent: Object => ent.asJava(extras)
+ case ent: Def => ent.asJava
+ case ent: Val => ent.asJava
+ case ent: TypeAlias => ent.asJava
+ case _ => Map.empty.asJava
+ }
+
+ implicit class JavaMap(val map: collection.Map[String, Package]) extends AnyVal {
+ def toJavaList: LinkedList[AnyRef] = {
+ map.toList
+ .sortBy(_._1)
+ .foldLeft(new LinkedList[AnyRef]()) { case (list, (_, pkg)) =>
+ list.add(pkg.asJava())
+ list
+ }
+ }
+ }
+}