aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dottydoc/js/src/DottyDoc.scala6
-rw-r--r--dottydoc/js/src/EntityIndex.scala3
-rw-r--r--dottydoc/js/src/html/EntityLayout.scala2
-rw-r--r--dottydoc/js/src/html/Member.scala2
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/core/Phases.scala84
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/html/Html.scala21
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/model/CommentParsers.scala2
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyEntities.scala1
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyParsers.scala3
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/CommentParser.scala2
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/util/IndexWriters.scala5
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/util/MemberLookup.scala3
-rw-r--r--dottydoc/jvm/src/dotty/tools/dottydoc/util/mutate.scala39
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala149
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/entities.scala91
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/factories.scala (renamed from dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala)2
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/internal.scala69
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/pickling.scala20
-rw-r--r--dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala4
19 files changed, 280 insertions, 228 deletions
diff --git a/dottydoc/js/src/DottyDoc.scala b/dottydoc/js/src/DottyDoc.scala
index b9ad1d891..d08bd8cc8 100644
--- a/dottydoc/js/src/DottyDoc.scala
+++ b/dottydoc/js/src/DottyDoc.scala
@@ -6,12 +6,14 @@ import js.Dynamic.global
import js.JSApp
import js.annotation.{ JSExport, JSName }
import org.scalajs.dom
-import model.Entities._
+import dom.document
+import dom.webworkers.Worker
+import model._
import html.EntityLayout
@JSExport object DottyDocJS {
@JSExport def main(target: dom.html.Div) = {
- global.document.title = "Dotty " + EntityIndex.currentEntity.path.mkString(".")
+ document.title = "Dotty " + EntityIndex.currentEntity.path.mkString(".")
target.appendChild(EntityLayout(EntityIndex.currentEntity).html.render)
hljs.initHighlightingOnLoad()
}
diff --git a/dottydoc/js/src/EntityIndex.scala b/dottydoc/js/src/EntityIndex.scala
index 69bda283f..e58cdf88e 100644
--- a/dottydoc/js/src/EntityIndex.scala
+++ b/dottydoc/js/src/EntityIndex.scala
@@ -10,7 +10,8 @@ import js.annotation.JSName
object EntityIndex {
import microjson._
import prickle._
- import model.Entities._
+ import model._
+ import model.pickling._
lazy val packages: Map[String, Package] =
//FIXME
diff --git a/dottydoc/js/src/html/EntityLayout.scala b/dottydoc/js/src/html/EntityLayout.scala
index 51fd000b7..58ca3df49 100644
--- a/dottydoc/js/src/html/EntityLayout.scala
+++ b/dottydoc/js/src/html/EntityLayout.scala
@@ -5,7 +5,7 @@ package html
import scalatags.JsDom.all._
import org.scalajs.dom
import org.scalajs.dom.html.{Anchor, Div}
-import model.Entities._
+import model._
case class EntityLayout(entity: Entity) extends MemberLayout {
def html = div(
diff --git a/dottydoc/js/src/html/Member.scala b/dottydoc/js/src/html/Member.scala
index 065626a1c..a862ffea4 100644
--- a/dottydoc/js/src/html/Member.scala
+++ b/dottydoc/js/src/html/Member.scala
@@ -8,7 +8,7 @@ import org.scalajs.dom
import org.scalajs.dom.html.{Anchor, Div}
trait MemberLayout {
- import model.Entities._
+ import model._
def member(m: Entity, parent: Entity) = {
def toggleBetween(short: Div, and: Div): Unit =
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/core/Phases.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/core/Phases.scala
index a0235e7c6..1670313e1 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/core/Phases.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/core/Phases.scala
@@ -15,11 +15,13 @@ object Phases {
class DocPhase extends Phase {
import model.comment.Comment
import model.CommentParsers.wikiParser
- import model.Entities._
- import model.EntityFactories._
+ import model.factories._
+ import model._
+ import model.internal._
import dotty.tools.dotc.core.Flags
import dotty.tools.dotc.ast.tpd._
- import util.Traversing._
+ import util.traversing._
+ import util.internal.setters._
def phaseName = "docphase"
@@ -29,11 +31,13 @@ object Phases {
def track(symbol: Symbol, ctx: Context)(op: => Entity) = {
val entity = op
- val commentParser = { (entity: Entity, packs: Map[String, Package]) =>
- wikiParser.parseHtml(symbol, entity, packs)(ctx)
- }
+ if (entity != NonEntity) {
+ val commentParser = { (entity: Entity, packs: Map[String, Package]) =>
+ wikiParser.parseHtml(symbol, entity, packs)(ctx)
+ }
- commentCache = commentCache + (entity.path.mkString(".") -> commentParser)
+ commentCache = commentCache + (entity.path.mkString(".") -> commentParser)
+ }
entity
}
@@ -43,8 +47,8 @@ object Phases {
def collectList(xs: List[Tree], ps: List[String])(implicit ctx: Context): List[Entity] =
xs.map(collect(_, ps)).filter(_ != NonEntity)
- def collectEntityMembers(xs: List[Tree], ps: List[String])(implicit ctx: Context): List[EntityMember] =
- collectList(xs, ps).asInstanceOf[List[EntityMember]]
+ def collectEntityMembers(xs: List[Tree], ps: List[String])(implicit ctx: Context) =
+ collectList(xs, ps).asInstanceOf[List[Entity with Members]]
def collectMembers(tree: Tree, ps: List[String] = prev)(implicit ctx: Context): List[Entity] = tree match {
case t: Template => collectList(t.body, ps)
@@ -55,34 +59,34 @@ object Phases {
/** package */
case pd @ PackageDef(pid, st) =>
val newPath = prev :+ pid.name.toString
- addEntity(Package(newPath.mkString("."), collectEntityMembers(st, newPath), newPath))
+ addEntity(PackageImpl(newPath.mkString("."), collectEntityMembers(st, newPath), newPath))
/** trait */
case t @ TypeDef(n, rhs) if t.symbol.is(Flags.Trait) =>
val name = n.toString
val newPath = prev :+ name
- Trait(name, collectMembers(rhs), flags(t), newPath)
+ TraitImpl(name, collectMembers(rhs), flags(t), newPath)
/** objects, on the format "Object$" so drop the last letter */
case o @ TypeDef(n, rhs) if o.symbol.is(Flags.Module) =>
val name = n.toString.dropRight(1)
- Object(name, collectMembers(rhs, prev :+ name), flags(o), prev :+ (name + "$"))
+ ObjectImpl(name, collectMembers(rhs, prev :+ name), flags(o), prev :+ (name + "$"))
/** class / case class */
case c @ TypeDef(name, rhs) if c.symbol.isClass =>
val newPath = prev :+ name.toString
(name.toString, collectMembers(rhs), flags(c), newPath, None) match {
- case x if c.symbol.is(Flags.CaseClass) => CaseClass.tupled(x)
- case x => Class.tupled(x)
+ case x if c.symbol.is(Flags.CaseClass) => CaseClassImpl.tupled(x)
+ case x => ClassImpl.tupled(x)
}
/** def */
case d: DefDef =>
- Def(d.name.toString, flags(d), path(d), returnType(d.tpt))
+ DefImpl(d.name.toString, flags(d), path(d), returnType(d.tpt))
/** val */
case v: ValDef if !v.symbol.is(Flags.ModuleVal) =>
- Val(v.name.toString, flags(v), path(v), returnType(v.tpt))
+ ValImpl(v.name.toString, flags(v), path(v), returnType(v.tpt))
case x => {
//dottydoc.println(s"Found unwanted entity: $x (${x.pos},\n${x.show}")
@@ -97,7 +101,7 @@ object Phases {
val path = p.path.mkString(".")
val newPack = packages.get(path).map { ex =>
val children = (ex.children ::: p.children).distinct.sortBy(_.name)
- Package(p.name, children, p.path, None)
+ PackageImpl(p.name, children, p.path, None)
}.getOrElse(p)
packages = packages + (path -> newPack)
@@ -119,52 +123,18 @@ object Phases {
val compUnits = super.runOn(units)
// (2) Set parent of all package children
- def setParent(ent: Entity, to: Entity): Unit =
- ent match {
- case e: Class =>
- e.parent = Some(to)
- e.members.foreach(setParent(_, e))
- case e: CaseClass =>
- e.parent = Some(to)
- e.members.foreach(setParent(_, e))
- case e: Object =>
- e.parent = Some(to)
- e.members.foreach(setParent(_, e))
- case e: Trait =>
- e.parent = Some(to)
- e.members.foreach(setParent(_, e))
- case e: Val =>
- e.parent = Some(to)
- case e: Def =>
- e.parent = Some(to)
- case _ => ()
- }
-
- println("Connecting parents to children...")
+ println("Connecting parents to children, finding companions...")
for {
parent <- packages.values
child <- parent.children
} setParent(child, to = parent)
// (3) Create documentation template from docstrings, with internal links
- packages.values.foreach { p =>
- mutateEntities(p) {
- case e: Package =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: Class =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: CaseClass =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: Object =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: Trait =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: Val =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case e: Def =>
- e.comment = commentCache(e.path.mkString("."))(e, packages)
- case _ => ()
- }
+ for {
+ pack <- packages.values
+ } mutateEntities(pack) { e =>
+ val comment = commentCache(e.path.mkString("."))(e, packages)
+ setComment(e, to = comment)
}
// (4) Write the finished model to JSON
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/html/Html.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/html/Html.scala
index aef86ffd8..91bf4d773 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/html/Html.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/html/Html.scala
@@ -2,11 +2,13 @@ package dotty.tools.dottydoc
package html
import scalatags.Text.all._
-import model.Entities._
+import model.internal._
+import model._
case class EntityPage(entity: Entity, packages: Map[String, Package]) {
- import prickle._
import CustomTags._
+ import model.pickling._
+ import prickle._
private def relPath(to: String, from: Entity) =
"../" * from.path.length + to
@@ -77,7 +79,7 @@ case class EntityPage(entity: Entity, packages: Map[String, Package]) {
str.replaceAll("\\$colon", ":")
private def relativePath(to: Entity) =
- util.Traversing.relativePath(entity, to)
+ util.traversing.relativePath(entity, to)
def packageView = nav(
cls := "mdl-navigation packages",
@@ -86,9 +88,16 @@ case class EntityPage(entity: Entity, packages: Map[String, Package]) {
keys.flatMap { k =>
val pack = packages(k)
val children =
- pack.children.sortBy(_.name).filterNot(_.kind == "package").map { c =>
- a(cls := "mdl-navigation__link entity", href := relativePath(c), filteredName(c.name))
- }
+ pack.children
+ .sortBy(_.name)
+ .filterNot(_.kind == "package")
+ .map { entity =>
+ a(
+ cls := "mdl-navigation__link entity",
+ href := relativePath(entity),
+ filteredName(entity.name)
+ )
+ }
if (children.length > 0)
a(cls := "mdl-navigation__link package", href := relativePath(pack), filteredName(k)) :: children
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/model/CommentParsers.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/model/CommentParsers.scala
index e47a17f49..e6adba977 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/model/CommentParsers.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/model/CommentParsers.scala
@@ -8,7 +8,7 @@ import dotc.core.Contexts.Context
object CommentParsers {
import comment._
import BodyParsers._
- import Entities.{Entity, Package}
+ import model.internal._
sealed class WikiParser
extends CommentCleaner with CommentParser with CommentExpander {
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyEntities.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyEntities.scala
index 9f06a7a9a..f423cf8de 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyEntities.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyEntities.scala
@@ -3,7 +3,6 @@ package model
package comment
import scala.collection._
-import Entities.Entity
/** A body of text. A comment has a single body, which is composed of
* at least one block. Inside every body is exactly one summary (see
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyParsers.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyParsers.scala
index b43440dd1..725d83557 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyParsers.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/BodyParsers.scala
@@ -3,7 +3,6 @@ package model
package comment
object BodyParsers {
- import model.Entities.{Entity, Members}
implicit class BodyToHtml(val body: Body) extends AnyVal {
def toHtml(origin: Entity): String = {
@@ -37,7 +36,7 @@ object BodyParsers {
}
def relativePath(target: Entity) =
- util.Traversing.relativePath(origin, target)
+ util.traversing.relativePath(origin, target)
def bodyToHtml(body: Body): String =
(body.blocks map blockToHtml).mkString
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/CommentParser.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/CommentParser.scala
index 3c5411c5c..fb2119fc0 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/CommentParser.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/model/comment/CommentParser.scala
@@ -8,10 +8,10 @@ import dotty.tools.dotc.core.Contexts.Context
import scala.collection.mutable
import dotty.tools.dotc.config.Printers.dottydoc
import scala.util.matching.Regex
-import Entities.{Entity, Package}
trait CommentParser extends util.MemberLookup {
import Regexes._
+ import model.internal._
/** Parses a raw comment string into a `Comment` object.
* @param packages all packages parsed by Scaladoc tool, used for lookup
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/util/IndexWriters.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/util/IndexWriters.scala
index 8ec62a7d4..70587e6b8 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/util/IndexWriters.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/util/IndexWriters.scala
@@ -2,9 +2,10 @@ package dotty.tools.dottydoc
package util
object IndexWriters {
- import prickle._
- import model.Entities._
import html.EntityPage
+ import model.Package
+ import model.pickling._
+ import prickle._
def writeJs(packs: Map[String, Package], outPath: String): Unit = {
for (pack <- packs.values) {
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/util/MemberLookup.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/util/MemberLookup.scala
index 933ed682f..f95829caf 100644
--- a/dottydoc/jvm/src/dotty/tools/dottydoc/util/MemberLookup.scala
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/util/MemberLookup.scala
@@ -10,8 +10,9 @@ import dotc.core.Symbols._
import dotc.core.Types._
import dotc.core.Names._
import dotc.util.Positions._
+import model.internal._
import model.comment._
-import model.Entities._
+import model._
trait MemberLookup {
/** Performs a lookup based on the provided (pruned) query string
diff --git a/dottydoc/jvm/src/dotty/tools/dottydoc/util/mutate.scala b/dottydoc/jvm/src/dotty/tools/dottydoc/util/mutate.scala
new file mode 100644
index 000000000..b491fb161
--- /dev/null
+++ b/dottydoc/jvm/src/dotty/tools/dottydoc/util/mutate.scala
@@ -0,0 +1,39 @@
+package dotty.tools.dottydoc
+package util
+package internal
+
+object setters {
+ import model._
+ import model.comment.Comment
+ import model.internal._
+
+ def setComment(ent: Entity, to: Option[Comment]) = ent match {
+ case x: PackageImpl => x.comment = to
+ case x: ClassImpl => x.comment = to
+ case x: CaseClassImpl => x.comment = to
+ case x: TraitImpl => x.comment = to
+ case x: ObjectImpl => x.comment = to
+ case x: DefImpl => x.comment = to
+ case x: ValImpl => x.comment = to
+ }
+
+ def setParent(ent: Entity, to: Entity): Unit = ent match {
+ case e: ClassImpl =>
+ e.parent = to
+ e.members.foreach(setParent(_, e))
+ case e: CaseClassImpl =>
+ e.parent = to
+ e.members.foreach(setParent(_, e))
+ case e: ObjectImpl =>
+ e.parent = to
+ e.members.foreach(setParent(_, e))
+ case e: TraitImpl =>
+ e.parent = to
+ e.members.foreach(setParent(_, e))
+ case e: ValImpl =>
+ e.parent = to
+ case e: DefImpl =>
+ e.parent = to
+ case _ => ()
+ }
+}
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala
deleted file mode 100644
index f95190578..000000000
--- a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/Entity.scala
+++ /dev/null
@@ -1,149 +0,0 @@
-package dotty.tools.dottydoc
-package model
-
-import comment.Comment
-
-object Entities {
- import prickle._
-
- type EntityMember = Entity with Members
-
- sealed trait Entity {
- def name: String
-
- /** Path from root, i.e. `scala.Option$` */
- def path: List[String]
-
- def comment: Option[Comment]
-
- def kind: String
-
- def parent: Option[Entity]
-
- /** All parents from package level i.e. Package to Object to Member etc */
- def parents: List[Entity] =
- parent.map(p => p :: p.parents).getOrElse(Nil)
- }
-
- sealed trait Members {
- def members: List[Entity]
- }
-
- sealed trait Modifiers {
- def modifiers: List[String]
-
- val isPrivate: Boolean =
- modifiers.contains("private")
- }
-
- final case class Package(
- name: String,
- members: List[Entity],
- path: List[String],
- var comment: Option[Comment] = None
- ) extends Entity with Members {
- override val kind = "package"
-
- var parent: Option[Entity] = None
- val children: List[EntityMember] =
- members.collect { case x: EntityMember => x }
- }
-
- final case class Class(
- name: String,
- members: List[Entity],
- modifiers: List[String],
- path: List[String],
- var comment: Option[Comment] = None
- ) extends Entity with Members with Modifiers {
- override val kind = "class"
- var parent: Option[Entity] = None
- }
-
- final case class CaseClass(
- name: String,
- members: List[Entity],
- modifiers: List[String],
- path: List[String],
- var comment: Option[Comment] = None
- ) extends Entity with Members with Modifiers {
- override val kind = "case class"
- var parent: Option[Entity] = None
- }
-
- final case class Trait(
- name: String,
- members: List[Entity],
- modifiers: List[String],
- path: List[String],
- var comment: Option[Comment] = None
- ) extends Entity with Members with Modifiers {
- override val kind = "trait"
- var parent: Option[Entity] = None
- }
-
- final case class Object(
- name: String,
- members: List[Entity],
- modifiers: List[String],
- path: List[String],
- var comment: Option[Comment] = None
- ) extends Entity with Members with Modifiers {
- override val kind = "object"
- var parent: Option[Entity] = None
- }
-
- final case class Def(
- name: String,
- modifiers: List[String],
- path: List[String],
- returnValue: String,
- var comment: Option[Comment] = None
- ) extends Entity with Modifiers {
- override val kind = "def"
- var parent: Option[Entity] = None
- }
-
- final case class Val(
- name: String,
- modifiers: List[String],
- path: List[String],
- returnValue: String,
- var comment: Option[Comment] = None
- ) extends Entity with Modifiers {
- override val kind = "val"
- var parent: Option[Entity] = None
- }
-
- /** This object is used to represent entities that are to be filtered out */
- final case object NonEntity extends Entity {
- override val name = ""
- override val comment = None
- override val path = Nil
- override val kind = ""
- override val parent = None
- }
-
- final case object RootEntity extends Entity {
- override val name = "root"
- override val comment = None
- override val path = Nil
- override val kind = ""
- override val parent = None
- }
-
- //implicit val pMPickler: PicklerPair[PackageMember] = CompositePickler[PackageMember]
- // .concreteType[Class]
- // .concreteType[CaseClass]
- // .concreteType[Object]
- // .concreteType[Trait]
-
- implicit val entityPickler: PicklerPair[Entity] = CompositePickler[Entity]
- .concreteType[Val]
- .concreteType[Def]
- .concreteType[Class]
- .concreteType[CaseClass]
- .concreteType[Object]
- .concreteType[Trait]
- .concreteType[Package]
-}
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/entities.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/entities.scala
new file mode 100644
index 000000000..e62b8573a
--- /dev/null
+++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/entities.scala
@@ -0,0 +1,91 @@
+package dotty.tools.dottydoc
+package model
+
+import comment.Comment
+
+trait Entity {
+ def name: String
+
+ /** Path from root, i.e. `scala.Option$` */
+ def path: List[String]
+
+ def comment: Option[Comment]
+
+ def kind: String
+
+ def parent: Entity
+
+ /** All parents from package level i.e. Package to Object to Member etc */
+ def parents: List[Entity] = parent match {
+ case NonEntity => Nil
+ case e => e :: e.parents
+ }
+
+ /** Applies `f` to entity if != `NonEntity` */
+ def fold[A](nonEntity: A)(f: Entity => A) = this match {
+ case NonEntity => nonEntity
+ case x => f(x)
+ }
+}
+
+trait Members {
+ def members: List[Entity]
+}
+
+trait Modifiers {
+ def modifiers: List[String]
+
+ val isPrivate: Boolean =
+ modifiers.contains("private")
+}
+
+trait ReturnValue {
+ def returnValue: String
+}
+
+trait Package extends Entity with Members {
+ override val kind = "package"
+
+ def children: List[Entity with Members]
+}
+
+trait Class extends Entity with Members with Modifiers {
+ override val kind = "class"
+}
+
+trait CaseClass extends Class {
+ override val kind = "case class"
+}
+
+trait Trait extends Class {
+ override val kind = "trait"
+}
+
+trait Object extends Class {
+ override val kind = "object"
+}
+
+trait Def extends Entity with Modifiers with ReturnValue {
+ override val kind = "def"
+}
+
+trait Val extends Def {
+ override val kind = "val"
+}
+
+trait Var extends Def {
+ override val kind = "var"
+}
+
+trait NonEntity extends Entity {
+ override val name = ""
+ override val comment = None
+ override val path = Nil
+ override val kind = ""
+ override val parent = NonEntity
+}
+
+final case object NonEntity extends NonEntity
+final case object RootEntity extends NonEntity {
+ override val name = "root"
+}
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/factories.scala
index 9de1cf6ad..142895021 100644
--- a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/EntityFactories.scala
+++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/factories.scala
@@ -9,7 +9,7 @@ import dotc.core.{ Flags => DottyFlags }
import dotc.ast.Trees._
import DottyFlags.FlagSet
-object EntityFactories {
+object factories {
import dotty.tools.dotc.ast.tpd._
import DottyFlags._
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/internal.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/internal.scala
new file mode 100644
index 000000000..f8707f692
--- /dev/null
+++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/internal.scala
@@ -0,0 +1,69 @@
+package dotty.tools.dottydoc
+package model
+
+import comment.Comment
+
+object internal {
+
+ trait Impl {
+ var parent: Entity = NonEntity
+ }
+
+ final case class PackageImpl(
+ name: String,
+ members: List[Entity],
+ path: List[String],
+ var comment: Option[Comment] = None
+ ) extends Package with Impl {
+ val children: List[Entity with Members] =
+ members.collect { case x: Entity with Members => x }
+ }
+
+ final case class ClassImpl(
+ name: String,
+ members: List[Entity],
+ modifiers: List[String],
+ path: List[String],
+ var comment: Option[Comment] = None
+ ) extends Class with Impl
+
+ final case class CaseClassImpl(
+ name: String,
+ members: List[Entity],
+ modifiers: List[String],
+ path: List[String],
+ var comment: Option[Comment] = None
+ ) extends CaseClass with Impl
+
+ final case class TraitImpl(
+ name: String,
+ members: List[Entity],
+ modifiers: List[String],
+ path: List[String],
+ var comment: Option[Comment] = None
+ ) extends Trait with Impl
+
+ final case class ObjectImpl(
+ name: String,
+ members: List[Entity],
+ modifiers: List[String],
+ path: List[String],
+ var comment: Option[Comment] = None
+ ) extends Object with Impl
+
+ final case class DefImpl(
+ name: String,
+ modifiers: List[String],
+ path: List[String],
+ returnValue: String,
+ var comment: Option[Comment] = None
+ ) extends Def with Impl
+
+ final case class ValImpl(
+ name: String,
+ modifiers: List[String],
+ path: List[String],
+ returnValue: String,
+ var comment: Option[Comment] = None
+ ) extends Val with Impl
+}
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/pickling.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/pickling.scala
new file mode 100644
index 000000000..ea33a05fd
--- /dev/null
+++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/pickling.scala
@@ -0,0 +1,20 @@
+package dotty.tools.dottydoc
+package model
+
+object pickling {
+ import internal._
+ import prickle._
+
+ implicit val entityPickler: PicklerPair[Entity] = CompositePickler[Entity]
+ .concreteType[NonEntity.type]
+ .concreteType[ValImpl]
+ .concreteType[DefImpl]
+ .concreteType[ClassImpl]
+ .concreteType[CaseClassImpl]
+ .concreteType[ObjectImpl]
+ .concreteType[TraitImpl]
+ .concreteType[PackageImpl]
+
+ implicit val packagePickler: PicklerPair[Package] = CompositePickler[Package]
+ .concreteType[PackageImpl]
+}
diff --git a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala
index 37c2f6e6b..aca5f41ea 100644
--- a/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala
+++ b/dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala
@@ -1,8 +1,8 @@
package dotty.tools.dottydoc
package util
-object Traversing {
- import model.Entities._
+object traversing {
+ import model._
def mutateEntities(e: Entity)(trans: Entity => Unit): Unit = e match {
case e: Entity with Members =>