Skip to content

Commit c0454b1

Browse files
committed
Refactor AddInterfaces triage of impl v iface member
A tiny bit more duplicated code, but so much more intelligible.
1 parent 2a20ced commit c0454b1

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

src/compiler/scala/tools/nsc/transform/AddInterfaces.scala

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -242,20 +242,18 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
242242
}
243243
}
244244

245-
private def createMemberDef(tree: Tree, isForInterface: Boolean)(create: Tree => Tree) = {
246-
val isInterfaceTree = tree.isDef && isInterfaceMember(tree.symbol)
247-
if (isInterfaceTree && needsImplMethod(tree.symbol))
248-
create(tree)
249-
else if (isInterfaceTree == isForInterface)
250-
tree
251-
else
252-
EmptyTree
253-
}
254-
private def implMemberDef(tree: Tree): Tree = createMemberDef(tree, false)(implMethodDef)
255-
private def ifaceMemberDef(tree: Tree): Tree = createMemberDef(tree, true)(t => DefDef(t.symbol, EmptyTree))
245+
private def isInterfaceTree(tree: Tree) = tree.isDef && isInterfaceMember(tree.symbol)
246+
247+
private def deriveMemberForImplClass(tree: Tree): Tree =
248+
if (isInterfaceTree(tree)) if (needsImplMethod(tree.symbol)) implMethodDef(tree) else EmptyTree
249+
else tree
250+
251+
private def deriveMemberForInterface(tree: Tree): Tree =
252+
if (isInterfaceTree(tree)) if (needsImplMethod(tree.symbol)) DefDef(tree.symbol, EmptyTree) else tree
253+
else EmptyTree
256254

257255
private def ifaceTemplate(templ: Template): Template =
258-
treeCopy.Template(templ, templ.parents, noSelfType, templ.body map ifaceMemberDef)
256+
treeCopy.Template(templ, templ.parents, noSelfType, templ.body map deriveMemberForInterface)
259257

260258
/** Transforms the member tree containing the implementation
261259
* into a member of the impl class.
@@ -286,7 +284,7 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
286284

287285
private def implTemplate(clazz: Symbol, templ: Template): Template = atPos(templ.pos) {
288286
val templ1 = (
289-
Template(templ.parents, noSelfType, addMixinConstructorDef(clazz, templ.body map implMemberDef))
287+
Template(templ.parents, noSelfType, addMixinConstructorDef(clazz, templ.body map deriveMemberForImplClass))
290288
setSymbol clazz.newLocalDummy(templ.pos)
291289
)
292290
templ1.changeOwner(templ.symbol.owner -> clazz, templ.symbol -> templ1.symbol)

0 commit comments

Comments
 (0)