in rsc/src/main/scala/rsc/outline/Synthesizer.scala [75:144]
private def defaultGetters(env: Env, treeTparams: List[TypeParam], tree: Parameterized): Unit = {
var paramPos = 0
val treeParamss = tree.paramss
treeParamss.zipWithIndex.foreach {
case (params, i) =>
params.foreach { param =>
paramPos += 1
if (param.rhs.nonEmpty) {
val mods = tree.mods.flatMap {
case mod: ModPrivate =>
Some(mod)
case mod: ModPrivateThis =>
Some(ModPrivate())
case mod: ModPrivateWithin =>
if (settings.abi == Abi211) None
else Some(mod)
case mod: ModProtected =>
Some(mod)
case mod: ModProtectedThis =>
Some(ModProtected())
case mod: ModProtectedWithin =>
if (settings.abi == Abi211) Some(ModProtected())
else Some(mod)
case mod: ModFinal =>
Some(mod)
case _ =>
None
}
val id = TermId(tree.id.valueopt.get + "$default$" + paramPos)
val tparams = treeTparams.map { tp =>
val mods = Mods(Nil)
val id = TptId(tp.id.valueopt.get).withPos(tp.id.pos)
val lbound = tp.lbound.map(_.dupe)
val ubound = tp.ubound.map(_.dupe)
val tparam = TypeParam(mods, id, Nil, lbound, ubound, Nil, Nil)
tparam.withPos(tp.pos)
}
val paramss = treeParamss
.take(i)
.map(_.map { p =>
val mods = Mods(Nil)
val id = TermId(p.id.valueopt.get)
val tpt = p.tpt.map(_.dupe)
val param = Param(mods, id, tpt, None)
param.withPos(p.pos)
})
val ret = {
val paramTpt = param.tpt.map(_.dupe).map {
case TptByName(tpt) => tpt
case tpt => tpt
}
val rhsTpt = param.rhs match {
case Some(TermAscribe(_, tpt)) => Some(tpt)
case _ => None
}
val tpt = rhsTpt.orElse(paramTpt)
tpt.map { tpt =>
val annotSym = UncheckedVarianceClass
val annotTpt = TptId("uncheckedVariance").withSym(annotSym)
val annot = ModAnnotation(Init(annotTpt, Nil))
TptAnnotate(tpt, Mods(List(annot)))
}
}
val rhs = Some(TermStub())
val meth = DefnMethod(mods, id, tparams, paramss, ret, rhs)
scheduler(env, meth.withPos(param.pos))
}
}
}
}