private def scopify()

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
      }
    }
  }