Skip to content
Snippets Groups Projects
Commit 27fc635d authored by Etienne Kneuss's avatar Etienne Kneuss
Browse files

Correctly extract methods from single case-classes

parent f15d214d
Branches
Tags
No related merge requests found
...@@ -415,32 +415,38 @@ trait CodeExtraction extends ASTExtractors { ...@@ -415,32 +415,38 @@ trait CodeExtraction extends ASTExtractors {
private def extractMethodDefs(defs: List[Tree]) = { private def extractMethodDefs(defs: List[Tree]) = {
// We collect defined function bodies // We collect defined function bodies
for (d <- defs) d match { def extractFromClass(csym: Symbol, tmpl: Template) {
case ExAbstractClass(_, csym, tmpl) => val cd = classesToClasses(csym)
val cd = classesToClasses(csym)
val ctparams = csym.tpe match { val ctparams = csym.tpe match {
case TypeRef(_, _, tps) => case TypeRef(_, _, tps) =>
extractTypeParams(tps).map(_._1) extractTypeParams(tps).map(_._1)
case _ => case _ =>
Nil Nil
} }
val ctparamsMap = ctparams zip cd.tparams.map(_.tp) val ctparamsMap = ctparams zip cd.tparams.map(_.tp)
for (d <- tmpl.body) d match { for (d <- tmpl.body) d match {
case ExFunctionDef(sym, tparams, params, _, body) => case ExFunctionDef(sym, tparams, params, _, body) if !sym.isSynthetic && !sym.isAccessor =>
val fd = defsToDefs(sym) val fd = defsToDefs(sym)
val tparamsMap = (tparams zip fd.tparams.map(_.tp)).toMap ++ ctparamsMap val tparamsMap = (tparams zip fd.tparams.map(_.tp)).toMap ++ ctparamsMap
if(body != EmptyTree) { if(body != EmptyTree) {
extractFunBody(fd, params, body)(DefContext(tparamsMap)) extractFunBody(fd, params, body)(DefContext(tparamsMap))
} }
case _ => case _ =>
} }
}
for (d <- defs) d match {
case ExAbstractClass(_, csym, tmpl) =>
extractFromClass(csym, tmpl)
case ExCaseClass(_, csym, _, tmpl) =>
extractFromClass(csym, tmpl)
case _ => case _ =>
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment