aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast/TreeInfo.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-11-09 13:21:06 +0100
committerDmitry Petrashko <dmitry.petrashko@gmail.com>2014-11-10 13:31:00 +0100
commit540479ad682fae4278f15e9eb7d4a17f084e21b2 (patch)
treec7f331ff2764ebfdf5fe5d31f94c529eb504268f /src/dotty/tools/dotc/ast/TreeInfo.scala
parent18cd0dde7e949d6ae20f451f98843d48f28e2e26 (diff)
downloaddotty-540479ad682fae4278f15e9eb7d4a17f084e21b2.tar.gz
dotty-540479ad682fae4278f15e9eb7d4a17f084e21b2.tar.bz2
dotty-540479ad682fae4278f15e9eb7d4a17f084e21b2.zip
Clean up code relating to interfaces.
Previous implementation was confused about the meaning of interface (with default methods or without?). Now instead of Interface/JavaInterface we have PureInterface - all members are abstract methods NoInits - all members are methods
Diffstat (limited to 'src/dotty/tools/dotc/ast/TreeInfo.scala')
-rw-r--r--src/dotty/tools/dotc/ast/TreeInfo.scala15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/dotty/tools/dotc/ast/TreeInfo.scala b/src/dotty/tools/dotc/ast/TreeInfo.scala
index 51e1ff16f..8163c8bcc 100644
--- a/src/dotty/tools/dotc/ast/TreeInfo.scala
+++ b/src/dotty/tools/dotc/ast/TreeInfo.scala
@@ -26,15 +26,18 @@ trait TreeInfo[T >: Untyped <: Type] { self: Trees.Instance[T] =>
/** Is tree legal as a member definition of an interface?
*/
- def isInterfaceMember(tree: Tree): Boolean = unsplice(tree) match {
- case EmptyTree => true
- case Import(_, _) => true
- case TypeDef(_, _, _) => true
- case DefDef(mods, _, _, _, _, __) => mods.flags is Deferred
- case ValDef(mods, _, _, _) => mods is Deferred
+ def isPureInterfaceMember(tree: Tree): Boolean = unsplice(tree) match {
+ case EmptyTree | Import(_, _) | TypeDef(_, _, _) => true
+ case DefDef(_, _, _, _, _, rhs) => rhs.isEmpty
+ case ValDef(mods, _, _, rhs) => rhs.isEmpty
case _ => false
}
+ /** Is tree legal as a member definition of a no-init trait?
+ */
+ def isNoInitMember(tree: Tree): Boolean =
+ isPureInterfaceMember(tree) || unsplice(tree).isInstanceOf[DefDef]
+
def isOpAssign(tree: Tree) = unsplice(tree) match {
case Apply(fn, _ :: Nil) =>
unsplice(fn) match {