summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKato Kazuyoshi <kato.kazuyoshi@gmail.com>2012-05-03 23:44:48 +0900
committerKato Kazuyoshi <kato.kazuyoshi@gmail.com>2012-05-03 23:44:48 +0900
commit44797916bd4437729e1f13333eee7a2a2cb8ca58 (patch)
tree123895606a30cc6dffa63b3bfc922be4ea17a96d
parent6300c3033e7b852c6cbef332af6085aac6150a70 (diff)
downloadscala-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.scala14
-rw-r--r--test/scaladoc/resources/package-object-res.scala14
-rw-r--r--test/scaladoc/run/package-object.check2
-rw-r--r--test/scaladoc/run/package-object.scala15
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)
+ }
+}
+