It was pointed out to me that:
What happen if the type of a property is an interface?
When an abstract or interface type is used as a property in an immutable class, the extending classes might still contain mutable properties.
Therefore, we should likely require such types to also have the immutable annotation applied. Or, is this not a problem?