summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2006-10-11 09:58:51 +0000
committerIulian Dragos <jaguarul@gmail.com>2006-10-11 09:58:51 +0000
commit9fc39d7b60b1bb9906210e7ddf818ab87328a469 (patch)
treee0632a4c3a44fa08eff1b63dac97446badc16c9b /src/compiler
parentaa9629c845cde020d3c129185d0bde8f3e9922b2 (diff)
downloadscala-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.scala33
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())
}