diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2017-01-13 11:39:48 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2017-01-31 14:31:08 +0100 |
commit | 2c08c956d39d9a06b3c5aa7eddc3b8c903f807df (patch) | |
tree | e0440216f9c70a023491f0e1ef00a0154b5806ee /doc-tool/src/dotty | |
parent | 64a13956d5611117c7ec4913a79363694f1e70c3 (diff) | |
download | dotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.tar.gz dotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.tar.bz2 dotty-2c08c956d39d9a06b3c5aa7eddc3b8c903f807df.zip |
Add annotations to doc AST
Diffstat (limited to 'doc-tool/src/dotty')
7 files changed, 40 insertions, 11 deletions
diff --git a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala index bb1ed5182..0ad199ca2 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/DocASTPhase.scala @@ -51,6 +51,7 @@ class DocASTPhase extends Phase { .map { meth => DefImpl( meth.symbol, + annotations(meth.symbol), meth.symbol.name.show, Nil, path(meth.symbol), @@ -64,6 +65,7 @@ class DocASTPhase extends Phase { val vals = sym.info.fields.filterNot(_.symbol.is(Flags.Private | Flags.Synthetic)).map { value => ValImpl( value.symbol, + annotations(value.symbol), value.symbol.name.show, Nil, path(value.symbol), returnType(value.info), @@ -81,34 +83,34 @@ class DocASTPhase extends Phase { /** package */ case pd @ PackageDef(pid, st) => val pkgPath = path(pd.symbol) - addEntity(PackageImpl(pd.symbol, pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath)) + addEntity(PackageImpl(pd.symbol, annotations(pd.symbol), pd.symbol.showFullName, collectEntityMembers(st, pkgPath), pkgPath)) /** trait */ case t @ TypeDef(n, rhs) if t.symbol.is(Flags.Trait) => //TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well - TraitImpl(t.symbol, n.show, collectMembers(rhs), flags(t), path(t.symbol), typeParams(t.symbol), traitParameters(t.symbol), superTypes(t)) + TraitImpl(t.symbol, annotations(t.symbol), n.show, collectMembers(rhs), flags(t), path(t.symbol), typeParams(t.symbol), traitParameters(t.symbol), superTypes(t)) /** objects, on the format "Object$" so drop the last letter */ case o @ TypeDef(n, rhs) if o.symbol.is(Flags.Module) => val name = o.name.show //TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well - ObjectImpl(o.symbol, name.dropRight(1), collectMembers(rhs, prev :+ name), flags(o), path(o.symbol).init :+ name, superTypes(o)) + ObjectImpl(o.symbol, annotations(o.symbol), name.dropRight(1), collectMembers(rhs, prev :+ name), flags(o), path(o.symbol).init :+ name, superTypes(o)) /** class / case class */ case c @ TypeDef(n, rhs) if c.symbol.isClass => //TODO: should not `collectMember` from `rhs` - instead: get from symbol, will get inherited members as well - (c.symbol, n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None) match { + (c.symbol, annotations(c.symbol), n.show, collectMembers(rhs), flags(c), path(c.symbol), typeParams(c.symbol), constructors(c.symbol), superTypes(c), None) match { case x if c.symbol.is(Flags.CaseClass) => CaseClassImpl.tupled(x) case x => ClassImpl.tupled(x) } /** def */ case d: DefDef => - DefImpl(d.symbol, d.name.decode.toString, flags(d), path(d.symbol), returnType(d.tpt.tpe), typeParams(d.symbol), paramLists(d.symbol.info)) + DefImpl(d.symbol, annotations(d.symbol), d.name.decode.toString, flags(d), path(d.symbol), returnType(d.tpt.tpe), typeParams(d.symbol), paramLists(d.symbol.info)) /** val */ case v: ValDef if !v.symbol.is(Flags.ModuleVal) => - ValImpl(v.symbol, v.name.decode.toString, flags(v), path(v.symbol), returnType(v.tpt.tpe)) + ValImpl(v.symbol, annotations(v.symbol), v.name.decode.toString, flags(v), path(v.symbol), returnType(v.tpt.tpe)) case x => { //dottydoc.println(s"Found unwanted entity: $x (${x.pos},\n${x.show}") diff --git a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala index 150a4e08f..100e0af6b 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/MiniPhaseTransform.scala @@ -80,6 +80,7 @@ object transform { case p: Package => transformEntity(p, _.packageTransformation) { p => val newPackage = PackageImpl( p.symbol, + p.annotations, p.name, p.members.map(traverse), p.path, @@ -94,6 +95,7 @@ object transform { case c: Class => transformEntity(c, _.classTransformation) { cls => ClassImpl( cls.symbol, + cls.annotations, cls.name, cls.members.map(traverse), cls.modifiers, @@ -107,6 +109,7 @@ object transform { case cc: CaseClass => transformEntity(cc, _.caseClassTransformation) { cc => CaseClassImpl( cc.symbol, + cc.annotations, cc.name, cc.members.map(traverse), cc.modifiers, @@ -120,6 +123,7 @@ object transform { case trt: Trait => transformEntity(trt, _.traitTransformation) { trt => TraitImpl( trt.symbol, + trt.annotations, trt.name, trt.members.map(traverse), trt.modifiers, @@ -133,6 +137,7 @@ object transform { case obj: Object => transformEntity(obj, _.objectTransformation) { obj => ObjectImpl( obj.symbol, + obj.annotations, obj.name, obj.members.map(traverse), obj.modifiers, @@ -144,6 +149,7 @@ object transform { case df: Def => transformEntity(df, _.defTransformation) { df => DefImpl( df.symbol, + df.annotations, df.name, df.modifiers, df.path, @@ -157,6 +163,7 @@ object transform { case vl: Val => transformEntity(vl, _.valTransformation) { vl => ValImpl( vl.symbol, + vl.annotations, vl.name, vl.modifiers, vl.path, diff --git a/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala b/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala index 47376eb26..5940df0bc 100644 --- a/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala +++ b/doc-tool/src/dotty/tools/dottydoc/core/UsecasePhase.scala @@ -16,6 +16,7 @@ class UsecasePhase extends DocMiniPhase { val name = d.name.show.split("\\$").head // UseCase defs get $pos appended to their names DefImpl( sym, + annotations(sym), name, flags(d), path(d.symbol).init :+ name, diff --git a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala index 52379f9ad..aea09f745 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/entities.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/entities.scala @@ -19,6 +19,8 @@ trait Entity { def parent: Entity + def annotations: List[String] + /** All parents from package level i.e. Package to Object to Member etc */ def parents: List[Entity] = parent match { case NonEntity => Nil @@ -105,12 +107,13 @@ trait Var extends Entity with Modifiers with ReturnValue { } trait NonEntity extends Entity { - val name = "" - val symbol = NoSymbol + val annotations = Nil + val name = "" + val symbol = NoSymbol val comment = None - val path = Nil - val kind = "" - val parent = NonEntity + val path = Nil + val kind = "" + val parent = NonEntity } final case object NonEntity extends NonEntity diff --git a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala index 2976c2f48..e47c683f3 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/factories.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/factories.scala @@ -32,6 +32,8 @@ object factories { case sym => path(sym.owner) :+ sym.name.show } + def annotations(sym: Symbol)(implicit ctx: Context): List[String] = + sym.annotations.map(_.symbol.showFullName) private val product = """Product[1-9][0-9]*""".r diff --git a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala index 09f642d0b..9787da7ce 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/internal.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/internal.scala @@ -13,6 +13,7 @@ object internal { final case class PackageImpl( symbol: Symbol, + annotations: List[String], name: String, var members: List[Entity], path: List[String], @@ -24,6 +25,7 @@ object internal { final case class ClassImpl( symbol: Symbol, + annotations: List[String], name: String, members: List[Entity], modifiers: List[String], @@ -36,6 +38,7 @@ object internal { final case class CaseClassImpl( symbol: Symbol, + annotations: List[String], name: String, members: List[Entity], modifiers: List[String], @@ -48,6 +51,7 @@ object internal { final case class TraitImpl( symbol: Symbol, + annotations: List[String], name: String, members: List[Entity], modifiers: List[String], @@ -60,6 +64,7 @@ object internal { final case class ObjectImpl( symbol: Symbol, + annotations: List[String], name: String, members: List[Entity], modifiers: List[String], @@ -70,6 +75,7 @@ object internal { final case class DefImpl( symbol: Symbol, + annotations: List[String], name: String, modifiers: List[String], path: List[String], @@ -82,6 +88,7 @@ object internal { final case class ValImpl( symbol: Symbol, + annotations: List[String], name: String, modifiers: List[String], path: List[String], diff --git a/doc-tool/src/dotty/tools/dottydoc/model/java.scala b/doc-tool/src/dotty/tools/dottydoc/model/java.scala index 01dac2685..6ec35875f 100644 --- a/doc-tool/src/dotty/tools/dottydoc/model/java.scala +++ b/doc-tool/src/dotty/tools/dottydoc/model/java.scala @@ -47,6 +47,7 @@ object java { 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, @@ -57,6 +58,7 @@ object java { 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, @@ -70,6 +72,7 @@ object java { 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, @@ -83,6 +86,7 @@ object java { 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, @@ -96,6 +100,7 @@ object java { 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, @@ -108,6 +113,7 @@ object java { 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, @@ -122,6 +128,7 @@ object java { 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, |