diff options
author | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2011-04-15 16:12:22 +0000 |
---|---|---|
committer | Kato Kazuyoshi <kato.kazuyoshi@gmail.com> | 2011-04-15 16:12:22 +0000 |
commit | ed52bec270e9ac659638f10c05d1d0efedf4c5cc (patch) | |
tree | b1836ad9cac670bbab41fecbe6a15f9f43293768 | |
parent | 3c8bc3ab731206f93ad8428b11276237d1397a08 (diff) | |
download | scala-ed52bec270e9ac659638f10c05d1d0efedf4c5cc.tar.gz scala-ed52bec270e9ac659638f10c05d1d0efedf4c5cc.tar.bz2 scala-ed52bec270e9ac659638f10c05d1d0efedf4c5cc.zip |
[scaladoc] Strike-through for deprecated symbol...
[scaladoc] Strike-through for deprecated symbols on the reference index.
Closes #4471. Review by dubochet.
5 files changed, 80 insertions, 24 deletions
diff --git a/src/compiler/scala/tools/nsc/doc/Index.scala b/src/compiler/scala/tools/nsc/doc/Index.scala index e845f8e909..ce44291ade 100644 --- a/src/compiler/scala/tools/nsc/doc/Index.scala +++ b/src/compiler/scala/tools/nsc/doc/Index.scala @@ -5,8 +5,8 @@ import scala.collection._ trait Index { - type SymbolMap = SortedMap[String, SortedSet[model.TemplateEntity]] + type SymbolMap = SortedMap[String, SortedSet[model.MemberEntity]] def firstLetterIndex: Map[Char, SymbolMap] -}
\ No newline at end of file +} diff --git a/src/compiler/scala/tools/nsc/doc/html/page/ReferenceIndex.scala b/src/compiler/scala/tools/nsc/doc/html/page/ReferenceIndex.scala index 25e166a782..3e57f260c3 100755 --- a/src/compiler/scala/tools/nsc/doc/html/page/ReferenceIndex.scala +++ b/src/compiler/scala/tools/nsc/doc/html/page/ReferenceIndex.scala @@ -7,7 +7,7 @@ package scala.tools.nsc package doc package html package page - +import doc.model._ class ReferenceIndex(letter: Char, index: doc.Index, universe: Universe) extends HtmlPage { @@ -25,18 +25,34 @@ class ReferenceIndex(letter: Char, index: doc.Index, universe: Universe) extends <script type="text/javascript" src={ relativeLinkTo{List("jquery.js", "lib")} }></script> </xml:group> + + private def entry(name: String, methods: Iterable[MemberEntity]) = { + val occurrences = methods.map(method => { + val html = templateToHtml(method.inDefinitionTemplates.head) + if (method.deprecation.isDefined) { + <strike>{ html }</strike> + } else { + html + } + }) + + <div class="entry"> + <div class="name">{ + if (methods.find { ! _.deprecation.isDefined } != None) + name + else + <strike>{ name }</strike> + }</div> + <div class="occurrences">{ + for (owner <- occurrences) yield owner ++ xml.Text(" ") + }</div> + </div> + } + def body = - <body> - { for(groups <- index.firstLetterIndex(letter)) yield { - <div class="entry"> - <div class="name">{ groups._1 }</div> - <div class="occurrences"> - { for(owner <- groups._2.view) yield { - templateToHtml(owner) ++ xml.Text(" ") - } } - </div> - </div> - } } - </body> + <body>{ + for(groups <- index.firstLetterIndex(letter)) yield + entry(groups._1, groups._2.view) + }</body> } diff --git a/src/compiler/scala/tools/nsc/doc/model/IndexModelFactory.scala b/src/compiler/scala/tools/nsc/doc/model/IndexModelFactory.scala index 6c599e1a88..3d3d3d7876 100755 --- a/src/compiler/scala/tools/nsc/doc/model/IndexModelFactory.scala +++ b/src/compiler/scala/tools/nsc/doc/model/IndexModelFactory.scala @@ -18,7 +18,7 @@ object IndexModelFactory { val result = new mutable.HashMap[Char,SymbolMap] { /* Owner template ordering */ - implicit def orderingSet = math.Ordering.String.on { x: TemplateEntity => x.name.toLowerCase } + implicit def orderingSet = math.Ordering.String.on { x: MemberEntity => x.name.toLowerCase } /* symbol name ordering */ implicit def orderingMap = math.Ordering.String.on { x: String => x.toLowerCase } @@ -27,14 +27,13 @@ object IndexModelFactory { val ch = d.name.head.toLower if(ch.isLetterOrDigit) ch else '#' } - this(firstLetter) = - if(this.contains(firstLetter)) { - val letter = this(firstLetter) - val value = this(firstLetter).get(d.name).getOrElse(SortedSet.empty[TemplateEntity]) + d.inDefinitionTemplates.head - letter + ((d.name, value)) - } else { - immutable.SortedMap( (d.name, SortedSet(d.inDefinitionTemplates.head)) ) + val letter = this.get(firstLetter).getOrElse { + immutable.SortedMap[String, SortedSet[MemberEntity]]() } + val members = letter.get(d.name).getOrElse { + SortedSet.empty[MemberEntity](Ordering.by { _.toString }) + } + d + this(firstLetter) = letter + (d.name -> members) } } @@ -63,4 +62,4 @@ object IndexModelFactory { } -}
\ No newline at end of file +} diff --git a/test/scaladoc/resources/Trac4471.scala b/test/scaladoc/resources/Trac4471.scala new file mode 100644 index 0000000000..2a22887c0d --- /dev/null +++ b/test/scaladoc/resources/Trac4471.scala @@ -0,0 +1,9 @@ +class A { + @deprecated def foo = 123 + @deprecated def bar = 456 +} + +class B { + def foo = 123 + @deprecated def bar = 456 +} diff --git a/test/scaladoc/scala/html/HtmlFactoryTest.scala b/test/scaladoc/scala/html/HtmlFactoryTest.scala index 15f5249c90..cb31df3fb2 100644 --- a/test/scaladoc/scala/html/HtmlFactoryTest.scala +++ b/test/scaladoc/scala/html/HtmlFactoryTest.scala @@ -24,6 +24,7 @@ object Test extends Properties("HtmlFactory") { import scala.tools.nsc.doc.{DocFactory, Settings} import scala.tools.nsc.doc.model.IndexModelFactory import scala.tools.nsc.doc.html.HtmlFactory + import scala.tools.nsc.doc.html.page.ReferenceIndex def getClasspath = { // these things can be tricky @@ -59,6 +60,23 @@ object Test extends Properties("HtmlFactory") { result } + def createReferenceIndex(basename: String) = { + createFactory.makeUniverse(List("test/scaladoc/resources/"+basename)) match { + case Some(universe) => { + val index = IndexModelFactory.makeIndex(universe) + val pages = index.firstLetterIndex.map({ + case (key, value) => { + val page = new ReferenceIndex(key, index, universe) + page.absoluteLinkTo(page.path) -> page.body + } + }) + Some(pages) + } + case _ => + None + } + } + def createTemplate(scala: String) = { val html = scala.stripSuffix(".scala") + ".html" createTemplates(scala)(html) @@ -274,4 +292,18 @@ object Test extends Properties("HtmlFactory") { case _ => false } } + + property("Trac #4471") = { + createReferenceIndex("Trac4471.scala") match { + case Some(pages) => + (pages.get("index/index-f.html") match { + case Some(node) => node.toString.contains(">A</a></strike>") + case _ => false + }) && (pages.get("index/index-b.html") match { + case Some(node) => node.toString.contains(">bar</strike>") + case _ => false + }) + case _ => false + } + } } |