in rsc/src/main/scala/rsc/semanticdb/Params.scala [34:82]
private def overridesNonNullary(tree: DefnMethod, scope: Scope): Boolean = {
val parents = scope match {
case scope: TemplateScope =>
scope.parents
case scope: SignatureScope =>
val syms = scope.signature.parents.collect { case s.TypeRef(_, sym, _) => sym }.toList
syms.map(sym => symtab.scopes(sym))
case _ =>
crash(scope)
}
parents.exists { parent =>
parent.resolve(tree.id.name) match {
case ResolvedSymbol(baseSym) =>
baseSym.asMulti.exists { baseSym =>
symtab.metadata(baseSym) match {
case OutlineMetadata(baseOutline: DefnMethod) =>
baseOutline.desugaredParamss match {
case List() => false
case List(List()) => true
case _ => overridesNonNullary(tree, parent)
}
case ClasspathMetadata(baseInfo) =>
baseInfo.signature match {
case s.MethodSignature(_, paramss, _) =>
paramss match {
case Seq() => false
case Seq(params) if params.symbols.isEmpty =>
scope match {
case scope: TemplateScope
// Best effort approximation; not sure why this is the case
if (scope.tree.hasAbstract || scope.tree.mods.hasTrait) &&
tree.rhs.isEmpty =>
false
case _ => true
}
case _ => overridesNonNullary(tree, parent)
}
case _ =>
false
}
case _ =>
false
}
}
case _ =>
false
}
}
}