diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2006-10-11 09:58:51 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2006-10-11 09:58:51 +0000 |
commit | 9fc39d7b60b1bb9906210e7ddf818ab87328a469 (patch) | |
tree | e0632a4c3a44fa08eff1b63dac97446badc16c9b /src/compiler | |
parent | aa9629c845cde020d3c129185d0bde8f3e9922b2 (diff) | |
download | scala-9fc39d7b60b1bb9906210e7ddf818ab87328a469.tar.gz scala-9fc39d7b60b1bb9906210e7ddf818ab87328a469.tar.bz2 scala-9fc39d7b60b1bb9906210e7ddf818ab87328a469.zip |
Added 'Direct known subclasses' feature to scal...
Added 'Direct known subclasses' feature to scaladoc. Removed comments
which hardcoded 'direct known subclasses' in the standard library.
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/doc/DocGenerator.scala | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/DocGenerator.scala b/src/compiler/scala/tools/nsc/doc/DocGenerator.scala index f7d39e2305..01a9489570 100644 --- a/src/compiler/scala/tools/nsc/doc/DocGenerator.scala +++ b/src/compiler/scala/tools/nsc/doc/DocGenerator.scala @@ -286,8 +286,24 @@ abstract class DocGenerator extends Models { <em>{ Text(nameFor(mmbr.tree)) }</em> { typesFor(mmbr) }{ argsFor(mmbr)}{resultFor(mmbr) } </dt> { extendsFor(mmbr) } - </dl> { fullComment(mmbr) } <hr/> - { lists(mmbr) } </span>; + </dl> + { fullComment(mmbr) } + { listSubclasses(mmbr) } <hr/> + { lists(mmbr) } </span>; + + /** Return a NodeSeq with the known subclasses for 'mmbr', if any. */ + def listSubclasses(mmbr: HasTree): NodeSeq = { + if (!subclasses(mmbr.tree.symbol).isEmpty) + <dl><dt><b>Direct known subclasses:</b></dt> + <dd> + { val links = + for (val subc <- subclasses(mmbr.tree.symbol)) + yield aref(urlFor(subc), contentFrame, subc.nameString) + links.reduceRight { (link: Seq[Node], seq: Seq[Node]) => link.concat(Text(", ")).concat(seq) } + } </dd> </dl> + else + NodeSeq.Empty + } def lists(mmbr: HasTree) = mmbr match { case cmod: ImplMod => <span>{ listMembersShort(mmbr) } @@ -538,6 +554,16 @@ abstract class DocGenerator extends Models { private val loader = getClass().getClassLoader() + import scala.collection.mutable.{Map, HashMap} + + /** Map a class to it's known subclasses */ + private val subclasses = new HashMap[Symbol, List[Symbol]] { + override def default(key: Symbol): List[Symbol] = { + this += key -> (Nil: List[Symbol]) + Nil: List[Symbol] + } + } + def process(units: Iterator[CompilationUnit]): Unit = { var members = emptyMap @@ -552,6 +578,9 @@ abstract class DocGenerator extends Models { if (!topLevel.contains(sym)) topLevel = topLevel.update(sym, emptyMap) topLevel = topLevel.update(sym, organize0(mmbr, topLevel(sym))) } + for (val p <- cdef.symbol.info.parents) { + subclasses(p.symbol) = cdef.symbol :: subclasses(p.symbol) + } case _ => error("unknown: " + mmbr.tree + " " + mmbr.tree.getClass()) } |