summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2015-11-03 17:53:04 -0800
committerAdriaan Moors <adriaan.moors@typesafe.com>2015-11-12 13:28:15 -0800
commitc0454b1ea635ca0b6a57805572a6da96c76aff2e (patch)
tree4b19970483f0c2dc0bc55b353079dd98f875f679 /src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
parent2a20ced512038a930e79fc14bb30782fbd910ac1 (diff)
downloadscala-c0454b1ea635ca0b6a57805572a6da96c76aff2e.tar.gz
scala-c0454b1ea635ca0b6a57805572a6da96c76aff2e.tar.bz2
scala-c0454b1ea635ca0b6a57805572a6da96c76aff2e.zip
Refactor AddInterfaces triage of impl v iface member
A tiny bit more duplicated code, but so much more intelligible.
Diffstat (limited to 'src/compiler/scala/tools/nsc/transform/AddInterfaces.scala')
-rw-r--r--src/compiler/scala/tools/nsc/transform/AddInterfaces.scala24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
index 82e7c76409..085a814c6b 100644
--- a/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
+++ b/src/compiler/scala/tools/nsc/transform/AddInterfaces.scala
@@ -242,20 +242,18 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
}
}
- private def createMemberDef(tree: Tree, isForInterface: Boolean)(create: Tree => Tree) = {
- val isInterfaceTree = tree.isDef && isInterfaceMember(tree.symbol)
- if (isInterfaceTree && needsImplMethod(tree.symbol))
- create(tree)
- else if (isInterfaceTree == isForInterface)
- tree
- else
- EmptyTree
- }
- private def implMemberDef(tree: Tree): Tree = createMemberDef(tree, false)(implMethodDef)
- private def ifaceMemberDef(tree: Tree): Tree = createMemberDef(tree, true)(t => DefDef(t.symbol, EmptyTree))
+ private def isInterfaceTree(tree: Tree) = tree.isDef && isInterfaceMember(tree.symbol)
+
+ private def deriveMemberForImplClass(tree: Tree): Tree =
+ if (isInterfaceTree(tree)) if (needsImplMethod(tree.symbol)) implMethodDef(tree) else EmptyTree
+ else tree
+
+ private def deriveMemberForInterface(tree: Tree): Tree =
+ if (isInterfaceTree(tree)) if (needsImplMethod(tree.symbol)) DefDef(tree.symbol, EmptyTree) else tree
+ else EmptyTree
private def ifaceTemplate(templ: Template): Template =
- treeCopy.Template(templ, templ.parents, noSelfType, templ.body map ifaceMemberDef)
+ treeCopy.Template(templ, templ.parents, noSelfType, templ.body map deriveMemberForInterface)
/** Transforms the member tree containing the implementation
* into a member of the impl class.
@@ -286,7 +284,7 @@ abstract class AddInterfaces extends InfoTransform { self: Erasure =>
private def implTemplate(clazz: Symbol, templ: Template): Template = atPos(templ.pos) {
val templ1 = (
- Template(templ.parents, noSelfType, addMixinConstructorDef(clazz, templ.body map implMemberDef))
+ Template(templ.parents, noSelfType, addMixinConstructorDef(clazz, templ.body map deriveMemberForImplClass))
setSymbol clazz.newLocalDummy(templ.pos)
)
templ1.changeOwner(templ.symbol.owner -> clazz, templ.symbol -> templ1.symbol)