aboutsummaryrefslogtreecommitdiff
path: root/dottydoc/shared
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-05-03 10:55:02 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-08-19 15:37:20 +0200
commitdb659dc0a199a77466088aeaf0ad50d4815e9308 (patch)
tree132acffd64147ba68a9247babfdcb20259126f1c /dottydoc/shared
parent80a907708e970c9871d17184cfd8b022913e3bd6 (diff)
downloaddotty-db659dc0a199a77466088aeaf0ad50d4815e9308.tar.gz
dotty-db659dc0a199a77466088aeaf0ad50d4815e9308.tar.bz2
dotty-db659dc0a199a77466088aeaf0ad50d4815e9308.zip
Split implementation to internal mutable and external interface
Diffstat (limited to 'dottydoc/shared')
-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
6 files changed, 183 insertions, 152 deletions
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 =>