1
package scala.tools.nsc
7
/** This trait extracts all required information for documentation from compilation units */
8
trait MemberLookup extends base.MemberLookupBase {
9
thisFactory: ModelFactory =>
12
import definitions.{ NothingClass, AnyClass, AnyValClass, AnyRefClass, ListClass }
14
override def internalLink(sym: Symbol, site: Symbol): Option[LinkTo] =
15
findTemplateMaybe(sym) match {
16
case Some(tpl) => Some(LinkToTpl(tpl))
18
findTemplateMaybe(site) flatMap { inTpl =>
19
inTpl.members find (_.asInstanceOf[EntityImpl].sym == sym) map (LinkToMember(_, inTpl))
23
override def chooseLink(links: List[LinkTo]): LinkTo = {
24
val mbrs = links.collect {
25
case lm@LinkToMember(mbr: MemberEntity, _) => (mbr, lm)
30
mbrs.min(Ordering[MemberEntity].on[(MemberEntity, LinkTo)](_._1))._2
33
override def toString(link: LinkTo) = link match {
34
case LinkToTpl(tpl: EntityImpl) => tpl.sym.toString
35
case LinkToMember(mbr: EntityImpl, inTpl: EntityImpl) =>
36
mbr.sym.signatureString + " in " + inTpl.sym.toString
37
case _ => link.toString
40
override def findExternalLink(sym: Symbol, name: String): Option[LinkToExternal] = {
42
if (sym == AnyClass || sym == AnyRefClass || sym == AnyValClass || sym == NothingClass) ListClass
43
else if (sym.isPackage)
44
/* Get package object which has associatedFile ne null */
45
sym.info.member(newTermName("package"))
47
Option(sym1.associatedFile) flatMap (_.underlyingSource) flatMap { src =>
49
settings.extUrlMapping get path map { url =>
50
LinkToExternal(name, url + "#" + name)
54
settings.extUrlPackageMapping find {
55
case (pkg, _) => name startsWith pkg
57
case (_, url) => LinkToExternal(name, url + "#" + name)
62
override def warnNoLink = !settings.docNoLinkWarnings.value