public class CollectionToArrayHeuristics extends Object
Collection.toArray()
and determines the appropriate nullness
type of the returned value.
The semantics of Collection.toArray()
and Collection.toArray(T[])
cannot be captured by the regular type system. Namely, the nullness of
the returned array component depends on the receiver type argument. So
Collection<@NonNull String> c1 = ...;
c1.toArray(); // returns @NonNull Object []
Collection<@Nullable String> c2 = ...;
c2.toArray(); // returns @Nullable Object []
In the case of Collection.toArray(T[])
, the type of the
returned array depends on the passed parameter as well and its size. In particular, the returned
array component would be of type @NonNull
if the following conditions hold:
NonNull
Collection.toArray(T[])
,
namely if the passed array is
c.toArray(new String[] { })
,
c.toArray(new String[0])
, or
c.toArray(new
String[c.size()])
Constructor and Description |
---|
CollectionToArrayHeuristics(ProcessingEnvironment env,
NullnessAnnotatedTypeFactory factory) |
Modifier and Type | Method and Description |
---|---|
void |
handle(MethodInvocationTree tree,
AnnotatedTypeMirror.AnnotatedExecutableType method)
Apply the heuristics to the given method invocation and corresponding
Collection.toArray() type. |
public CollectionToArrayHeuristics(ProcessingEnvironment env, NullnessAnnotatedTypeFactory factory)
public void handle(MethodInvocationTree tree, AnnotatedTypeMirror.AnnotatedExecutableType method)
Collection.toArray()
type.
If the method invocation is a call to toArray
, then it manipulates the returned
type of method
arg to contain the appropriate nullness. Otherwise, it does nothing.
tree
- method invocation treemethod
- invoked method type