diff options
author | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2012-05-03 23:44:48 +0900 |
---|---|---|
committer | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2012-05-03 23:44:48 +0900 |
commit | 44797916bd4437729e1f13333eee7a2a2cb8ca58 (patch) | |
tree | 123895606a30cc6dffa63b3bfc922be4ea17a96d | |
parent | 6300c3033e7b852c6cbef332af6085aac6150a70 (diff) | |
download | scala-44797916bd4437729e1f13333eee7a2a2cb8ca58.tar.gz scala-44797916bd4437729e1f13333eee7a2a2cb8ca58.tar.bz2 scala-44797916bd4437729e1f13333eee7a2a2cb8ca58.zip |
Fix SI-4976 partially
If a package have a package object, generate the package's "linearization"
from the object.
-rw-r--r-- | src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala | 14 | ||||
-rw-r--r-- | test/scaladoc/resources/package-object-res.scala | 14 | ||||
-rw-r--r-- | test/scaladoc/run/package-object.check | 2 | ||||
-rw-r--r-- | test/scaladoc/run/package-object.scala | 15 |
4 files changed, 42 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala index a6728654cd..9062203dcd 100644 --- a/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala +++ b/src/compiler/scala/tools/nsc/doc/model/ModelFactory.scala @@ -231,9 +231,10 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { Some(makeType(RefinedType(tps, EmptyScope), inTpl)) } } - val linearization: List[(TemplateEntity, TypeEntity)] = { - sym.ancestors map { ancestor => - val typeEntity = makeType(sym.info.baseType(ancestor), this) + + protected def linearizationFromSymbol(symbol: Symbol) = { + symbol.ancestors map { ancestor => + val typeEntity = makeType(symbol.info.baseType(ancestor), this) val tmplEntity = makeTemplate(ancestor) match { case tmpl: DocTemplateImpl => tmpl registerSubClass this ; tmpl case tmpl => tmpl @@ -242,6 +243,7 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { } } + val linearization = linearizationFromSymbol(sym) def linearizationTemplates = linearization map { _._1 } def linearizationTypes = linearization map { _._2 } @@ -282,6 +284,12 @@ class ModelFactory(val global: Global, val settings: doc.Settings) { abstract class PackageImpl(sym: Symbol, inTpl: => PackageImpl) extends DocTemplateImpl(sym, inTpl) with Package { override def inTemplate = inTpl override def toRoot: List[PackageImpl] = this :: inTpl.toRoot + override val linearization = { + val symbol = sym.info.members.find { + s => s.isPackageObject + } getOrElse sym + linearizationFromSymbol(symbol) + } val packages = members collect { case p: Package => p } } diff --git a/test/scaladoc/resources/package-object-res.scala b/test/scaladoc/resources/package-object-res.scala new file mode 100644 index 0000000000..17d5c0a499 --- /dev/null +++ b/test/scaladoc/resources/package-object-res.scala @@ -0,0 +1,14 @@ +/** This package have A and B. + */ +package test { + trait A { def hi = "hello" } + trait B { def bye = "bye!" } +} + +/** This package object extends A and B. + */ +package object test extends A with B { + override def hi = "good morning!" + override def bye = "good bye!" + protected def thank = "thank you!" +} diff --git a/test/scaladoc/run/package-object.check b/test/scaladoc/run/package-object.check new file mode 100644 index 0000000000..4297847e73 --- /dev/null +++ b/test/scaladoc/run/package-object.check @@ -0,0 +1,2 @@ +List((test.B,B), (test.A,A), (scala.AnyRef,AnyRef), (scala.Any,Any)) +Done. diff --git a/test/scaladoc/run/package-object.scala b/test/scaladoc/run/package-object.scala new file mode 100644 index 0000000000..fd36a8df7b --- /dev/null +++ b/test/scaladoc/run/package-object.scala @@ -0,0 +1,15 @@ +import scala.tools.nsc.doc.model._ +import scala.tools.partest.ScaladocModelTest +import language._ + +object Test extends ScaladocModelTest { + override def resourceFile = "package-object-res.scala" + override def scaladocSettings = "" + def testModel(root: Package) = { + import access._ + + val p = root._package("test") + println(p.linearization) + } +} + |