获取Scala中“超级”调用引用的符号

时间:2013-06-29 22:16:03

标签: scala compiler-construction static-analysis scala-compiler

我正在为refchecks阶段编写一个Scala编译器插件。

在给定呼叫站点的符号的情况下,如何访问“超级”呼叫所指的symbol

例如,在

trait A {
  def m() {}
}

trait B extends A {
  def m() { super.m() }
}

知道调用网站super.m()的符号,我想获得特征A的符号。

1 个答案:

答案 0 :(得分:1)

我认为使用自我类型注释和多重继承将为您服务:

trait HelperTrait {
  def helperMethod {println("calling helperMethod of HelperTrait")}
}

trait PublicInterface { this: HelperTrait =>
  def useHelperMethod 
  { 
    println("calling useHelperMethod of PublicInterface")
    helperMethod 
  }
}

class ImplementationClass extends PublicInterface with HelperTrait

var obj = new ImplementationClass()
obj.useHelperMethod
obj.helperMethod