Разрешить обобщения об объявлении статического вызова метода - PullRequest
1 голос
/ 15 марта 2019

Я пишу процессор аннотаций, который должен генерировать код, вызывающий статический метод, такой как Collectors.toList() (полная подпись: public static <I> Collector<I, ?, List<I>> toList())

Пример ввода:

class Pojo<X> {
  public @CollectWith("Collectors.toList()") List<Thing<X>> things;
}

Фрагмент кода, сгенерированного сверху:

Collector<Thing<X>, ?, List<Thing<X>>> thingsCollector = Collectors.toList();
  • Базовый тип возврата вызова метода всегда Collector<T,A,R>
  • Из контекста вызова код знает R (над ним List<Thing<X>>)
  • Тип-переменные T и AI) неизвестны

Кусочки головоломки

// Lookup specified Collector method
TypeElement collectors = elements.getTypeElement("java.util.stream.Collectors");
ExecutableElement toListMethod = findMethod(collectors, "toList"); 
DeclaredType toListMethodReturnType = (DeclaredType)toListMethod.getReturnType(); // java.util.stream.Collector<T,?,java.util.List<T>>

// R is already known.
DeclaredType R = ... // java.util.List<Thing<X>>

Q: Существует ли какой-либо код, который разрешает отсутствующие переменные типа и может вычислить DeclaredType из thingsCollector как Collector<Thing<X>, ?, List<Thing<X>>>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...