Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


delegate / proxy / decorator

The @delegate macro annotation can be applied to class parameters. The macro will generate missing methods which delegate calls to the annotated value.

Currently the implementation is at a POC stage, doesn't support overloading, method type parameters or multiple parameter lists.

For example:

trait Foo {
  def method1(): String
  def method2(p1: String): Long
  def method3(p1: String): Int
  def method4(p1: String, p2: Long): String

class FooImpl extends Foo {
  def method1() = "m1"
  def method2(p1: String) = 42L
  def method3(p1: String) = p1.length()
  def method4(p1: String, p2: Long) = s"ok $p1 $p2"

class FooWrapper(@delegate wrapped: Foo) extends Foo {
  def method2(p1: String) = 41L

This will compile, even though there's no direct definition of method1, method3 or method4 in FooWrapper. That's because of the @delegate macro annotation, which will generate the missing methods (method2 is already defined). The generated code will be, for example:

def method4(p1: String, p2: Long) = wrapped.method4(p2, p3)

To see the macro in action, execute sbt run.

See also the blog: Automatic generation of delegate methods with Macro Annotations

You can’t perform that action at this time.