Check that an @Immutable-annotated class:
does not declare or inherit any mutable fields,
any immutable supertypes are instantiated with immutable type arguments as required by
their containerOf spec, and
any enclosing instances are immutable.
Check that an @ThreadSafe-annotated class:
does not declare or inherit any fields which are not thread safe,
any threadsafe supertypes are instantiated with threadsafe type arguments as required by
their containerOf spec, and
any enclosing instances are threadsafe.
Check that the super-type of a @ThreadSafe-annotated type is instantiated with
threadsafe type arguments where required by its annotation's containerOf element, and that any
type arguments that correspond to containerOf type parameters on the sub-type are also in the
super-type's containerOf spec.
Check that a type-use of an @ThreadSafe-annotated type is instantiated with threadsafe
type arguments where required by its annotation's containerOf element.