in rsc/src/main/scala/rsc/outline/Outliner.scala [398:425]
private def scopify(sym: Symbol): ScopeResolution = {
if (symtab.scopes.contains(sym)) {
ResolvedScope(symtab.scopes(sym))
} else {
symtab.metadata(sym) match {
case OutlineMetadata(outline) =>
outline match {
case DefnMethod(mods, _, _, _, Some(tpt), _) if mods.hasVal => scopify(symtab.sketches(tpt))
case DefnType(_, _, _, _, None, None) => scopify(AnyClass)
case outline: DefnType => scopify(symtab.sketches(outline.ubound.get))
case TypeParam(_, _, _, _, None, _, _) => scopify(AnyClass)
case outline: TypeParam => scopify(symtab.sketches(outline.ubound.get))
case Param(_, _, Some(tpt), _) => scopify(symtab.sketches(tpt))
case outline: Self => scopify(symtab.sketches(symtab.desugars.rets(outline)))
case _ => crash(outline)
}
case ClasspathMetadata(info) =>
info.signature match {
case sig: s.MethodSignature if info.isVal => scopify(sig.returnType)
case sig: s.TypeSignature => scopify(sig.upperBound)
case sig: s.ValueSignature => scopify(sig.tpe)
case sig => crash(info)
}
case NoMetadata =>
MissingResolution
}
}
}