如何为 JRE 方法中的参数定义 Eclipse 外部空注释

How to define Eclipse external null annotations for parameters in JRE methods

我正在尝试使用 Eclipse 的 external null annotationsjava.util.Set 注释 JRE 方法 <T> T[] toArray(T[] a)。预期的效果应该是这样的:

 public interface Set<E> extends Collection<E> {
     ...
     <T> T @NonNull[] toArray(T @NonNull[] a);
     ...
 }

当使用 Eclipse 的 Annotate 命令时,我可以正确地注释方法的 return 类型(在我选择 T[] 并将光标定位在 [ 之前)。但是,尝试对参数执行相同操作失败。按 Cmd-1 只会发出哔哔声,从上下文菜单调用命令时选择 "Annotate" 也是如此。

我最终手动编辑了相应的 Set.eea 文件以定义所需的注释,并处理了正确的 eea file layout。 IE。我在以下位置更改了 annotatedSignature:

class java/util/Set
toArray
 <T:Ljava/lang/Object;>([TT;)[TT;
 <T:Ljava/lang/Object;>([TT;)[1TT;

 <T:Ljava/lang/Object;>([1TT;)[1TT;

这工作正常,编译器正确处理了注释。

因为我可以注释 return 类型而不是参数类型,所以我想知道我做错了什么。或者这是当前 Eclipse 版本的限制?

我正在使用 Eclipse Mars Release (4.5.0, Build id: 20150621-1200) 和jdk1.8.0_60.

这确实是一个错误,我刚刚提交 https://bugs.eclipse.org/477461 来跟踪它。

这是 bug 464081 已针对 4.6 M1 修复(即,在当前针对 Eclipse Neon 的构建中可用),目前建议用于 4.5.2 (Mars.2)