5

Ich schreibe ein Scala-Compiler-Plugin für die refchecks-Phase.Erhalte das Symbol, auf das sich ein "Super" -Aufruf in Scala bezieht

Wie erreiche ich die symbol, auf die sich ein "Super" -Aufruf bezieht, angesichts des Symbols der Callsite?

Zum Beispiel in

trait A { 
    def m() {} 
} 

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

das Symbol für die callsite weiß super.m(), würde Ich mag A das Symbol für Zug bekommen.

+0

sind getClass() und classof() für konkrete Fälle und Klassen/-arten nicht, was Sie wollen oder nicht, in dieser Phase zur Verfügung? –

Antwort

1

Ich denke, mit der Selbst Typenannotationen und Mehrfachvererbung werden Sie dienen:

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