Это кажется довольно простым: например, @Immutable для класса, в котором процессор мог бы выдавать ошибку, если бы был какой-либо неконечный доступ к полю.Это должно было бы гарантировать, что все соавторы также были неизменяемыми.
@ReferentiallyTransparent (лучше имя?) Можно было бы поместить в методы, которые затем проверяли бы, чтобы все вызовы и соавторы были также помечены @RefTrans и @Immutable...