I am trying to annotate the JRE method <T> T[] toArray(T[] a)
from java.util.Set
using Eclipse's external null annotations. The expected effect should be equivalent to this:
public interface Set<E> extends Collection<E> {
...
<T> T @NonNull[] toArray(T @NonNull[] a);
...
}
When using Eclipse's Annotate command I can annotate the return type of the method properly (after I selected the T[]
and position the cursor before the [
). However trying to do the same with the parameter fails. Pressing Cmd-1 simply beeps, as does selecting "Annotate" when calling the command from the context menu.
I finally ended up editing the corresponding Set.eea
file manually to defined the required annotation, taking care of the proper eea file layout. I.e. I changed the annotatedSignature in:
class java/util/Set
toArray
<T:Ljava/lang/Object;>([TT;)[TT;
<T:Ljava/lang/Object;>([TT;)[1TT;
to
<T:Ljava/lang/Object;>([1TT;)[1TT;
This works fine and the annotation is correctly processed by the compiler.
As I can annotate the return type but not a parameter type I am wondering what I am doing wrong. Or is this a limitation of the current Eclipse version?
I am using Eclipse Mars Release (4.5.0, Build id: 20150621-1200) and jdk1.8.0_60.
This is a bug indeed, I just filed https://bugs.eclipse.org/477461 to track this.This was bug 464081 which got fixed for 4.6 M1 (i.e., is available in current builds towards Eclipse Neon) and is currently proposed for 4.5.2 (Mars.2)