Аннотации на анонимный внутренний тип - PullRequest
1 голос
/ 09 июля 2019

Можно ли получить аннотации по анонимному внутреннему типу? У меня есть нижеприведенный пример, с помощью которого я могу развернуть до поля в анонимном внутреннем типе по 2 маршрутам, и с обоими, аннотации к полю field

не найдены
object ReflectionBug {


  @native
  val outer:Int = 5

  val nested = new {
    @native
    val field:Int = 4
  }

  def main(args:Array[String]) = {
    val mirror = scala.reflect.runtime.universe.runtimeMirror(ReflectionBug.getClass.getClassLoader)
    val t = mirror.classSymbol(ReflectionBug.getClass)
    val members = t.toType.members
    val annotatedMembers = members.filter(_.annotations.nonEmpty)
    //Outer is incuded with annotation native
    val subs = members.filter(_.typeSignature.typeSymbol.isType).map(s => s -> s.typeSignature.members)
    //'field' members under nested member has no annotations


    val mirror2 = scala.reflect.runtime.universe.runtimeMirror(ReflectionBug.nested .getClass.getClassLoader)
    val t2 = mirror2.classSymbol(ReflectionBug.nested .getClass)
    val members2 = t2.toType.members
    val annotates2 = members2.filter(_.annotations.nonEmpty)
    //annotates2 does not contain field
  }
}

1 Ответ

4 голосов
/ 09 июля 2019

Какой тип val nested? Это структурный тип AnyRef { val field: Int }

val nested: { val field: Int } = new {
  @native
  val field:Int = 4
}

Именно поэтому typeSignature теряет аннотацию.

Вы должны найти члена nested, взять его правую сторону и работать с ним.

...