Я пытаюсь аннотировать метод JRE <T> T[] toArray(T[] a)
из java.util.Set
, используя Eclipse внешние нулевые аннотации. Ожидаемый эффект должен быть эквивалентен этому:
public interface Set<E> extends Collection<E> {
...
<T> T @NonNull[] toArray(T @NonNull[] a);
...
}
При использовании команды Eclipse Annotate я могу правильно аннотировать возвращаемый тип метода (после того, как я выбрал T[]
и поместил курсор перед [
). Однако попытка сделать то же самое с параметром не удалась. Нажатие Cmd-1 просто издает звуковой сигнал, как и выбор «Аннотировать» при вызове команды из контекстного меню.
В конце концов я отредактировал соответствующий файл Set.eea
вручную, чтобы определить требуемую аннотацию, позаботившись о правильном макет файла eea. т.е. Я изменил annotatedSignature в:
class java/util/Set
toArray
<T:Ljava/lang/Object;>([TT;)[TT;
<T:Ljava/lang/Object;>([TT;)[1TT;
to
<T:Ljava/lang/Object;>([1TT;)[1TT;
Это отлично работает, и аннотация корректно обрабатывается компилятором.
Поскольку я могу аннотировать тип возвращаемого значения, но не тип параметра, мне интересно, что я делаю неправильно. Или это ограничение текущей версии Eclipse?
Я использую выпуск Eclipse Mars (4.5.0, идентификатор сборки: 20150621-1200) и jdk1.8.0_60.