diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-05-03 10:55:02 +0200 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-08-19 15:37:20 +0200 |
commit | db659dc0a199a77466088aeaf0ad50d4815e9308 (patch) | |
tree | 132acffd64147ba68a9247babfdcb20259126f1c /dottydoc/shared | |
parent | 80a907708e970c9871d17184cfd8b022913e3bd6 (diff) | |
download | dotty-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.scala | 149 | ||||
-rw-r--r-- | dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/entities.scala | 91 | ||||
-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.scala | 69 | ||||
-rw-r--r-- | dottydoc/shared/src/main/scala/dotty/tools/dottydoc/model/pickling.scala | 20 | ||||
-rw-r--r-- | dottydoc/shared/src/main/scala/dotty/tools/dottydoc/util/Traversing.scala | 4 |
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 => |