checkers.nullness
Class CollectionToArrayHeuristics
java.lang.Object
   checkers.nullness.CollectionToArrayHeuristics
checkers.nullness.CollectionToArrayHeuristics
public class CollectionToArrayHeuristics
extends Object
Handles calls to Collection.toArray() and determines
 the appropriate nullness type of the returned value.
 
 Collection.toArray() and Collection.toArray(T[]) method semantics 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 of type @NonNull if the following
 conditions hold:
 
 - The receiver collection type argument is NonNull
- The passed array size is less than the collection size
While checking for the second condition, requires a runtime check, we
 provide heuristics to handle the most common cases ofCollection.toArray(T[]), namely if the
 passed array is
 
 - an empty array initializer, e.g.
 c.toArray(new String[] { }),
- array creation tree of size 0, e.g.
 c.toArray(new String[0]), or
- array creation tree of the collection size method invocation
 c.toArray(new String[c.size()])
Note: The nullness of the returned array doesn't depend on the passed
 array nullness.
 
 
| Methods inherited from class java.lang.Object | 
| clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
 
CollectionToArrayHeuristics
public CollectionToArrayHeuristics(ProcessingEnvironment env,
                                   NullnessAnnotatedTypeFactory factory)
handle
public void handle(MethodInvocationTree tree,
                   AnnotatedTypeMirror.AnnotatedExecutableType method)
- Apply the heuristics to the given method invocation and corresponding
 Collection.toArray()type.
 If the method invocation is a call totoArray, then it
 manipulates the returned type ofmethodarg to contain the
 appropriate nullness.  Otherwise, it does nothing.
 
- 
- Parameters:
- tree- method invocation tree
- method- invoked method type