The plus method is overloaded, and you are looking at the wrong one.
The API for FileCollection.plus that you linked to has the signature:
FileCollection plus​(FileCollection collection)
Returns a FileCollection which contains the union of this collection and the given collection. The returned collection is live, and tracks changes to both source collections.
But you are passing an ArrayList as the parameter. An ArrayList is not a FileCollection.
However, a FileCollection is also an Iterable, so what you are really invoking is the standard Groovy method Interable.plus with this signature:
public Collection plus(Iterable right)
Create a Collection as a union of two iterables. If the left iterable is a Set, then the returned collection will be a Set otherwise a List. This operation will always create a new object for the result, while the operands remain unchanged.
Because the "left" iterable is not a Set (it's a FileCollection), you get a List back, and Groovy just happens to use an ArrayList in the implementation.