Difficulty in using ListProperty as an optional value

the implementation of ListProperty appears to make it very difficult to use as an optional value, i.e. getOrElse will never produce the value specified as orElse

The reason being that a AbstractCollectionProperty initialises the property with defaultValue = emptySupplier() and convention = noValueSupplier()

emptySupplier yields an empty list so has presence in property terms which means that getOrElse will always resolve to get (as there is a value present for it to get)

The only workaround for this that I can find is to add a call like this

    Iterable<String> empty = null
    myListStringProperty.set(empty)

In groovy, this further requires use of @CompileStatic to enable it to disambiguate between set(Iterable<String>) and set(Provider)

This seems v clumsy behaviour at best (and it’s also not documented as far as I can see). Is there a better way to do this or is the implementation somewhat flawed?

I also would really like to know if this is the intended behavior or a bug. If it is a bug then I intend to create a github issue if it does not already exist.