```
qbin/scalac -Xprint:specialize sandbox/test.scala && qbin/scala Test
[[syntax trees at end of                specialize]] // test.scala
package <empty> {
  abstract trait T[@specialized(scala.Int) X] extends Object {
    def /*T*/$init$(): Unit = {
      ()
    };
    def foo[@specialized(scala.Long) B, @specialized(scala.Long, scala.Int) A](b: B, a: A): B = {
      scala.this.Predef.println("T::foo");
      b
    };
    <specialized> def foo$mIJc$sp(b: Long, a: Int): Long = {
      scala.this.Predef.println("T::foo");
      b
    };
    <specialized> def foo$mJJc$sp(b: Long, a: Long): Long = {
      scala.this.Predef.println("T::foo");
      b
    }
  };
  abstract trait U extends Object with T$mcI$sp {
    def /*U*/$init$(): Unit = {
      ()
    };
    override def foo[@specialized(scala.Long) A, @specialized(scala.Long, scala.Int) B](a: A, b: B): A = {
      scala.this.Predef.println("U::foo");
      a
    };
    override <specialized> def foo$mJIc$sp(a: Long, b: Int): Long = {
      scala.this.Predef.println("U::foo");
      a
    };
    override <specialized> def foo$mJJc$sp(a: Long, b: Long): Long = {
      scala.this.Predef.println("U::foo");
      a
    }
  };
  object Test extends Object with App {
    def <init>(): Test.type = {
      Test.super.<init>();
      ()
    };
    {
  final class $anon extends Object with U {
    def <init>(): <$anon: U> = {
      $anon.super.<init>();
      ()
    }
  };
  new <$anon: U>()
}.foo$mJIc$sp(0L, 0);
    ({
  final class $anon extends Object with U {
    def <init>(): <$anon: U> = {
      $anon.super.<init>();
      ()
    }
  };
  new <$anon: U>()
}: T[Int]).foo$mIJc$sp(0L, 0)
  };
  abstract <specialized> trait T$mcI$sp extends AnyRef with T[Int]
}
```