Skip to content

Commit 1a358ce

Browse files
committed
simplify addinterfaces splitting impl <> interface members
1 parent 822913e commit 1a358ce

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
@@ -244,20 +244,18 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
244244
}
245245
}
246246

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

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

262260
/** Transforms the member tree containing the implementation
263261
* into a member of the impl class.
@@ -288,7 +286,7 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
288286

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

0 commit comments

Comments
 (0)